《软件水印技术综述》由会员分享,可在线阅读,更多相关《软件水印技术综述(9页珍藏版)》请在金锄头文库上搜索。
1、软件水印技术综述1 前言目前软件保护主要由软件开发商自己负责,通过加密、序列号、关键文件(Key File)、软件狗(硬件加密锁)等方式实施保护。软件开发商需要自己花费大量的精力用在软件保护上,而软件水印(Software Watermarking)技术正是为了解决软件知识产权证明而发展起来的。软件水印是嵌入到程序当中的秘密消息,这些消息应该能够方便而且可靠地提取出来,以证明软件的所有权,并且具有在保证程序功能的情况下不能或者是难以去除该消息的功能。根据软件水印的提取技术来分,可分为静态水印和动态水印(如图 1)。静态水印存储在可执行程序代码中,比较典型的是把水印信息放在安装模块部分,或者是指
2、令代码中,或者是调试信息的符号部分。对于Java 程序,水印信息也可以隐藏在类文件(包括常量池表、方法表、行号表)的任何部分中。静态水印又可以进一步分为静态数据水印和静态代码水印。区别于静态水印,动态水印则保存在程序的执行状态中,而不是程序源代码本身。这种水印可用于证明程序是否经过了迷乱变换处理。动态水印主要有3 类:执行状态水印、数据结构水印和Easter Egg 水印(复活节彩蛋水印)。其中,每种情况都需要有预先输入,然后根据输入,程序会运行到某种状态,这些状态就代表水印。软件水印动态水印静态水印Easter Egg水印数据结构水印数据水印代码水印执行状态水印 图 1软件水印是近年来才出现
3、的软件版权保护技术,它把程序的版权信息和用户身份信息嵌入到程序中,用来标志作者、发行者、所有者、合法使用者等,并携带版权信息和身份认证信息,可以鉴别出非法复制和盗用的软件产品。它甚至被认为是数字作品内容保护的最后一道防线。2 研究现状1969年IBM将计算机软件从硬件中分离出来进行单独销售,之后软件业的发展速度飞快,成为了信息产业的支柱之一,自20世纪90年代以来世界软件产业一直保持着10%20%的增长速度。但是由于计算机软件很容易复制,使得软件业成为世界上唯一的能够使每一个顾客成为其产品的制造厂的行业。2006年BSA(商业软件联盟)和IDC(互联网数据中心)的一项研究表明:2005年,全球
4、PC软件盗版造成的损失达340亿美元,比2004年增长了16亿美元。在软件市场巨大的国家,相对较低的软件盗版率仍会带来很大的损失。例如:美国的盗版率是全球最低的,为21%,但任然是损失最大的国家损失69亿美元。我国的盗版率为86%,比上一年减少了4个百分点,但仍损失了39亿美元,是全球第二大损失国。而BSA和IDC的另一项研究报告指出,在中国盗版率降低10个百分点将有助于IT产业的收益翻两番,从而实现IT产业的巨大潜力。同时,盗版的减少有助于创造新的工作岗位。由此可知,软件水印的重要性。从软件水印的用途来看,有以下一些应用:(1) 软件版权申明(Authorship):通过软件水印申明软件的版
5、权,软件中的水印信息可以被合法的用户(公开水印密钥)提取。软件用户可以通过该水印判断所使用的软件是否为正版软件。(2) 软件版权证明(Authentication):通过软件水印证明软件的版权,软件中的水印信息仅能被软件开发者(拥有水印密钥)提取,该水印信息可以证明软件的所有权。当两个公司都称软件是自己公司的软件时,软件版权证明水印可以证明软件的所有权,从而揭穿盗版者的谎言。(3) 盗版源的跟踪:在分发给不同使用者的软件中嵌入的水印信息各不相同(不同的信息是软件的指纹),当盗版行为发生时,可以根据软件的指纹寻找盗版软件是从哪个使用者流传出去的,从而定位盗版源。(4) 非法复用软件模块的发现:如
6、果整个软件被盗用,常常是容易发现的;但当仅有某个模块被非法复用时,常常是难以发现的,软件水印可以用于发现与检测这种情况下的盗版行为。(5) 盗版自报告:Easter Egg 软件水印利用了软件可运行的特点,把水印检测器嵌入到软件当中,当检测器运行时,可以通过检查软件的生存环境(例如主机IP等),判断该软件的生存环境是否构成盗版行为,进而在可能的情况下,通过网络主动报告盗版行为。(6) 盗版自发现:随着计算机网络的迅速发展,通过网络分发软件成为软件分发的一种重要手段。这就给软件盗版的自发现提供了可能,利用网络爬虫技术搜索网上的软件,并检测这些软件当中的水印信息,从而自发地发现盗版行为。软件水印的
7、算法有很多,在这里简单介绍一下基于HASH函数的软件水印算法。HASH函数是密码体制中常用的一类公开函数,是能够将任意长度的信息映射成某一固定长度消息的一种函数。HASH函数主要用于信息安全中消息的完整性检测和消息认证。12864目前应用最广泛的HASH函数算法为MD5和SHA。其中MD5是获得一个随机长度的信息后产生一个128位的信息摘要,以防止被篡改。安全杂凑算法SHA-1的输入为小于2 比特长的任意消息,分为512比特长的分组,输出为160比特长的信息摘要。在选择HASH函数算法时,尽可能选择安全性高的SHA-512算法(最终信息摘要大小为512比特)。SHA-512算法对任意长度不超过
8、2 的输入消息X,按照1024比特的长度进行分块处理后,输出大小为512比特的信息摘要。128(1) 数据分拆和填充在SHA-512中,对于不超过2 的任意长度的消息m进行数据分拆和填充后得到的字表示为: M=M0M1MN-1其中每个Mi(i0,N-1)均是长为64比特的字,且N是16的倍数。由m产生M的算法流程如图 2所示。计算k=895-(|m|mod1024)(当k0时,按模512处理)128设l为|m|mod2 的二元表示,|l|=128K计算M=m10 l,表示串联K 图 2 M的构造流程在图 2所示中的构造式M=m10 l 中,首先是在m的右边填充一个1,然后串联大量的0,整个消息
9、的长度模1024为896,最后再串联长度为128的 l,这样产生的M的长度就是1024的倍数,所以就可以将M分拆为64比特字,字的个数N是16的倍数。(2) 逻辑函数由简单逻辑操作构成的压缩函数为:Ch(X,Y,Z)=(XY)( XZ)Maj(X,Y,Z)=(XY) (XZ) (YZ)0 512 = ROTR1(X)ROTR8(X) SHR7(X)1512 = ROTR19(X)ROTR61(X) SHR6(X)0512 = ROTR28(X)ROTR34(X) ROTR39(X)1512 = ROTR14(X)ROTR18(X) ROTR41(X)(3) SHA-512算法的逻辑程序:SHA
10、-512的缓冲区可表示为8个64比特的移位寄存器H0(1),H1(1),H2(1),H3(1) ,H4(1) ,H5(1), H6(1) ,H7(1)的八元初始向量(十六进制表示): H0(1)=6A09E667F3BCC908 H1(1)=BB67AE8584CAA73B H2(1)=3C6EF372FE94F82B H3(1)=A54FF53A5F1B36F1 H4(1)=510E527FADE682D1 H5(1)=9B05688C2B3E6C1F H6(1)=1F83D9ABF41BD6B H7(1)=5BE0CD19137E2179M(1),M(2),M(N)N个消息块按照下列步骤进
11、行处理:For i=1 to N: Mt(i) 0t15Wt = 1 512(Wt-2)+Wt-1+ 0 512(Wt-15)+Wt-16 16t79初始化8个向量A,B,C,D,E,F,G,H:A= H0(i) B= H1(i) C= H2(i) D= H3(i)E= H4(i) F= H5(i) G= H6(i) H= H7(i) For t = 0 to 79 T1=H+ 1 512(E)+Ch(E,F,G)+K t 512+Wt T2= 0 512(A)+Maj(A,B,C) H=G G=FF=EE=D+T1D=CC=BB=AA= T1+ T2 计算第i个HASH值H(i) H0(i)
12、=A+ H0(i-1) H1(i)=B+ H1(i-1)H2(i) =C+H2(i-1) H3(i) =D+H3(i-1)H4(i) =E+H4(i-1) H5(i) =F+H5(i-1)H6(i) =G+H6(i-1) H7(i) =H+H7(i-1)完成以上步骤后,512比特的摘要信息M为:H0(N) H1(N) H2(N) H3(N) H4(N) H5(N) H6(N) H7(N) 基于HASH函数的SHA-512的软件水印算法时一种动态的软件水印算法。通过构造合适的HASH函数,将水印嵌入到程序中。只有满足给定的条件,HASH函数才能计算出对应的水印信息。与其它的水印算法比较起来,基于
13、HASH函数的软件水印并不是隐藏在程序代码中,也不在运行状态中,而是计算出来的,这种方式的水印能够承受各种变形攻击。因为水印隐藏在函数中而不是在数据结构中,因而系统更强悍。首先,函数很难被发现端倪,即使发现了,一旦使用分析工具或者篡改手段加以修改,程序的正常性能将会受到严重的影响。基于HASH函数SHA-512软件水印算法的结构如图 3所示。水印信息W=P*Q(P、Q表示两个较大的质数)水印分割中国剩余定理分割W=w1,w2,wn wiwj,1i,jn查找程序中的整型常量,标注位置构造整型常量序列C=C1,C2,Cm m2nHASH函数构造编码生成随机序列X=x1,x2,xm xixj,1i,jm构造HASH函数表达式int H(int x,int begin ,int r1 ,int r2)水印嵌入用HASH函数取代上述被标注的整型常量核对所有包含四个整型参数的函数调用,设最后一个参数为0,记录返回值水印提取 图 3 软件水印算法的结构图中的中国剩余定理:设n1,n2,nt为两两互素的正整数,令n=n1,n2,nt,则同余方程组 X=a1 mod n1 X=a2 mod n2 X=at mod nt 有唯一解:x