随着软件行业经营模式的转变,在网络上发布的共享软件逐渐增多,软件开发商为了保护自己的知识产权权益,需要对软件产品进行加密处理,以防止未经许可的随意拷贝,这就形成了各种各样的共享软件加密技术。

一、共享软件的定义

共享软件一般是指那种在网络上公开发布的,采用¨先试用,后购买”方式销售的具有版权的软件,此类软件一般有两个或两个以上的版本,网络上公开发布的是一个功能受限或者用户数量受限制或使用时间、次数受限的共享版本,用户只能试用软件部分功能或者只能试用一定次数或一段时间,只有当用户购买注册之后才可以使用没有限制的正式版本。

二、常用的共享软件保护方法

共享软件保护方式主要有两大类,一类是依赖于特定硬件的硬加密保护技术,如加密狗、钥匙盘等;另一类是不需要额外硬件的软件加密保护技术,如密码表、许可证加密法等,序列号法一般采用绑定计算机硬件的方式,但它绑定的是计算机本身如CPU、BIOS、硬盘、MAC等的硬件信息,没有增加额外的硬件设备,因此将其归结为“软加密”技术。

1、硬加密技术

(1)加密卡狗加密法

加密狗加密法是插在计算机并口、串口等接口上的软硬件结合的软件加密产品。当被加密狗保护的软件要运行时,软件向插在计算机接口上的加密狗发出查询命令,加密狗根据命令迅速计算查询并给出响应,如果响应正确,则保证软件继续运行,否则,软件将不能运行。目前,大型商业软件一般都采用加密狗来保护,但共享软件采用
此种方法的较少,因为该加密保护方法成本较高。

(2)钥匙盘加密法

其原理是利用BIOS的INT 13中断格式化软盘成一些特殊的磁道,有的还在软盘的这些特殊磁道上写入一定信息,即在软盘的特殊位置做标记,在软件运行时需要读取这些特殊标记,以检验软件的合法性,因此使用软件时必须将钥匙盘插在软驱中。这是最古老的加密方法,目前基本上不在采用了。

(3) CD-Key光盘保护技术

此加密技术的原理是被保护的软件在启动时判断光驱中的光盘上是否存在某特定文件,如果存在则说明软件是合法的,继续运行,否则则认为是非法的,拒绝运行。但当软件一旦运行后一般不再检查加密光盘文件的存在与否。Windows操作系统下此加密方法的实现通常是:先用GetLogicaIDriveStrings()或GetLogicaIDrives()得到计算机的驱动器列表,然后再用GetDriveType()检查每一个驱动器看是不是光驱,若是光驱则用CreateFileA()或FindFirstFileA()等检查特定的文件是否存在,并可能进一步检查文件的属性、大小、内容等,这由加密者根据自己的需要设定。由于本加密技术需要制作加密光盘,这对一些规模小的软件开发商来说具有一定的困难,因此这种加密技术目前在共享软件上用的也较少。

2、软加密技术

(1)序列号加密技术

目前大多数共享软件采用这种加密方式。用户一旦试用期满仍想使用这个软件,就必须到软件公司进行交费注册,软件公司根据用户提交的相关信息利用密码加密算法生成一个序列号,这个序列号往往是根据用户提交的姓名、计算机某一硬件如CPU、网卡、硬盘、显卡等的序列号生成的,用户将软件公司给的序列号在软件运行时输入进去,软件利用自己的算法程序验证序列号是否正确,若正确说明你是合法用户,就可以正常使用了。

此方法的优点就是方案实现简单、方便,交易过程在Intemet上实现。缺点就是软件的解密是在用户计算机上完成的,一些黑客利用用户信息与软件序列号之间的验证
漏洞找出用户信息与软件序列号之间的换算算法,编制出一种叫KeyMaker的破解程序,只要输入所需的用户信息,破解程序就能帮助你计算出序列号,你再用你的名字和这个序列号输入进软件中就变成正版软件了。

(2)密码表加密技术

其原理是在软件启动时要求用户根据屏幕出现的提示问题输入特定的答案,而这个答案一般是在用户手册上的防复印的密码表中,只有用户输入正确答案后才能继续运行。这种加密技术实现简单,而且成本较低,但软件破译者往往把整个密码表保存成一个计算机文件,同破解后的盗版软件一同公布,因此目前国内共享软件使用此方法较少。

(3)Key File加密保护技术

这是一种利用注册文件来保护共享软件的加密方式。Key File通常是一个小文件,文件格式自由,可以是纯文本文件,也可以是二进制文件,其内容是一些加密过或未加密的数据,一般有用户名、注册码等信息。采用此种加密技术的共享软件试用版一般没有注册文件,当用户希望使用正式版时需要交费注册,交费注册后收到此共享软件的注册文件,用户只需要将注册文件存放到指定的目录即可使试用版成为正式版。当共享软件每次启动时,从注册文件中读取数据,然后利用加解密算法进行注册文件验证处理,如果正确则以注册版模式运行。目前这种加密技术在共享软件中应用也不多。

(4)许可证加密技术

从某种角度来说,许可证加密技术可以看作是序列号加密技术的一个变种。这种共享软件不能直接使用,在安装或运行时会对用户的计算机进行系统检测,并依据检测结果生成一个用户计算机的特定指纹数据,它可以是一个纯文本文件,也可以是一串十六进制数,用户把指纹数据通过Email、Internet等方式传送给软件开发商,开发商根据用户指纹数据生成一个注册码或注册文件并发送给用户,用户完成注册后即可正常使用。

该加密技术的缺点是软件的使用受限,通常只能用在注册指纹数据的那台计算机上,更换计算机或者用户更换了某些硬件设备都可能造成注册码或者注册文件失效,还
需要重新更新指纹数据从而获取新的注册码或注册文件,这对开发商来说无疑增大了服务与管理的工作量。

(5)数字签名(Digital Signature)加密技术

数字签名又名电子签章、公钥数字签名,该技术是公开密钥算法(即非对称加密算法)的典型应用,是在数据单元上附加一些数据,也可是对数据单元所作的密码变换,类似于写在书信上的亲笔签名,只不过是使用公钥加密数字技术来实现鉴别数字信息真伪的方法。

基于公钥密码体制的数字签名技术目前主要分普通数字签名、特殊数字签名两类。其中普通数字签名加密技术采用的算法主要有RSA、Fiat-Shamir.EIGamal、Schnorr、
Guillou-Quisquarter、Ong-Schnorr-Shamir数字签名算法、Des/DSA、椭圆曲线数字签名算法和有限自动机数字签名算法等;特殊数字签名加密技术主要有盲签名、公平盲签名、代理签名、群签名、不可否认签名、门限签名、具有消息恢复功能的签名等,具体采用哪种加密算法由具体应用环境来决定,但不管采用哪种数字签名加密技术,通常都要定义两种互补的算法,一种是用于签名,另一种是用于验证。

数字签名加密技术是目前共享软件加密应用较多的一种,也是目前的一个研究热门课题。

三、RSA加密算法在共享软件加密技术中的应用

1、RSA加密算法基本原理

RSA是第一个比较完善的、既可用于数据加密又可’用于数字签名的算法,目前已被ISO、ITU等一些国际标准化组织做为标准采用。

RSA加密体制用户i的公开加密算法Ei和保密的解密算法Di是这样产生的:

(1)随机选取两个不同的大素数Pi和qi,将这两个数保密:

(2)计算求出两个素数的乘积ni=piqi,然后计算出ni的欧拉数φ(ni)=(Pi-1)(qi-1);

(3)用户从(1,φ(ni))中随机选取一个与φ(ni)互质的整数ei,作为公开的加密指数;

(4)利用欧几里得算法计算di,满足eidi=1 MODφ(ni);

(5)(ni,ei)和(ni,di)分别称为¨公开密钥”和“秘密密钥”。

由上述原理可知,RSA加密算法是基于模幂的可逆运算,但这种可逆是由特定的数值对(即公钥和私钥)决定的。

2、RSA加密算法在共享软件加密技术方面的应用机制

(1)RSA加密算法在序列号加密技术方面的应用机制

1)生成一对私钥D和公钥E,以供注册机、软件注册模板使用;

2)共享软件开发商编写一个注册机,并通过注册机将用户名、私钥D等信息生成密码C——注册码,然后将用户名和注册码提供给客户;

3)客户启动软件时,输入开发商提供的用户名与注册码,软件注册模板程序采用公钥E对注册码解码后生成F——用户名;

4)软件注册模板对比输入的用户名和解码后的用户名F,若一致则用户合法,否则授权失败。

(2)RSA加密算法在在线注册加密技术方面的应用机制

1)生成一对私钥D和公钥E,以供注册系统、软件注册模板使用;

2)软件开发商通过私钥D将用户的凭证信息加密生成F,通常存储在注册数据库中;

3)客户启动软件时,输入客户特征信息后,软件注册模板程序对用户特征信息利用公钥E加密,形成注册凭证C并发送到开发商的注册系统中;

4)注册系统对用户注册凭证C采用私钥D加密生成F,并通过F验证客户身份的有效性;

5)注册系统通过私钥D对注册验证结果进行加密后再发送回软件系统;

6)软件注册模板程序对验证结果利用公钥E解密,根据对比结果来决定是否是有效授权。

(3)RSA加密算法在激活码加密技术方面的应用机制

1)生成一对私钥D和公钥E,以供注册机、软件注册模板使用;

2)用户启动软件时,软件注册模板检测客户机的特定硬件信息,如硬盘序列号、MAC地址、CPU序列号等,并通过有关编码算法生成一个申请码C;

3)客户将申请码C发给软件开发商,开发商通过注册机对申请码C利用私钥D加密生成激活码F并发送给客户;

4)客户输入激活码F后,软件注册模板程序对激活码F利用公钥E解码后生成——客户机特征信息,然后将G与软件注册模板提取客户机的特定信息后的编码进行对比,若相等则客户合法,否则授权失败。

根据上述机制,利用C++/JAVA语言均可实现。

小知识之BIOS

BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。