背景技术
软件是按照一系列特定顺序组织起来的计算机数据和程序指令的集合。其中应用软件数量最为庞大,不同的应用软件根据用户和所服务的领域提供不同的功能,种类繁多,应用广泛,对人们的生活和工作都产生了深远的影响。不同的软件一般都有对应的软件授权,软件的用户必须在同意所使用软件的许可证的情况下才能够合法的使用软件。
令人遗憾的是,从目前的情况来看,很多软件并没有在取得软件制造商授权的情况下便被无限制地使用,使得软件制造商和相关企业蒙受了巨大的经济损失,加上国家相关部门没有相应健全的法律法规,致使盗版猖獗,国内整个软件工业的发展环境也因为软件盗版问题而迅速恶化。
软件产业代表着科技发展的最新方向,正逐渐成为信息产业的核心和灵魂,引领和推动全球范围科学技术的快速发展。但是,软件产业的保护却面临着困难,成为制约我国软件产业快速发展的一个重要因素。因此,探索符合时代发展潮流的保护模式已成当务之急。
长期以来,困扰我国(甚至全球)软件业界发展的最大障碍是版权问题。目前,软件的版权控制主要有以下几种较为常见的技术:
(1)序列号保护方式
序列号又称为注册码,随软件发布,软件必须经过注册才能正常使用。这种保护实现起来比较简单,目前互联网上大约80%的软件都采用这种方式。但早期的这种方式存在较大的缺陷:易破解,易盗版。
(2)Key File保护方式
Key File(注册文件)是一种利用文件来注册软件的保护方式。
在软件每次启动时检查某个确定文件的有效性,这个文件即Key File,需要用户向软件作者付费购买。
(3)磁盘保护
通过在软盘上格式化一些非标准磁道,在这些磁道上写入一些数据,如软件的解密密钥等,将软盘做成钥匙盘.然后软件运行的时候会去校验软盘中的数据是否正确,判断其是否为合法的钥匙盘,例如大家都很熟悉的杀毒软件KV300就是如此。
(4)软件狗保护技术
软件狗是一种智能型加密工具,也称为加密锁。它是一个安装在并行口、串行口等接口上的硬件电路,同时有一套适用于各种语言的接口软件和工具软件.其缺点是成本较高,且不利于网络发布。
(5)与硬件信息绑定的序列号保护技术
它将软件与机器硬件信息结合。用户得到共享软件后,安装时软件从用户的机器上取得该机器的一些硬件信息(如硬盘序列号、BIOS序列号等)。具有成本低廉、方便易用等优点。
此外,还有License保护、时间限制、菜单功能限制、CD Check、软件压缩等保护技术,这里就不再赘述。
人们通过开发板卡(如汉字库的汉卡)、软件狗等方法来维护软件开发者自身利益,却很难做到软件的升级换代,同时增加了用户的成本。为何盗版现象难以治理?对于传统意义上的产品密钥机制,大体上是沿袭了密码学的对称密钥加密机制,即一个产品对应着一个密钥。而一旦密码分析人员(或者具有密码攻击能力的人员)通过某种逆向工程的技巧掌握了该产品的密码加密算法时,该产品密钥就失去了作为密码保护软件版权的能力了。因此,如果想要突破传统意义上的产品密钥机制,就应该需要能够凌驾于对称密钥加密机制的产品密钥生成算法。而非对称密钥加密机制恰好能够解决这个问题,但是,非对称加密需要消耗比对称加密更多的时间成本和空间成本,不大适合实时地对数据(尤其是海量数据)进行处理,因而就有把非对称加密和对称加密结合的产品密钥加密机制,这种密钥加密机制已经在数字签名和身份验证等领域得到了实践的验证,已经证明能够为诸如网络通信等领域提供安全保障。
非对称公钥加密机制在实际社会生活中已经得到广泛地应用。因本方法须依赖基于公钥加密体制的通信平台,所以需要构建一个基于PKI(Public KeyInfrastructure,PKI,公钥基础设施)的信息平台来管理和维护软件使用方和软件厂商间的通信和其他协议所需数据。使用PKI其中一个重要的原因在于PKI技术能较好地满足软件使用方和软件厂商之间的安全通信需求,PKI就是通过自动管理密钥和证书,可以为用户建立起一个安全的网络运行环境,使用户可以在多种应用环境下方便的使用加密和数字签名技术,从而保证网上数据传输的机密性、完整性、有效性和不可否认性软件版权保护中的另外一个重要方面便是对于用户使用软件的控制。
盗版之所以猖獗一个重要原因是当单机软件被以某种逆向工程技巧破解后,因其用户使用情况之不可知,致使软件厂商无法知晓产品被盗版,当该软件被盗版非法传播到具有一定规模时,便导致厂商损失巨大。所以,若要控制盗版,便需要做到对用户使用软件情况有所了解并能做到一定程度的控制。这就要求软件厂商在生产软件产品时加入信息反馈与控制。
在控制论中,“控制”的定义是:为了“改善”某个或某些受控对象的功能或发展,需要获得并使用信息,以这种信息为基础而选出的、于该对象上的作用,就叫作控制。由此可见,控制的基础是信息,一切信息传递都是为了控制,进而任何控制又都有赖于信息反馈来实现。而信息反馈就是指由控制系统把信息输送出去,又把其作用结果返送回来,并对信息的再输出发生影响,起到制约的作用,以达到预定的目的。
随着计算机的普及和网络的迅速发展,电子软件的在线销售甚至在线使用已经越来越普及,并且将会持续得到迅猛发展,所以在实际的工程应用中,能够对用户信息有所了解并能起到一定控制作用的途径之一便可利用网络通信进行监控了。在用户使用软件过程中,对其实施实时监控,若用户发生违反软件厂商的使用条款便可利用网络对其进行控制。而当今计算机工业发展迅速,网络部署成本越来越低,加上各个大型IT企业倡导的云计算运动大幅促进网络科技发展,使得网络接入基本可以覆盖全体软件用户。所以在实际工程中利用网络对用户实施实时监控是可行的。
这种以实时监控为主要方式的在线方式(On-line Protection)的软件保护是以新兴的互联网技术为基础,以互联网服务器来替代传统的加密锁硬件。应用程序通过开发商发放的授权码与网络认证服务器建立连接,并调用服务器上的接口完成软件保护工作。因为这种客户端/服务器模式之前采用了高强度的类似SSL/TSL的通讯加密技术,而且服务器远离软件用户,因此它的软件保护强度可以非常高。除此之外,在线方式的软件保护不需要在客户端安装众多的模块,因此安装、部署、维护都非常简单。最重要的是,高性能的服务器可以提供除了软件保护之外的其它众多接口,如数据存储、远程通讯等,其应用范围已经大大超出了传统软件保护的范围。在线方式的客户端通过与服务器的实时连接,为开发商收集软件用户使用状态、统计软件使用情况、快速升级与服务提供了可能。
对于目前软件加密保护著作权的方式中,存在了许多思路误区。如很多软件注册机利用简单的显式或隐式条件判断软件使用者的合法性,然而在很多遭遇黑客破解的案例中,黑客或第三方破解者只需利用某些逆向工程技巧还原出基本的代码,理解了原作者的逻辑算法并且稍作修改编译即可到达破解目的,因而通过程序的条件判断来达到保护目的的方法很难达到保护软件并正确识别身份的效果。而那些把身份认证制作在数据中的算法却往往不易被破解(例如AES的S盒变换)。所以,若使得某个算法既要做到不容易被破解,又要做到变换的等价性,则该算法必须基于软件本身的数据和自行设计的协议。
发明内容
本发明的目的是提供一种基于非对称公钥密码体系的软件版权保护方法,该方法可以有效防止对软件的盗版。
为了到达上述的目的,本发明基于非对称公钥密码体系的软件版权保护方法包括软件的安装与部署和软件使用两个阶段,其中,软件的安装与部署包含如下步骤:
1.1)用户在部署软件时,安装程序自动收集客户端的硬件特征h0,随后向服务器发出安装请求,并将硬件特征h0发送到服务器端;
1.2)服务器端接收客户端的硬件特征h0,并检查相应的使用次数和拷贝数量的合法性;若请求不合法,则强制客户端退出安装;否则保密发送关键部分到客户端,并且等待客户端“部署完毕”的消息;
1.3)客户端解密来自服务器端的关键部分,并以此为密钥执行部署动作,并将“部署完毕”的消息通知服务器;
1.4)服务器端若接受到客户端“部署完毕”的通知,则产生随机序列s
0、时戳st
0,并与用户发来的硬件特征h
0执行异或操作
产生key
0,将结果key
0发送到客户端,并等待客户端“上锁完毕”的消息;
1.5)客户端接收来自服务器端的key0,并以此为密钥执行上锁动作,并将“上锁完毕”的消息通知服务器;
1.6)服务器端若接受到客户端“上锁完毕”的通知,将key0保存到数据库中;
软件使用包含如下步骤:设客户的当前使用次数i为0,客户购买的使用次数为无穷次;
2.1)客户在正常使用软件前,软件系统采集硬件信息hi+1,并将信息hi+1发送到指定的服务器端;
2.2)服务器端接收客户端发来的硬件信息hi+1,并检查使用次数和拷贝数量;若不合法则给客户端发送“已达到购买的使用次数”的提示信息,并通知客户端退出程序;否则发送key_i,并等待客户端的“正常使用”消息;
2.3)客户端若收到的消息是“已达到购买的使用次数”,则通知用户该软件已过期,系统将关闭所有功能,并提醒用户再次购买软件的使用版权,随后退出系统;若收到的消息是密钥key_i,则尝试解锁key_i,若解锁成功则转到步骤2.6),否则请求服务器发送上一次解锁密钥key_(i-1);
2.4)服务器端接收客户端发来的请求,并检查回滚次数,若不合法则通知客户重新安装,否则发送key_(i-1),并等待客户端的“正常使用”消息;
2.5)客户端尝试解锁key_(i-1),若解锁成功则转到步骤2.6),否则通知客户重新安装;
2.6)客户端在正常使用时,发送“正常使用”消息给服务器,并捎带上其硬件特征值;
2.7)服务器端产生随机序列s
i+1、时戳st
i+1;并与用户发来的硬件特征h
i+1执行异或操作
产生结果key_(i+1);
2.8)若客户端使用完毕,则请求服务器发送key_(i+1);
2.9)服务器端将key_(i+1)保密发送到客户端,并等待客户端“上锁成功”消息;
2.10)客户端接收服务器端发送的key_(i+1),执行上锁操作,若上锁成功,则通知服务器“上锁成功”消息;否则重试上锁;
2.11)服务器端若收到客户端发来的“上锁成功”消息,则将该客户的当前使用次数i递增1,否则等待;
2.12)转到步骤2.1)继续循环。
在步骤2.4)中,所述回滚次数为16次。
在步骤2.10)中,所述上锁的次数可设定。
本发明方法将客户端的用户信息、终端信息结合起来,并动态更新用户信息、终端信息,通过客户端与服务器端之间的通信验证对软件进行保护,所述通信需要被加密,其加密原理与算法来自基于非对称公钥密码体系,本发明方法能够在一定程度上解决在软件版权保护中难以同步控制、难以保证版权之安全性等问题,从而对软件进行有效地保护。
具体实施方式
如图1所示,本方法大致分为两个阶段。Phase I主要为软件在部署到客户机前的安装包状态变换,Phase II主要为软件在部署到客户机后的根据软件厂商制定的防护策略中所指定的关键文件的状态变换。其中文件1,文件2,…,文件n为安装包部署之后的n个文件。
第一阶段(Phase I):部署
在第一阶段中,软件厂商完成软件在逻辑功能上的制作,进入发布状态。而用户若要使用软件,则须通过使用平台了解该软件的情况(例如在未购买的情况下可使用的次数、可使用的时间和可使用的功能等)。一旦用户作出了相应的选择(或决定),则可通过使用平台通知服务器。在通知的过程中,使用平台会采集一些用户所使用的终端设备上的信息(例如物理MAC地址或磁盘设备号)和与用户有关的业务信息(例如用户名和密码等),并且将其打包成AUTHI格式(见表1)传输给服务器。
表1 AUTH I格式
USERNAME |
平台用户的用户名信息 |
PASSWORD |
平台用户的密码信息 |
EIGENMAC |
定义为HASH(MAC) |
因其MD5[3]和SHA1[4]的不安全性,故其中HASH采用SHA512算法。
服务器收到来自使用平台的AUTH I数据包之后进行拆包分析,获得已采集到的用户信息和终端信息,并且判断其有效性。有效性的指标主要为:用户账户是否有效(主要为身份限制和经济能力限制),用户所使用的终端是否有效(主要为拷贝数量限制),使用该软件的时间条件是否有效(主要为次数和时间限制)。若无效,则立刻返回有关的错误信息使得用户使用平台作出“停止继续使用”的动作。若在数据库中存在相应有效记录,同时又满足有效性指标条件,则开始对软件本身的处理。
图2:在Phase I阶段,软件厂商在完成软件制作之后,软件包的状态为原始状态(即软件完成大体制作之后的状态)。使用方利用使用平台进行初次通信时,使用平台会把使用方终端的有关信息通过AUTH I格式传输到服务器。
从图3来看,处理过程中起主要作用的是Process I过程。该过程可以用形式化表述,如式(1):
其中,FILE指代需要被处理的软件安装包;HASH的具体定义与表1相同;LEN则为取得作用对象(在此为FILE)的长度,其单位为字节,其结果为一个最大长32比特位(32-Bit)整数;
则为异或运算,即作用在伽罗瓦群上的无进位加法;“[]”运算则为从操作对象中取出一32位整型数据。
又因此协议基于非对称公钥密码体系,所以必定存在基于非对称公钥加密通信。故至少存在一对通信实体,在此定义其中的一个通信实体作为使用平台,工作在软件分发的终端用户方,而另一个实体即为服务器控制中心,工作在软件分销商或软件制造厂商等软件服务提供方。
如图4,User为使用方,在向服务器提出请求后,服务器解析并作回应。若请求有效,则向使用平台寄送服务器公钥PKc,使用平台在接受到公钥之后对所采集到的信息进行加密处理:对于已经打包成AUTH II(见表2)的信息数据data则用基于AES256算法生成的会话密钥SEK进行加密,形成SEK(D);对于会话密钥本身则用来自服务器的公钥PKc进行加密,形成PKc(SEK),并与已经加密的data一同送往服务器控制中心。
表2 AUTH II格式
LENGTH(USERNAME) |
USERNAME |
LENGTH(PASSWORD) |
PASSWORD |
EIGENMAC |
归纳起来,具体过程为:
(1)软件商完成软件产品后,在服务器端存放该软件产品的2个版本:Demo版和Release版。其中Release版由“初始密钥”和“安装程序”组成。
(2)有兴趣的用户下载Demo版,并在本机上安装,体验该软件。若有意购买该软件产品,则执行(3),否则退出。
(3)当用户购买软件后,下载软件Release版的安装程序。
(4)软件的安装与部署。
(4.1)客户端:用户在部署软件时,安装程序会自动收集客户端的硬件特征h0,随后向服务器发出安装请求,并将信息h0发送到服务器端。
(4.2)服务器端:接收客户端的硬件特征h0,并检查相应的使用次数和拷贝数量的合法性。若请求不合法,则强制客户端退出安装,否则保密发送关键部分到客户端。并且等待客户端“部署完毕”的消息。
(4.3)客户端:解密来自服务器端的关键部分,并以此为密钥执行部署动作。并将“部署完毕”的消息通知服务器。
(4.4)服务器:若接受到客户端“部署完毕”的通知,则产生随机序列s
0、时戳st
0;并与用户发来的硬件特征h
0执行异或操作
将结果发送到客户端。并等待客户端“上锁完毕”的消息。
(4.5)客户端:接收来自服务器端的key0,并以此为密钥执行上锁动作。并将“上锁完毕”的消息通知服务器。
(4.6)服务器:若接受到客户端“上锁完毕”的通知,将key0保存到数据库中。
第二阶段(Phase II):使用
在软件的使用阶段,保护单个文件已经无法起到版权保护作用,又因软件内在结构与外部文件(或者第三方库)建立依赖性,因此,必须保护多个关键文件。
在Phase II阶段中存在一个迭代变换Process II,用于侦测和实施用户使用的有效性,如图5所示。
设需要保护n个文件,这n个文件由软件制造方提供项目名单,若以下未说明,则本文默认“n个文件”为软件制造方提供的项目名单上的n个文件。
设L:=HASH后的长度,在此默认其大小为512Bits,即64bytes。
设EIGENFILES[i]:=HASH(FILES[i]),其中i∈N,0≤i<n
设SESSION_KEY[0]:=使用平台利用AES-256算法产生的密钥, 其中unix_time_stamp为服务器控制中心的当前时间的时间戳(一般为32位或64位整型),
设存在一个二维向量SUB_BYTES[i][j],其中i∈N,0≤i<n;0≤j<L。初始化时,SUB_BYTES[i]:=ROR(SESSION_KEY[2],8(i+1))。
令i∈N,0≤i<n,则有:
Kr+1=Kr_HASH(TIME)r+1_RANDVECr+1,
0≤i<16;0≤j<k,0<n≤k<m;0<r≤mtimes;
i,j,k,r∈N (2)
在Process II中FILES[i]为第i个文件,FILES[i][j]则为第i个文件的第j个字节。EIGENFILE[i][j]则表示第i个文件的特征向量中的第j个字节。LEN FILES[i]则表示该文件的大小,其单位为字节。
则相当于
在Process II变换完成后,将对于上文中提到的n个文件,在软件的部署阶段则会进行公式2替换。
若要还原其n个文件,只需再执行Process II中的操作,因其异或运算的对称性,其实质上将所在作用域中的元素从作用域移至该作用域的补集中,当再次进行其运算时,便可利用集合之Complementation Law原理还原作用域中的所有元素。
当用户在使用平台上进行完成一次Usage(以退出使用平台为标志)后,使用平台会生成新的SESSION_KEY[0]并且与SERVER进行通信,得到SESSION_KEY[1]并且对相应的“n个文件”进行处理。
第二阶段的具体步骤为:
假定,客户的当前使用次数i为0,客户购买的使用次数为Max(无数次)。
(1)客户端:客户在正常使用软件前,软件系统采集硬件信息hi+1,并将信息hi+1发送到指定的服务器端。
(2)服务器端:接收客户端发来的硬件信息hi+1,并检查使用次数和拷贝数量。若不合法则给客户发送提示信息“您已达到购买的使用次数”,并通知客户端退出程序;否则发送key_i,并等待客户端的“正常使用”消息。
(3)客户端:若收到的消息是“您已达到购买的使用次数”,则通知用户该软件已过期,系统将关闭所有功能,并提醒用户再次购买软件的使用版权,随后退出系统。若收到的消息是密钥key_i,则尝试解锁key_i。若解锁成功则转(6),否则请求服务器发送上一次解锁密钥key_(i-1)。
(4)服务器端:接收客户端发来的请求,并检查回滚次数(注:回滚次数超过16次,则视为不合法)。若不合法则通知客户重新安装,否则发送key_(i-1),并等待客户端的“正常使用”消息。
(5)客户端:尝试解锁key_(i-1)。若解锁成功则转(6),否则通知客户重新安装。
(6)客户端:客户端在正常使用时,发送“正常使用”消息给服务器,并捎带上其硬件特征值。
(7)服务器端:产生随机序列si+1、时戳sti+1;并与用户发来的硬件特征hi+1执行异或操作
(8)客户端:若客户使用完毕,则请求服务器发送key_(i+1)。
(9)服务器端:将key_(i+1)保密发送到客户端;并等待客户端“上锁成功”。
(10)客户端:接收服务器发送的key_(i+1),执行上锁操作。若上锁成功,则通知服务器“上锁成功”,否则重试上锁(注:设定上锁的上限次数)。
(11)服务器端:若收到客户端发来的“上锁成功”消息,则将该客户的当前使用次数i递增1,否则等待。
(12)转(1)继续下一轮。
上述实施例不以任何方式限制本发明,凡是采用等同替换或等效变换的方式获得的技术方案均落在本发明的保护范围内。