APP下载

静态水印与动态水印的性能比较

2016-08-18谢文

电脑知识与技术 2016年19期

谢文

摘要:随着计算机技术的不断进步,软件在现实世界中的应用日益重要。开发软件的时间和精力也在增加。软件许可协议是需要从用户的角度来保护软件的开发人员的知识产权。然而,软件盗窃和许可侵权案件每年都在增加。在本文中我们介绍了几种用于确定软件版权信息的软件水印方法。我们在几个评价指标下比较了它们的特点和性能。在一些软件盗版的案例中软件水印被认为是保护和检测的有效方法。

关键词:软件版权保护;软件许可证;软件水印

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)19-0232-04

1 概述

随着网络的高速发展以及各种软件的广泛应用,在现实环境中电脑系统的使用是必要的。此外,软件在计算环境中的作用变得更加重要,在这些环境中,它需要更多的时间和精力开发新的软件。为了保护这些软件作为其开发者的知识产权,软件许可协议软件的用户需要遵守软件许可协议。软件许可证是为了保护软件的版权。然而,侵犯软件许可证的案件每年都在增加。同时,因此而造成的经济损失也逐年增加。

在本文中,我们介绍几种软件水印方法去识别软件版权信息并根据绩效标准来比较这些软件水印的性能。本论文的主要工作如下:在第2节中,分别介绍了软件水印中静态水印和动态水印的概念。在3节中,我们解释了软件水印的性能评估指标。在4节中,我们比较了静态和动态软件水印方法的性能,并在第5节中得出结论。

2 软件水印

2.1 软件水印的概念

最近,出现了几种保护软件版权的技术,一般情况下,水印技术所用来嵌入的版权信息是以数字媒体形式表示的二进制数据。这种方法经常用于多媒体产品,例如图像,音频和视频。该方法将版权信息嵌入到多媒体产品中,并在需要信息时识别插入的信息。如果这些产品的版权信息是不确定的,插入的版权可以是一个证据,通过识别先前插入的信息来验证产品的所有权。

软件水印是一种将这种技术应用于软件领域的一种方法。插入的版权信息可以是软件所有权的证据。软件水印由以下两个功能实现:

图1显示了应用软件水印来识别软件版权信息的过程。在原始程序P发布之前,水印W通过embed()函数及密钥K嵌入到程序中。这样水印嵌入完成并发布到用户手中。然后,如果是可疑的软件用于未经许可的其他软件,可疑软件可以通过使用recognize()函数及密钥K来识别先前嵌入的水印。

2.2 静态软件水印

静态软件水印是一种通过软件分析来识别嵌入到程序中的水印的无定向的方法。这种方法不需要通过执行程序来识别水印。因此,它比动态的方法更方便,因为软件的执行需要额外的资源去应对各种各样的对执行环境所造成的影响。

2.2.1数据水印

数据水印是将水印嵌入到软件中的最简单的方法。这种方法将包含数据水印的信息插入软件中指定的位置。例如,可以在软件代码中插入版权信息如下:

字符串水印=“版权?2014.水印信息.”;插入的版权信息可以被用来识别软件的所有权。这种简单的嵌入与识别水印的方法可以非常容易的应用到软件中。然而,由于嵌入的水印信息很容易暴露,所以它很容易被开发者或用户发现并删除。

2.2.2 代码水印

代码水印是通过在程序中添加额外的代码信息的方式来嵌入水印信息。依据程序结构分析的方法,这种方式可以以各种形式被应用。作为这些方法的一个应用程序,可以通过采用分支指令来表示程序的版权信息,使用分支指令的基本块的顺序来表示。

Davidson 等人提出了一种通过重新定位基本块的顺序嵌入水印的方法。插入的水印信息是按照字典顺序重新排序的基本块。水印信息可以通过对重新排序的基本块的解释来加以识别。基本块的顺序仍保持在它的原始顺序,之前嵌入的水印可以被识别。这种类型的水印不是暴露在外部的程序。因此,这种方法比前面描述的数据水印的隐蔽性要好。然而,这种插入水印信息的方法需要额外的添加程序代码。它还需要分析在一个程序中的基本块的顺序以识别嵌入式水印。

2.3 动态软件水印

与静态软件水印不同,动态软件水印是一种通过对软件运行的中间状态进行分析来实现水印嵌入与提取的方法。这种方法需要对程序的建模行为以及嵌入水印的位置进行额外的分析。所以该方法将水印嵌入到程序的执行状态中。然后,它可以通过解释程序执行时的状态或行为识别水印。

2.3.1 复活节彩蛋水印

复活节彩蛋水印是通过在软件中输入特定输入的方式来隐藏水印信息。例如,特别是在游戏软件中,当有密钥需要输入时,彩蛋水印被作为隐藏的信息包含其中。复活节彩蛋水印的方法是插入代码来表达软件水印的版权信息,输入时调用预定义的特定的输入。水印信息可能包含版权信息或特定的形象表示软件的所有权。因此,识别软件中嵌入的复活节蛋水印可以证明该软件的所有权。

在这种方法中,如果不输入之前定义的特定输入,嵌入的水印不会出现。因此,在程序执行过程中可能是很难找到嵌入式水印的。然而,水印本身是公开暴露在它的程序代码中的。因此,通过分析程序代码可以很容易地找到水印。

2.3.2 数据结构水印

数据结构水印是一种将程序执行过程中构造的数据结构水印信息嵌入到运行状态中的一种方法。这种方法当程序遇到一个指定的运行时状态或输入时,通过先前设计的数据结构表示版权信息。例如,这种方法可以在程序执行过程中连续地单击屏幕的特定区域,将包含版权信息的变量或链接列表链接起来。这样的数据结构可以编码水印信息来表示软件版权信息。因此,如果成功地解释了所生成的数据结构,则可以证明该软件的所有权。

数据结构水印是非常隐蔽的且有弹性的,因为在所定义的输入序列或数据结构的定义不暴露的情况下该水印是不能被用户发现。然而,这种方法需要额外的结构来生成数据结构水印的嵌入程序代码。它还需要额外的分析,以解释所产生的数据结构来确定该软件的所有权。

3 软件水印的性能标准

为了将软件水印技术应用到应用软件中,在水印的嵌入与识别上应该有好的实用性能表现。有几种用来衡量软件水印性能的评价标准。在本文中,我们应用迈尔斯等人提出的评价标准对前一章节中提到的几种软件水印的性能进行比较。在本节中,我们描述了6项评估软件水印性能的标准。

3.1 可靠性

在软件版权信息必须得到确认的情况下,软件水印信息的识别应该很容易做到。此外,识别水印应该足够可靠的确认版权信息没有假阳性,一避免降低水印的可靠性。因此水印识别应成为确认软件版权信息的有力证据。

3.2 数据率

为了在将来识别软件的版权信息,软件水印的嵌入应该在软件发布之前完成。水印的嵌入需要在软件中开辟额外的空间。如果所需的额外空间相比于最初的软件的大小过大,会导致嵌入的水印很容易被发现并攻击。因此,嵌入水印所需的额外空间的比例相比于原来的程序应该要足够的低,以保证软件水印的隐蔽性

3.3 隐蔽性

嵌入的水印应该能够被软件的所有者识别以验证软件的版权信息。但是,如果在程序执行或修改过程中容易被其他用户或开发人员披露或删除水印,则该方法不能被应用到软件中。因此,水印不应该是明显的相对于其他用户具有高隐身。

3.4 水印分散性

为了保证软件水印在软件真实环境下的应用,嵌入的水印需要在用户随意修改后仍能保存其版权信息。为了满足这一特性,把水印分散的嵌入在整个程序中,相比于将其嵌入到程序中特定的局部区域效果要更好。

3.5 开销

若嵌入和识别软件水印所花费时间和精力太高,则水印方法不能用于实际应用。此外,如果插入软件水印后降低了软件的执行性能,这种水印在实际应用中也是不能使用的。因此,在水印的嵌入与识别的同时,还要保证其效率。此外,在软件中嵌入水印后不能影响软件的执行能力。

3.6 弹性

当软件已被用户使用或是新开发的软件,通过优化或混淆等多种方式可以对其进行改变或破坏。在这样的环境下,嵌入的水印应仍然保存有完整的版权信息。因此,水印的弹性是软件水印所必不可少的,在实际使用中当软件被攻击者或用户通过各种方式加以破坏或修改时,它可以用于保护软件的版权信息。

4 软件水印的性能比较

在这一节中,我们根据每个方法的性能特点按照在前一节中提出的评价标准对软件水印的性能进行比较。单个水印的性能可能会因为水印的执行环境或实施方法发生改变。因此,我们尝试将软件水印的性能与软件水印的一般特性进行比较。表1是按照软件水印的6种评估标准对软件水印的性能进行比较后的结果。

4.1 静态水印比较

4.1.1 可靠性

在数据水印中,水印被直接嵌入到软件本身的代码中,而不需要隐藏水印的存在。因此,它是软件版权的一个明显的证据。然而,因为嵌入的水印是被公开的,所以通过代码分析软件很容易识别。在代码水印中,水印被嵌入到程序代码中。当一个嵌入了水印的程序被用户使用并改变后,可能会使得嵌入的水印信息也被修改。在这种情况下,代码水印可能无法成功识别。

4.1.2 数据率

在数据水印中嵌入的水印是非常小的,因为在那里几乎对除其本身的水印数据外没有额外空间。然而,在代码水印中,它需要修改程序的代码,并插入额外的代码来嵌入水印。

4.1.3 隐蔽性

在数据水印,嵌入的水印可以很容易地通过分析程序代码被发现,因为嵌入的信息以其源码形式公开。然而,在代码水印中,嵌入的水印被隐藏为软件代码内的一部分,因此它需要分析该程序代码来发现存在的水印。因此,代码水印比数据水印更加隐蔽。

4.1.4 水印的分散性

在数据水印中,由于水印是被嵌入到特定的局部区域中的,所以很难做到将水印信息分布到软件的整个区域中来保护软件版权。然而,在代码水印中,水印信息会通过修改源代码的方式将其嵌入到软件中,并且将其分布于软件的多个区域中。

4.1.5 开销

在数据水印中,在程序中嵌入和识别水印很难影响软件的执行能力,因为数据水印的嵌入不需要执行附加的软件操作。在代码水印中,它需要执行附加操作以嵌入或识别水印。而且,水印的嵌入可能会影响软件的执行性能。所以,代码水印的嵌入与识别只需要很少的开销。

4.1.6 弹性

在数据水印中,用户的修改或混淆可能会直接对水印产生影响,因为水印是直接暴露在外的,并未加以隐藏。在代码水印中,水印被编码成隐藏的软件区域,并未直接暴露给用户或开发者。因此,代码水印的弹性比数据水印要好。

4.2 动态水印比较

4.2.1 可靠性

复活节彩蛋水印和数据结构水印都是将水印嵌入到水印的执行状态中,而且在嵌入时还需要输入一个特殊的预定义密钥。因此,识别嵌入的水印是软件著作权的有力证据,不会产生误报。

4.2.2 数据率

动态软件水印的应用需在当控制流达到预定义的程序状态时,嵌入额外的代码来描述软件运行时的执行行为和执行水印。特别是数据结构水印需要额外的复杂代码来生成特定的数据结构,用于表示水印信息。因此,数据结构水印的嵌入与识别需要额外的附加空间。

4.2.3 隐蔽性

动态水印比静态水印要更加隐蔽,因为动态水印是将水印嵌入到程序的执行状态中。在复活节彩蛋水印中,嵌入的水印通过代码分析可以很容易地被发现,因为水印公开暴露在程序代码中。然而,数据结构水印很难被发现的,因为只有当程序在执行期间达到一个特定的运行状态时水印才会生成。

4.2.4 水印的分散性

在复活节彩蛋水印中,水印通常嵌入到程序代码的特定区域,并没有将水印分散到程序的这个区域中。因此,水印被作为一个隐藏的代码嵌入,这时只有一个预定义的特定输入被输入。另一方面,在数据结构水印中,水印被嵌入在动态生成的数据结构中。因此,用于产生水印的代码可以被分配到软件多个部分来提高水印的分散性。

4.2.5 开销

在数据结构水印中,设计数据结构和实现代码生成代表水印的数据结构需要花费大量时间和精力。它还需要额外的运行时的开销,用于执行软件生成附加的嵌入式数据结构。然而,在复活节彩蛋水印中,水印可以很容易的被嵌入,只需要输入之前自定义的密钥。所以,它不会影响用于生成水印的执行时间。

4.2.6 弹性

在数据结构水印中,当且仅当程序的控制流达到程序的特定运行状态时,水印被作为一种数据结构的形式嵌入。因为水印没有公开给用户或开发人员,如果程序的控制流没有达到特定的状态,水印很难被发现。所以,水印在面对程序的修改或混淆时需要具有弹性,在复活节彩蛋水印中,水印对用户是公开的,它可以很容易的通过代码分析被发现。所以,水印可以直接被用户的修改所影响。

5 结论

软件版权保护的研究也越来越多。在这篇文章中,我们介绍了软件水印方法的概念,它可以通过在软件发布之前嵌入水印的方式来确保软件的版权。我们还提出了一些静态软件水印和动态软件水印方法,不同的软件水印在软件代码或软件执行时拥有不同的特性。

在本文中,我们介绍了软件水印的性能评价指标。然后,我们对每种软件水印的特性做了比较。一般来说,静态软件水印要比动态软件水印更容易使用,这是因为静态软件水印不需要程序执行,它是直接将水印信息嵌入到软件代码中。所以,水印很容易通过代码分析被发现并删除。然而,动态软件水印是很难被用户或开发人员发现的,因为水印是包含在运行程序的执行状态中。因此,它需要嵌入额外的代码来生成运行时水印。此外,动态水印的方法还需要额外的开销用于保存嵌入的水印。为了让软件水印能够真正应用到软件中,根据个人执行环境以及软件的特性对软件水印的优化就显得尤为重要。在未来,预计软件水印的方法将被应用在各种环境下的软件保护和检测软件版权的侵权案件中。

参考文献:

[1] 张立和,杨义先,钮心忻,等.软件水印综述[J].软件学报,2003,14(2):268-277.

[2] AKITO M,HAJIMUI,KEN-ICHI M,et al.Apractical method for waterm arking Java programs. Proceedings of the24th Computer Software and Applications Conference,2000.

[3] SHIRALI-SHAHREZA M,SHIRALI-SHAHREZA S.Software wa-termarking by equation reordering. ICTTA08: Proceedings of the3rd IEEE International Conference on Information&Communication Technologies:from Theory to Applications,2008.

[4] 蒋华,沙宗鲁,轩爱成.基于表达式逆序数的软件水印算法,2009,9(6):3189-3190.

[5] 周亮.软件水印算法评估研究[D].吉林:吉林大学,2010.

[6] 崔孝晨.软件加密与解密[M].人民邮电出版社,2012,378-488.

[7] Christian S C, Ginger M,Andrew H Sandmark-A Tool for software Protection Research[J].IEEE Security & Privacy.2003,1(4):40-49.

[8] 汤战勇,房鼎益,苏琳.一种基于代码加密的防篡改软件水印方案.中国科学技术大学学报,2011,41(7):599-606.