论文部分内容阅读
软件水印是软件版权保护的重要手段,它通过向目标程序嵌入标志版权所有者的特定信息来达到身份认证的目的。根据嵌入水印时刻的不同,软件水印分为动态软件水印与静态软件水印,其中动态图软件水印与方程式软件水印又分别是动态软件水印与静态软件水印的典型代表。软件水印涉及到的关键技术包括水印的分存技术、水印的编码技术以及水印的防篡改技术,它们关系到软件水印系统的数据率、隐蔽性以及鲁棒性等性能评价指标。本文围绕软件水印的关键技术,从以下几个方面展开了研究:(1)针对传统动态图软件水印算法数据率低、编码解码时间复杂度高、鲁棒性差的缺点,提出了一种扩展PPCT(Public Planar Cubic Tree)的动态图编码结构EPPCT(Extended PPCT)。该编码结构通过对每个PPCT树节点增加两个用来编码四进制系数的指针域,在相同的空间复杂度的情况下降低了编码与解码水印图的时间复杂度,提高了PPCT编码的数据率;同时,根据EPPCT树节点指针指向的关系以及先序遍历的序号,提出了基于循环冗余校验的动态图防篡改方案,该方案通过计算水印图的信息码以及对应的CRC(Cyclic RedundancyCheck)码,并将CRC解码函数作为水印的防篡改验证函数插入到程序的执行代码中去,增强了水印的鲁棒性。(2)针对传统软件水印分存算法分存粒度不均、分存与恢复的时间复杂度高、子水印需独立编码的缺点,提出了一种基于m-n变进制规则的分存算法。该算法建立了整数、m-n变进制数、排列数以及RPG(Reducible Permutation Graph)结构的一一对应的关系以及相互转换的规则,在水印分存时,利用除p取余法将水印值转换为一组以m-n变进制数表示的子水印,提高了水印分存的效率;水印编码时,先通过一个基于线性表的完美Hash函数将m-n变进制数转换为对应的排列数,再根据排列数将子水印一起编码为一个RPG结构,避免了分存后的子水印独立编码导致数据扩张的缺点。(3)针对传统的方程式静态软件水印算法数据率及空间利用率低、鲁棒性差的缺点,提出了一种基于完全变进制数的方程式软件水印算法。该算法通过查找程序中满足一定条件的可安全交换方程式作为密钥向量,再利用除^取余法将水印值转换为m-n变进制数的特殊情况——完全变进制数,并利用一个基于循环右移的完美Hash函数对密钥向量中各操作数的位序进行重排,实现了水印的高效隐藏与提取。该算法扩大了方程式软件水印的可表示数范围空间,提高了水印的数据率,并能抵御多种扭曲攻击。