专利名称:一种动态软件水印的编码方法
技术领域:
本发明涉及一种软件水印的编码方法,尤其是一种动态软件水印 的编码方法。
背景技术:
计算机软件版权作为知识产权的价值正在不断提高。从技术方面 来说,对软件版权的保护就是通过足够的证据证明作者对软件程序的 所有权,而事先嵌入到软件程序中的水印便是这种证明软件作者所有 权的证据。
水印可以是一段文字、标识、序列号等,它与图像、音频、视频、 软件程序等原始数据紧密结合并隐藏其中,成为源数据不可分离的一
部分。然而,不同于图像水印、音频水印、^L频水印等多^ 某体水印4支 术,软件水印技术在水印的隐蔽性和抗攻击性等方面存在较大的难度。 在^^开号为"W09964973 ,,,名称为 "Software Watermarking Techniques"的专利申请中介绍了直接将版权信息嵌入到软件程序中
印方法,其中,动态软件水印方法中介绍了 7f基数循环链表水印结构 和PPCT (Planted Plane Cubic Tree,改造的平面立体树)水印结构。 /基数循环链表水印的编码方法如下对于十进制的水印数W,将其yf进制分解为^=^>,《',其中,()&,<^。相应地,此水印数#
'=0
可以用含有iM个节点的首尾相连的循环双指针链表来表示,其中,
每个节点有左右两个指针,为便于定位水印而设的头节点的右指针指 向水印的首节点,其余节点的右指针指向循环链表的下一个节点,其
中,水印的尾节点的右指针指向头节点;头节点的左指针为空,其余 节点的左指针依次用来编码水印数W分解得到的f进制数的各位数值 A O = 0,l,......2),编码规则如下左指针为空表示0;左指针指向
节点自身表示1;左指针指向循环链表中除头节点外的下一个节点表 示2,以此类推。因此,若水印数#= 4453,可以将其分解为六进制 凄t: 〃= 4453化=3x 64+2x 63 + 3x62+4x6'+1x6°= 323416 ,则编码得到 的/基数循环链表水印如图1所示,即101节点表示3, 102节点表示 2, 103节点表示3, 104节点表示4, 105节点表示1。
PPCT水印由PPCT树演化而来,如图2所示,PPCT树是一种特殊 的二叉树,对其加以改进即得到PPCT水印。参照图3,改进得到的PPCT 水印的每个节点包括左右两个指针;其中,头节点301的左指针指向 PPCT树的右下节点302,右指针指向PPCT树的根节点304;头节点以 外的节点中,非叶子节点的左右指针分别指向自身的左右子节点,叶 子节点的右指针指向节点自身;各叶子节点从PPCT树的右下节点302 开始到PPCT树的左下节点303为止,通过其左指针顺时针依次相连, PPCT树的左下节点303的左指针指向头节点301。
从以上的描述可以看出,PPCT水印中叶子节点的右指针并不包含 有编码信息,而if基数循环链表水印的表示形式相对筒单,因而,两 者作为软件水印时,其隐蔽性及抗攻击性仍存在一定的不足。
发明内容
本发明要解决的技术问题是提供一种动态软件水印的编码方法, 提高了软件水印的隐蔽性和抗攻击性。
本发明解决其技术问题所采用的技术方案是 一种动态软件水印的编码方法,包括以下步骤
a、 将水印数N分解为/进制数,其中,/大于1的正整数;
b、 构造具有f-1个叶节点的PPCT水印;
c、 在由所述PPCT水印的头节点及所述叶节点通过其左指针构成 的循环链表中,根据所述J进制数及/基数循环链表水印指针编码规 则更新所述叶节点右指针的指向,使得所述叶子节点通过其右指针的 指向表示所述if进制数的各位数值。
上述方案中,所述步骤a中,所述水印数N分解为r进制数时, 通过式(1)表示
<formula>formula see original document page 5</formula> 式(1 )
其中,e,为所述f进制数的各位数值,为自然数且小于/。
上述方案中,所述水印数N为两个代表软件版权信息的质数^和 / 2之积。
上述方案中,所述循环链表的头节点的左指针指向的叶子节点至 左指针指向所述头节点的叶子节点,依次从高位到低位或者从低位到 高位表示所述/进制数的各位数值。
上述方案中,所述/基数循环链表水印指针编码规则为右指针 为空,所述右指针所在节点表示0;右指针指向所在节点自身,所述 右指针所在节点表示1;右指针指向所述循环链表中除头节点及所在 节点外的其余节点,指向节点与所在节点之间存在的除头节点外的节点数为n时,所述右指针所在节点表示n+2,其中,n为自然数。
本发明的有益效果主要表现在本发明提供了 一种实时动态编码 生成软件水印的方法,水印实时生成并包含有较多的指针,由于操作 系统内存管理的特点,每次生成水印时,指针的具体值均不相同,从 而增大了盗版者的攻击难度,提高了软件水印的隐蔽性和抗攻击性。
图1为7T基数循环链表水印的结构示意图2为PPCT树的结构示意图3为PPCT水印的结构示意图4为本发明动态软件水印的编码流程图5为水印数为703时采用本发明编码生成水印的结构示意图。
具体实施例方式
图1至图3已在背景技术中加以描述,此处不再赘述。 本发明描述的编码方法实时生成的软件水印中,包含软件版权信 息的是两个质数A和^。软件作者可以选择两个足够大的^和A,并 将两者相乘所得更大的数作为水印数使得攻击者破解时所付出的 代价要远大于其所能承受的代价。软件作者将水印的编码程序嵌入到 宿主软件程序后,必要时触发运行生成软件水印,由于该软件水印是
动态编码得到的,并且水印数yV为《和^的乘积,根据数论中的大数 分解难的理论,盗版者即使得到了水印数A也很难得到真正包含版 4又信息的A和A,而只有合法用户才能在^f佥测到^后将其分解为A和 A,从而证明其合法身份,实现软件的版权保护。下面结合图4及图5对本发明作进一步的描述。
参照图4, 一种动态软件水印的编码方法,包括以下步骤
S401:将两个代表软件版权信息的质数《和^之积一一水印数yV 分解为/进制数,其中,f为大于l的正整数,分解后的#可以通过 式(1)表示
<formula>formula see original document page 7</formula>
其中,e'为分解得到的/进制数的各位数值,其为自然数且小于/;
S402:构造具有J-1个叶节点的PPCT水印;PPCT水印的结构已 在背景技术中加以介绍,此处不再赘述;
S403:在由PPCT水印的头节点及各个叶节点通过它们的左指针构 成的循环链表中,根据分解得到的7f进制数及J基数循环链表水印指 针编码规则更新各个叶节点右指针的指向,使得各个叶子节点通过其 右指针的指向表示该J进制数的各位数值,也就是说,循环链表的头 节点的左指针指向的叶子节点至左指针指向头节点的叶子节点,依次 从高位到低位或者从低位到高位表示该J进制数的各位数值;所述的 f基数循环链表水印指针编码规则为
1、 右指针为空,该右指针所在节点表示O;
2、 右指针指向所在节点自身,该右指针所在节点表示l;
3、 右指针指向循环链表中除头节点及所在节点外的其余节点,指 向节点与所在节点之间存在的除头节点外的节点数为/7时,右指针所 在节点表示肝2,其中,刀为自然数;也就是说,右指针指向循环链表 中除头节点外的下一个节点时,右指针所在节点表示2,以此类推。
图5为水印数<formula>formula see original document page 7</formula>
采用上述编码方法的编码结果,其中,头节点及各个叶节点通过它们的左指针构成的循环链表中,401节点至405节点,依次从高位到低位表示N分解后的各位数值,即401节点表示3, 402节点表示2, 403节点表示3, 404节点表示4, 405节点表示1。
本发明编码生成的软件水印具有二叉树和链表的双重特点,其指针的具体值在每次运行时都是不同的,具有较好的隐蔽性和抗攻击性。这种结构中某些节点的指针若被篡改,可以依据编码规则对其进行有效的恢复以防篡改。另外,这种具有J-1个叶节点的结构,只要找到其中的一个节点,延其左指针就可以在if-2步内找到头节点,从而能够实现对整个软件水印的遍历,这有助于在内存堆栈中对软件水印的定位。
以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
权利要求
1、一种动态软件水印的编码方法,其特征在于,包括以下步骤a、将水印数N分解为K进制数,其中,K为大于1的正整数;b、构造具有K-1个叶节点的改造的平面立体树水印;c、在由所述改造的平面立体树水印的头节点及所述叶节点通过其左指针构成的循环链表中,根据所述K进制数及K基数循环链表水印指针编码规则更新所述叶节点右指针的指向,使得所述叶子节点通过其右指针的指向表示所述K进制数的各位数值。
2、 如权利要求1所述的动态软件水印的编码方法,其特征在于, 所述步骤a中,所述水印数N分解为K进制数时,通过式(l)表示iV = §e,x/:' 式(1)其中,e,为所述K进制数的各位数值,为自然数且小于K。
3、 如权利要求1或2所述的动态软件水印的编码方法,其特征在 于所述水印数N为两个代表软件版权信息的质数A和i 2之积。
4、 如权利要求1所述的动态软件水印的编码方法,其特征在于 所述循环链表的头节点的左指针指向的叶子节点至左指针指向所述头 节点的叶子节点,依次从高位到低位或者从低位到高位表示所述K进 制数的各位数值。
5、 如权利要求1所述的动态软件水印的编码方法,其特征在于, 所述K基数循环链表水印指针编码规则为右指针为空,所述右指针 所在节点表示0;右指针指向所在节点自身,所述右指针所在节点表 示1;右指针指向所述循环链表中除头节点及所在节点外的其余节点, 指向节点与所在节点之间存在的除头节点外的节点数为n时,所述右指针所在节点表示n+2,其中,n为自然数。
全文摘要
本发明公开了一种动态软件水印的编码方法,首先,将水印数N分解为K进制数,其中,K大于1的正整数;然后,构造具有K-1个叶节点的PPCT水印;最后,在由所述PPCT水印的头节点及所述叶节点通过其左指针构成的循环链表中,根据所述K进制数及K基数循环链表水印指针编码规则更新所述叶节点右指针的指向,使得所述叶子节点通过其右指针的指向表示所述K进制数的各位数值。本发明所述技术方案提高了软件水印的隐蔽性和抗攻击性。
文档编号G06F21/00GK101630354SQ20081006853
公开日2010年1月20日 申请日期2008年7月16日 优先权日2008年7月16日
发明者沈静博 申请人:中兴通讯股份有限公司