CN101504709A - 用于软件配置管理的脆弱软件水印方法 - Google Patents
用于软件配置管理的脆弱软件水印方法 Download PDFInfo
- Publication number
- CN101504709A CN101504709A CNA2009101311295A CN200910131129A CN101504709A CN 101504709 A CN101504709 A CN 101504709A CN A2009101311295 A CNA2009101311295 A CN A2009101311295A CN 200910131129 A CN200910131129 A CN 200910131129A CN 101504709 A CN101504709 A CN 101504709A
- Authority
- CN
- China
- Prior art keywords
- program
- information
- software
- watermark
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明提供一种新的用于软件配置管理的脆弱软件水印方法,其基本思想是充分利用软件水印的脆弱性识别软件的版本变更,以水印信息作为版本标识和检索的依据。该方法首先对程序代码进行分组;其次根据各组代码生成各组代码程序信息;然后把各组代码程序信息进行拼接得到整体程序信息;接下来把整体程序信息、作者信息和时间信息进行拼接获得最终的水印信息;最后以写文件的方式,将水印信息嵌入到第一组程序的第一个含有程序起始符的代码行和最后一组程序的最后一个含有程序结束符的代码行中,获得含水印信息的程序。本方案可以有效解决软件配置管理中传统的软件版本控制方法存在的缺点和问题,同时还可在软件防篡改、内容认证等技术中应用。
Description
技术领域
本发明属于计算机科学与技术领域,涉及软件工程学,编码理论,计算机算法学,密码学和计算机程序设计等技术,特别涉及软件水印技术和软件版本控制技术。
背景技术
软件水印作为一个新型研究领域,已经受到业界越来越广泛的关注,国内外学者对于软件水印的研究都越来越重视,相对于图像等媒体水印而言,软件水印更具有现实意义,更能为我国信息化建设带来巨大的经济效益。随着信息技术和因特网技术的飞速发展,软件产业正迎来巨大的发展机遇,同时也面临着诸多挑战。但是随之而来的副作用是通过网络传输的数字产品很容易被恶意的个人或团体在未经许可的情况下非法使用,因而网络世界中数字产品版权保护问题成为人们亟待解决的问题。特别是在软件工业领域,当今社会软件已经成为各行各业的基本生产工具,人们都希望能用上安全可靠而版权清楚的环保型软件。软件水印技术就是在这种情况下产生的。目前在软件版权保护方面,人们主要是通过加密的方式进行,比如:软件狗、Vbox、SoftSENTRY、SecuROM和SafeDISC等。最近几年出现的软件水印则是另一种全新的软件保护措施。所谓的软件水印就是把程序的版权信息、用户身份信息以及其他人们关注的信息嵌入到程序中,使得这些信息变成程序的一部分。换句话说,这些信息与程序合成一体。
近几年来,研究人员针对数字软件水印的研究已取得了一定的研究进展,提出了许多算法和解决方案,其中比较有代表性的包括:
(1)常量编码算法:该算法试图将程序中的数值或非数值的常量转换成函数调用并且在水印数据结构上建立函数值的依赖关系。该算法优点是思路直接,缺点是鲁棒性较差,可扩展性不强。
(2)基于硬件的水印算法:例如基于Asmuth-Bloom体系的软件水印。国外较著名的寄存器分配算法,该算法是由Qu和Potkonjak提出的,这种方法将一个水印嵌入到程序的干涉图中。该算法思路直接,鲁棒性较好,但是跟具体的硬件上下文环境关系较密切。
(3)基本块重排算法:该算法是Davidson和Myhrvold在1996年发表了第一个软件水印算法。此算法通过调整程序模块内程序指令顺序方法将水印嵌入到被执行的程序模块中,它可为被执行程序模块提供一种惟一辨别授权的签名。基本块重排水印算法简单准确、效率高,但是可靠性不高。
(4)Opaque谓词算法:Arboit利用数论中二次剩余定理构造opaque谓词序列。在程序中选择某些分支,将opaque谓词添加到分支条件后,每个opaque谓词中嵌入一部分水印信息。Opaque谓词算法可以很好地抵抗一些控制流程分析的水印检测软件的攻击;但如果通过变形攻击使谓词过于混乱,水印可能无法被提取。
(5)基于图的算法:Venkatesan、Vazirani和Sinha提出第一个基于图的软件水印算法,其核心思想是通过随机游走(random walk)的方法把水印代码的控制流图嵌入到原始程序的控制流图。Collberg和Thomborson等人提出一种动态图水印算法,该算法又称CT算法,国内也有个别学者按照这个算法进行研究。它的核心思想是将水印嵌入到一个在程序执行期间建立的图数据结构中,水印信息被隐藏在程序的执行状态,其检测必须在程序运行的状态下方可进行从而构成含水印程序的控制流图。此水印算法具有良好的隐秘性和健壮性;但该算法效率较低而且算法繁琐,软件工业界大规模使用非常困难,况且该算法很大程度上依赖程序本身的逻辑和存储情况。
(6)动态路径算法:该算法主要是基于观察结果,主要靠分析语义,而语义又是一个较复杂的话题。
(7)线程算法:该算法也是一种动态软件水印算法,Nagra等人基于在多线程程序中一个线程运行时任意性的本质提出了线程软件水印算法,将水印以比特流的形式隐藏在对多个线程的并发控制中。此算法能抵抗大多数语义保持变换攻击,但隐藏信息量小。
(8)扩频水印算法:该算法是借用通信领域扩频通信原理提出的算法,Stern等人提出一种扩频水印算法,该算法又称谱伸展水印算法,它的核心是将程序以向量的形式表现,并且以很小的任意数来修改向量的各个部分。Stern水印算法使得水印信息分布在程序代码的整体,用该算法加入的水印具有较好的健壮性,能够抵抗较多的攻击,但该方案属于私有软件水印,且不能抵御解释攻击,最麻烦的是实现起来很困难。
(9)基于指令统计分布算法:该算法是一种新的盲提取软件水印方案,水印信号分散在整个代码的指令统计分布上。在程序的指令集中随机抽取两个不相交的基数相等的子集,对特定子集的选取就是要嵌入的水印。改变程序使对应于某个子集的所有指令的出现次数都增加一个常数。检测时,分别计算相应两个子集指令出现次数的平均值,如果两个均值之差大于阈值,则认为包含水印。此类算法不利于工业应用的最大的问题是假设条件较多,往往实际中难满足,况且基于概率统计规律,往往在实际软件工业应用难以得到预期效果。
目前,软件水印在软件版权申明(Authorship)、软件版权证明(Authentication)、盗版源的跟踪、非法复用软件模块的发现、盗版自报告等领域的应用已有一些好的研究成果,但几乎没有学者研究软件水印在软件配置管理(SCM,Software Configuration Management)中,特别是软件版本控制(Software Version Control)技术中的应用(软件版本控制是软件配置管理中的一个关键技术)。
随着软件项目规模的日益增大,开发团队成员之间的协作日益加强,使得项目情况变得异常复杂,为了适应这些复杂而又关系项目成败的变化,软件配置管理已经成为目前业界软件开发核心技术和热点话题。所谓的软件配置管理有很多中定义方法,一种常用的定义方法是Wayne Baich在他的《SCM Coordinationfor Team Productivity》一文给出的,他给软件配置管理的定义是:“协调软件开发,使得混乱减到最小的技术叫做软件配置管理,它是一种标识、组织和控制修改的技术,目的是是错误数达到最小,从而有效的提高软件生产效率。”从定义可以看出软件配置管理首要的关键技术:标识修改。而这个技术是靠着软件版本控制完成的。
在软件开发过程中,变动和修改是不可避免的,这些变动常常在项目开发人员之间引起混乱和误会。如果修改之前不作分析,修改后不作记录、也不通知有关的人员、修改时亦不注意质量和正确性,混乱的程度必将更加严重,软件配置管理正是解决这些问题的一整套方案,它的目的是为了控制软件的修改,减少混乱,提高软件生产率。软件配置管理的好坏直接能反映了一个软件产品的可信度,软件配置管理是软件质量保证的重要一环。
目前流行的软件配置管理工具很多,比方StarTeam、PVCS、ClearCase、Visual SourceSafe(VSS)、Concurrent Version System(CVS)等几乎都是通过控制版本号完成的,即检查本地程序代码(或者文档)的版本号码是否与版本库最高点(最新版本)一致。显然,基于这种技术最大的缺点不是很智能,主要存在以下问题:
(1)不能自动的获知某人修改了程序(或文档的)某个部分;
(2)因为某些特殊原因,本地程序代码(或者文档)内容变化了,版本没有变化,不能得到正常的提交。例如,软件开发中常见的highjack,一些编程高手经常不是通过正常的按照配置管理要求去打开程序修改,习惯性的用记事本,写字板等一些跟配置库环境没有关系的工具打开程序进行修改。从而导致,程序已经发生改变,而程序的版本号没有变化,使得新程序得不到正常的提交;
(3)因为一些特殊原因,本地程序代码没有发生变化,而程序的版本号异常变化;
(4)当项目情况比较复杂的时候,这种技术正确地控制版本号,开销是很大的。
而脆弱软件水印的最大特性就是对于变化很敏感,当程序中任何地方发生改变都会使得原有软件水印失效,并且实现起来相对简单,开销较小。
本发明提供一种用于软件配置管理的脆弱软件水印方法,应用该方法可以弥补上述软件版本控制技术的缺陷。首先只需要检查水印变化与否便可知程序是否被修改过;其次是可以根据Hash函数的输出检索到需要的版本,同时通过软件水印信息又能标识出被修改部分、修改者的姓名和修改时间。
发明内容
已有的理论研究和实验研究都表明,软件水印的研究主要集中在提升水印的容量、鲁棒性、有效性等方面上,已有少量的脆弱软件水印研究,但都集中在作品认证和作品防篡改方面。在软件配置管理,特别是软件版本控制中的尚未得到应用。
结合软件版本控制的应用场合和脆弱性要求只要满足以下四个条件的脆弱软件水印就是一个理想的脆弱软件水印:
(1)水印信息可以以静态的形式存在于程序中;
(2)随着程序的修改,原有水印信息不再存在,并且新的水印信息可以被加入到程序中;
(3)同时将作者的信息和程序被修改的时间作为水印信息嵌入程序中;
(4)算法简单易实现,方便实际中使用,即收益投入比高。
本发明的主要目的是提供一种新的软件水印嵌入方法,其基本原理是充分利用水印的脆弱性识别软件的版本变更,以水印信息作为版本标识和检索的依据。该方法首先对程序代码进行分组;其次根据各组代码生成各组代码程序信息;然后把各组代码程序信息进行拼接得到整体程序信息;接下来把整体程序信息、作者信息和时间信息进行拼接获得最终的水印信息;最后以写文件的方式,将水印信息嵌入到第一组程序的第一个含有程序起始符的代码行和最后一组程序的最后一个含有程序结束符的代码行中,获得含水印信息的程序。
附图说明
图1为本方法的实现框图。
图2为本发明列举的不含水印的一个示例程序。
图3为本发明列举的含水印示例程序。
具体实施方式
下面结合附图详细说明本发明所提供的方法中涉及的各个细节问题。
如图1所示,本发明方法的具体实施步骤如下:
第一步:程序分组。将程序代码(含注释)以五百行(数目可以跟实际需要调整)为单位进行分组;
第二步:水印信息的生成。水印信息包括程序信息、作者信息和修改时间,其中作者信息为机器名或者机器物理地址,记为AUTHOR;时间信息为系统当前的时间,记为M_TIME;而程序信息可以采用两种方法生成:第一种,计算程序代码字符的ASCII码和;第二种(图1就是采用这种方式),计算程序代码字符(含注释行)的Unicode值的Hash值。其中第一种方法的具体实施策略为:除去分组中第一个含有程序起始符的代码行、最后一个含有程序结束符的代码行和注释行,将程序其余每行代码中,从第一个非空格的字符开始到该行最后一个非空格的字符的ASCII码求和,将每行的和连成一串,并记为A_SUM[i](字符串形式),i为程序分组序号。第二种方法的具体实施策略为:除去每组程序中第一个含有程序起始符的代码行(记为S行)、最后一个含有程序结束符的代码行(记为E行);将每组代码行字符的Unicode值依次作为Hash key输入到Hash函数中,将输出值(每组将会有唯一的输出)记作A_SUM[i](字符串形式),i为程序分组序号。
将各分组所得A_SUM[i]串起来(记为SWM),即SWM+=A_SUM[i]。获得程序信息、作者信息和修改时间后,将三者以字符串加的方式求和作为最终的水印信息,并记为F_SWM,即F_SWM=SWM+AUTHOR+M_TIME。
第三步:水印信息的嵌入。以写文件的方式,将F_SWM嵌入到第一组程序的第一个含有程序起始符的代码行(记为S行)和最后一组最后一个含有程序结束符的代码行(记为E行)中,获得含水印信息的程序。
以第一种方式生成程序信息时,本方法的实现过程如图2和图3所示,其中图3的第2行和第4行为水印信息。
提取水印时可以直接读取保存有水印信息的变量F_SWM中的内容。
Claims (3)
1.一种用于软件配置管理的脆弱软件水印方法,其特征是:
利用水印的脆弱性识别软件的版本变更,以水印信息作为版本标识和检索的依据。首先通过对程序代码进行分组,其次把各组代码生成的程序信息进行拼接获得整体程序信息,然后把包含整体程序信息、作者信息和时间信息拼接作为最终的水印信息,最后以写文件的方式,将水印信息嵌入到第一组程序的第一个含有程序起始符的代码行和最后一组程序的最后一个含有程序结束符的代码行中,获得含水印信息的程序。
2.根据权利要求1所述的方法,其特征在于生成和嵌入的水印信息具有如下特点:
水印信息包括程序信息、作者信息和修改时间,其中作者信息为机器名或者机器物理地址,记为AUTHOR;时间信息为系统当前的时间,记为M_TIME;而程序信息可以采用两种方法生成:第一种,计算程序代码字符的ASCII码和;第二种(图1就是采用这种方式),计算程序代码字符(含注释行)的Unicode值的Hash值。其中第一种方法的具体实施策略为:除去分组中第一个含有程序起始符的代码行、最后一个含有程序结束符的代码行和注释行,将程序其余每行代码中,从第一个非空格的字符开始到该行最后一个非空格的字符的ASCII码求和,将每行的和连成一串,并记为A_SUM[i](字符串形式),i为程序分组序号。第二种方法的具体实施策略为:除去每组程序中第一个含有程序起始符的代码行(记为S行)、最后一个含有程序结束符的代码行(记为E行);将每组代码行字符的Unicode值依次作为Hash key输入到Hash函数中,将输出值(每组将会有唯一的输出)记作A_SUM[i](字符串形式),i为程序分组序号。将各分组所得A_SUM[i]串起来(记为SWM),即SWM+=A_SUM[i]。获得程序信息、作者信息和修改时间后,将三者以字符串加的方式求和作为最终的水印信息,并记为F_SWM,即F_SWM=SWM+AUTHOR+M_TIME。
3.根据权利要求1所述的方法,其特征在于水印嵌入的步骤是:
(1)程序分组。将程序代码(含注释)以五百行(数目可以跟实际需要调整)为单位进行分组;
(2)水印信息的生成。把包含根据程序代码生成的程序信息、作者信息和时间信息的拼接起来,获得最终的水印信息。
(3)水印信息的嵌入。以写文件的方式,将F_SWM嵌入到第一组程序的第一个含有程序起始符的代码行(记为S行)和最后一组程序的最后一个含有程序结束符的代码行(记为E行)中,获得含水印信息的程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009101311295A CN101504709A (zh) | 2009-04-03 | 2009-04-03 | 用于软件配置管理的脆弱软件水印方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009101311295A CN101504709A (zh) | 2009-04-03 | 2009-04-03 | 用于软件配置管理的脆弱软件水印方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101504709A true CN101504709A (zh) | 2009-08-12 |
Family
ID=40976950
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009101311295A Pending CN101504709A (zh) | 2009-04-03 | 2009-04-03 | 用于软件配置管理的脆弱软件水印方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101504709A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103001944A (zh) * | 2012-09-27 | 2013-03-27 | 深圳市友讯达科技发展有限公司 | 微功率无线信息采集系统中的程序保护方法 |
CN104615919A (zh) * | 2015-02-10 | 2015-05-13 | 北京润科通用技术有限公司 | 一种文件源代码License控制方法及装置 |
CN105493091A (zh) * | 2013-08-26 | 2016-04-13 | 三星电子株式会社 | 电子设备和电子设备中的内容提供方法 |
CN106407820A (zh) * | 2016-08-31 | 2017-02-15 | 江苏中威科技软件系统有限公司 | 一种通过水印加密防止文件被篡改、泄露的方法及系统 |
CN106599631A (zh) * | 2016-12-14 | 2017-04-26 | 吉林大学 | 一种基于函数调用的软件水印信息处理方法 |
CN110334487A (zh) * | 2019-06-12 | 2019-10-15 | 中国舰船研究设计中心 | 一种基于数字水印的虚拟机镜像版权保护方法 |
CN112287357A (zh) * | 2020-11-11 | 2021-01-29 | 中国科学院信息工程研究所 | 一种针对嵌入式裸机系统的控制流验证方法与系统 |
CN112513841A (zh) * | 2018-08-08 | 2021-03-16 | 爱迪德技术有限公司 | 用于为软件加水印的系统和方法 |
-
2009
- 2009-04-03 CN CNA2009101311295A patent/CN101504709A/zh active Pending
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103001944A (zh) * | 2012-09-27 | 2013-03-27 | 深圳市友讯达科技发展有限公司 | 微功率无线信息采集系统中的程序保护方法 |
CN103001944B (zh) * | 2012-09-27 | 2016-04-13 | 深圳友讯达科技股份有限公司 | 微功率无线信息采集系统中的程序保护方法 |
US10162945B2 (en) | 2013-08-26 | 2018-12-25 | Samsung Electronics Co., Ltd. | Electronic device and content providing method in electronic device |
CN105493091A (zh) * | 2013-08-26 | 2016-04-13 | 三星电子株式会社 | 电子设备和电子设备中的内容提供方法 |
CN105493091B (zh) * | 2013-08-26 | 2018-11-23 | 三星电子株式会社 | 电子设备和电子设备中的内容提供方法 |
CN104615919B (zh) * | 2015-02-10 | 2017-09-29 | 北京润科通用技术有限公司 | 一种文件源代码License控制方法及装置 |
CN104615919A (zh) * | 2015-02-10 | 2015-05-13 | 北京润科通用技术有限公司 | 一种文件源代码License控制方法及装置 |
CN106407820A (zh) * | 2016-08-31 | 2017-02-15 | 江苏中威科技软件系统有限公司 | 一种通过水印加密防止文件被篡改、泄露的方法及系统 |
CN106407820B (zh) * | 2016-08-31 | 2019-12-10 | 江苏中威科技软件系统有限公司 | 一种通过水印加密防止文件被篡改、泄露的方法及系统 |
CN106599631A (zh) * | 2016-12-14 | 2017-04-26 | 吉林大学 | 一种基于函数调用的软件水印信息处理方法 |
CN112513841A (zh) * | 2018-08-08 | 2021-03-16 | 爱迪德技术有限公司 | 用于为软件加水印的系统和方法 |
CN110334487A (zh) * | 2019-06-12 | 2019-10-15 | 中国舰船研究设计中心 | 一种基于数字水印的虚拟机镜像版权保护方法 |
CN112287357A (zh) * | 2020-11-11 | 2021-01-29 | 中国科学院信息工程研究所 | 一种针对嵌入式裸机系统的控制流验证方法与系统 |
CN112287357B (zh) * | 2020-11-11 | 2022-08-12 | 中国科学院信息工程研究所 | 一种针对嵌入式裸机系统的控制流验证方法与系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101504709A (zh) | 用于软件配置管理的脆弱软件水印方法 | |
Yadav et al. | A novel approach of bulk data hiding using text steganography | |
CN101968769A (zh) | 一种基于行为模型的软件安全性测试用例生成方法 | |
CN109872267A (zh) | 一种鲁棒性的基于分组的数字水印方法 | |
Zhang et al. | A novel robust text watermarking for word document | |
Zhao et al. | DNN self-embedding watermarking: Towards tampering detection and parameter recovery for deep neural network | |
Huang et al. | Smart contract watermarking based on code obfuscation | |
Zhang et al. | ‘A robust and adaptive watermarking technique for relational database | |
Hu et al. | An image based algorithm for watermarking relational databases | |
Tiwari et al. | A novel watermarking scheme for secure relational databases | |
Sonnleitner | A robust watermarking approach for large databases | |
Khanduja et al. | A robust watermarking approach for non numeric relational database | |
Rui et al. | A multiple watermarking algorithm for texts mixed Chinese and English | |
Ali et al. | Watermarking for relational database by using threshold generator | |
CN103714271A (zh) | 一种Java软件水印植入虚方法的永假式构造方法 | |
CN103824006B (zh) | 一种手机应用软件自动生成水印的方法和系统 | |
Zhang et al. | A fragile watermarking scheme based on hash function for web pages | |
CN106815798A (zh) | 一种三维模型设计稿加数字水印和检测数字水印的方法 | |
Chen et al. | Research and application of digital watermark tracing technology in data security protection of power grid | |
El_Haggar et al. | Blind watermarking technique for relational database | |
Li et al. | The study on digital watermarking based on word document | |
Murugan et al. | A robust watermarking technique for copyright protection for relational databases | |
Li et al. | A study on the application of digital watermarking techniques on relational databases | |
Chen et al. | Word text watermarking for IP protection and tamper localization | |
Camara et al. | An effective approach for non-numeric relational database verification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20090812 |