动态自我验证的软件水印防篡改技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第37卷 第5期吉林大学学报(工学版)
Vol.37 No.52007年9月
Journal o f Jilin U niv ersity (Engineering and T echnolo gy Edition)
S ept.2007
收稿日期:2006-02-07.
基金项目:国家自然科学基金资助项目(60373099).
作者简介:张雪松(1974-),男,博士研究生.研究方向:信息安全技术.E -mail:x s_zhang@ 通讯联系人:崔维力(1956-)男,教授,博士生导师.研究方向:信息安全技术.E -mail:cuiweili@
动态自我验证的软件水印防篡改技术
张雪松,李 昕,崔维力,赫枫龄,左万利
(吉林大学计算机科学与技术学院,长春130012)
摘 要:提出一种与特定语言无关的动态自我验证的软件水印防篡改技术。利用线性哈希函数对水印结构进行分块计算,既包含了结点顺序信息,又包含了结点数量信息,同时采用常量迁移技术使完整性检查隐藏在程序本身正常的逻辑判断语句中。由于水印结构的验证码是自包含的,对其篡改会导致应用程序功能错误。分析结果表明,本算法能够抵御多种形式的攻击,具有很强的保护能力。
关键词:计算机应用;软件水印;防篡改;动态图;自我验证
中图分类号:T P309 文献标识码:A 文章编号:1671-5497(2007)05-1148-06
Dynamic self -checking software watermark tamper -proofing method
Zhang Xue -song ,Li Xin,Cui We-i li,H e Feng -ling,Zuo Wan -li
(Colleg e of Co mp uter Science and T echnolog y ,J ilin Univ er sity ,Changchun 130012,China)
Abstract:A dynam ic self -checking softw are w ater mark tamper -pr oofing method,w hich is specific lang uage unrelated,w as pr opo sed.T he w aterm ar k str ucture w as divided into sub -blocks and calculated by linear hashing functio n,w hich includes both the sequence infor matio n and the quantity information of the nodes.A co nstant migration technique w raps the integr ity checking in the nor mal logical judg ment operation of the w aterm arked pr ogram.Due to that the authentication code o f the w atermark structur e is self -contained,tam pering the str ucture w ill lead to the application's undefined behav ior.Analy sis results show that the alg orithm is capable to w ithstand multiform attacks and its pro tective capability is strong.
Key words:com puter application;softw are watermark;tamper -pr oofing;dynamic gr aph;self -checking 根据软件水印的嵌入技术[1]
,可分为静态水印和动态水印。静态水印存储在程序的数据区或代码中,水印的提取不需要软件运行;动态水印则保存在程序的执行状态中,嵌入到程序中的不是水印本身,而是一些代码,当程序运行时,这些代码可以表示水印,达到提取的目的。
为了防止静态软件被篡改,文献[2]提出了一
种校验码技术,要想达到攻击目的,必须同时修改
水印和对应的校验码,但攻击者一旦发现了水印和校验码的关系,就可以很容易将其去除,并且这种保护技术需要检查程序本身的可执行代码,对于Java 字节码这种中间语言则显得无能为力。文献[3]提出了一种更高级的静态水印防篡改技术,程序的部分代码被编码到水印载体当中,攻击
第5期张雪松,等:动态自我验证的软件水印防篡改技术
者如果企图去除或修改许可证信息,极可能会引起编码到水印载体中的那部分程序代码发生变化,导致程序不能正常执行。但这种防篡改技术不能抵御通过动态分析发现隐藏代码的攻击。对于动态水印,文献[1]提出了利用Java 的反射机制,在程序运行时检查表示水印的那些Class 的完整性,但由于这种机制在通常的Java 程序中很少采用,容易引起怀疑,不够隐秘。文献[4]提出在程序开始的部分再创建一个与动态图G 具有相同拓扑类型的另一个图G c ,用于迷惑攻击者,同时,还向程序中增加不透明谓词。这种方案对于水印的保护是基于水印图与常量图结构上的相似性,但候选程序与水印结构之间是一种/假0的依赖关系,对于熟练的攻击者,一旦发现G 与G c 之间不存在联系,仍然可以去除水印。文献[5,6]提出了一种称为常量编码的防篡改方案,将程序中涉及的常量置换为其值依赖于水印图的函数f (a 1,a 2,,,a n ),其中f 的部分参数为指向水印图的指针,另一部分参数可以为常数。这种防篡改技术对于静态分析、动态分析、解释分析等攻击具有较强的抵御能力,但由于程序中存在大量关于f 的调用,不能抵御模式匹配攻击。文献[7]论述了对于文献[8]的具体攻击方法。可见,如何更有效地保护水印不被篡改,仍然是有待深
入研究的重要课题。本文提出一种软件水印保护技术,利用程序中的部分整型常量和布尔常量,在水印和程序本身之间建立一种逻辑依赖关系,使得水印结构的完整性验证蕴含于程序的执行流程之中。当水印遭到篡改时,必然会导致程序执行流程发生变化,出现不可预知的行为,从而对软件水印起到有力的保护作用。
1 软件水印
一个软件水印系统通常由以下几部分组成:嵌入 embed (P ,w ,key )→P w
提取 extract (P w ,key )→w
识别 recg onize (P w ,key ,w )→[0.0,1.0]攻击 attack (P w )→P w
嵌入过程利用密钥key ,向一个程序P 中嵌入水印w ,从而将其转换为P w 。提取过程利用密钥key 来提取水印w 。对于非盲水印系统,提取过程由识别过程取代,判断特定水印存在于P 中的可能性。攻击过程试图破坏嵌入到P w 中的水印,使得提取或识别过程失败。
CT 算法[1]是一种具有代表性的动态水印算法,其核心思想是将水印信息嵌入到动态构造图(DGW )的拓扑结构中,基于Java 字节码的水印嵌入和检测过程如图1
所示。
图1 C T 算法水印嵌入和检测的总体过程Fig.1 Process of w aterm ark embedding and detection
①确定要嵌入的水印信息w ;②找到某个双射f ,使得w 与某个拓扑结构G 一一对应,G 可以是排列链表、基数n 编码链表、父指针树或PPCT
[9,10]
等中的某一种;③将拓扑图G 分拆成
几个子图G 1,G 2,,;④将每个子图G i 转换成Java 字节码C i ,该Java 字节码的功能就是构建子
图G i ;⑤根据特定输入序列i 1,i 2,,,i m ,在程序执行路径的适当位置嵌入C i ,至此,水印的嵌入过程完毕;⑥检测水印时,执行水印程序,在获得了正确的输入序列i 1,i 2,,,i m 后,程序会执行对应的水印构造代码C 1,C 2,,,C m ,水印拓扑图G m 就会在内存堆中产生。当最后一个i m 输入完
#
1149#