浅析RSA数字签名算法的软件加密应用
2016-11-15余勇
余勇
(河南经贸职业学院,河南 郑州 450053)
浅析RSA数字签名算法的软件加密应用
余勇
(河南经贸职业学院,河南 郑州 450053)
软件是一种非常特殊的商品,其凝结了开发人员的智慧、精力和时间。但软件本身极易被复制,同时软件版权也非常容易被盗。为维护开发人员利益,其在开发软件的过程当中不断研发新的加密技术,以维护开发者的版权,同时也提高了软件的安全性。文章简单阐述了RSA数字签名算法的基本概念和原理,并对RSA数字签名算法在软件加密当中的具体应用进行了详细探讨。
RSA数字签名算法软件加密;秘钥;安全性
随着社会及计算机技术的不断发展,软件行业也得以迅速发展,社会软件需求量不断增加。软件的开发成本较高、周期较长且具高风险性,但同时软件又极易被复制和被盗,为维护开发者的知识产权及开发商的合法权益,就有必要采取相应措施以对软件进行加密保护。RSA是一种非对称加密算法,将其应用于软件加密当中不仅可保护软件的私密性,而且还可提高软件的安全性,有利于软件行业的健康、有序发展。
一、RSA数字签名算法
1.RSA数字签名算法的基本概念
RSA数字签名算法是一种非对称加密算法,产生于1978年,创始人为Ron Rivest、AdiShamirh和Len Adleman。此算法是以三人名字而命名的,其数论思想非常简单,即“两个素数相乘容易,但分解难”。
传统的加密方法其加密密钥及解密密钥通常一致,密文的安全性不高,另密钥的生成、注入、管理及分发等过程相对复杂。随着计算机的不断推广和应用,计算机使用者数量迅速加大,传统加密方法的缺陷越来越明显。但是公开密钥密码体制当中,加密密钥完全不同于解密密钥,加密密钥是公开的,但是解密密钥为秘密密钥,是实施了相应的加密保护措施的,这种加密密钥不同于解密密钥密码体制被称为非对称加密方法,其有效弥补了传统加密方法的不足之处。另外,虽解密密钥由加密密钥决定,但却无法根据加密密钥进行推导所得,因此此加密方式具很高的安全性能。
2.RSA数字签名算法的基本原理
RSA现已成为使用范围最为广泛的一种非对称算法加密技术,其不仅可用于数据加密,同时也可用于数字签名。RSA最大的特征在于其加密密钥与解密密钥不同,且解密密钥无法通过加密密钥进行计算所得。总体而言,RSA数字签名算法的基本原理主要包括以下三步:
第一,产生加密密钥和解密密钥。选择两个大素数,分别记为p、q,计算其乘积,并记为n,n=pq;然后再随机选择一个正整数作为加密密钥,记为e,e与(p-1)(q-1)的关系为互素;利用欧几里得扩展算法进行计算,以得到解密密钥,记为d。d所要满足的条件如下:
d=e-1mod[(p-1)(q-1)]
式中的d与n的关系也为互素,e与n为公开密钥,d为私人密钥,刚开始所选择的p与q在计算完成之后就不需要了,可舍弃,但要注意的p与q的取值决不可泄露。
第二,加密过程。加密过程,即软件注册码的产生过程。以计算机ID为明文信息,即公开信息,记作m,同时利用私人密钥d加密信息m,从而得到密文s。s的计算公式如下:
s=mdmodn。式中的s即为拥有上述计算机ID的软件注册码。
第三,解密过程。解密过程,即校验软件注册码的过程。用户可直接将注册码输入相应界面或是从软件包的注册文件当中提取注册码s,然后再利用公开密钥e来解密密文,从而获取明文信息。其计算公式如下:m'=semodn。
将计算所得的m'与原始明文m进行比较,若相等,则表明s为软件开发人员所承认的合法注册码,软件可正常运行;若不等,则表明s不为软件开发员的承认,软件会拒绝运行。
通过分析加密过程可知,软件注册码的长度主要由n来决定,n的位数越多,软件就越安全。理论上来说,破解人员若能通过n来推导出p和q,通过加密密钥e,其就可获取解密密钥d,进而破解密文。然而实际上,300多年以来,很多数学家在不断研究因式分解的基础上也未能取得有效的进展,因此要想通过n来得知所选取的素数p和q是非常困难的。而且通常来说,在实际的软件加密应用当中,RSA数字签名算法的密钥保持在1024位以上,具有足够的安全性能,可有效保障软件注册码的安全性。
二、RSA数字签名算法的软件加密应用
本文采取“一机一码”制软件保护方案,分析了RSA数字签名算法在软件加密当中的具体应用。
1.序列号的产生
本文所采取的是“一机一码”制软件保护方案,也就是说,每台计算机的序列号是唯一的。计算机的硬盘序列号、网卡MAC地址混合形成计算机的标志码,再利用本机的消息摘要及哈希算法则可将所形成的标志码转变为本机的序列号,此序列号是唯一且固定的。在序列号的生成过程当中可自行加入任何数据,同时利用RSA数字签名算法将所加入数据进行加密,从而形成软件的注册序列号。
2.注册码的生成
序列号生成之后,用户下一步就需获取注册码。首先,用户可采取网络或是电话等方式将所生成的序列号以及版本信息和电子邮箱等基本信息向开发商提供,然后开发商利用RSA数字签名算法当中的私钥来加密用户信息,从而获得软件注册码;接着开发商将注册码利用各种方法将所得的密文进行转化,如Base64、Uuencode编码等,将所得密文转变为可以字符进行输入的数据,然后提供给用户。
3.引入RSA数字签名算法
利用RSA数字签名算法加密软件时,密钥的长度越长,加密的计算量就会越大,软件的保密程度也会越深。本方案当中,利用RSA数字签名算法进行软件加密的密钥长度设定为1024bit。RSA公钥的算法如下:第一,将计算机的序列号及网卡的MAC地址提取出来以形成公开信息m;第二,利用RSA数字签名算法当中的私人密钥d来加密公开信息m,从而得到密文s;第三,利用RSA数字签名算法当中的公开密钥e来解密密文s,从而得到明文m'。此过程当中的部分代码如下:
//读取硬盘序列号
上述代码为读取计算机硬盘序列号及利用RSA数字签名算法进行解密的过程。解密之后,将通过以计算机的序列号及网卡的MAC地址提取出来以形成公开信息m与解密所得明文m'进行比较,若两者一致,则说明注册信息为合法信息,软件可正常运行;若不一致,则说明注册信息不合法,软件无法运行。
4.密钥数据库管理
就理论而言,不管是哪种加密方法都是有可能被破解的,只是不同加密方法的破解难度有所不同。为加强软件的破解难度,可利用数据库存来存储公开密钥及私密密钥,并定期更换,同时利用Access数据库以对用户信息进行保存,并存储各版本软件加密密钥,从而达到更新密钥的目的,进而提高软件的破解难度。
在这种情况下,用户若想获取加密密钥,则可通过编写相应的SQL语言以让系统在数据库存当中进行查询即可,系统会依照相关用户信息自动查找并提取出相应的加密密钥。
5.验证用户合法性
程序在进行运行时会自动弹出注册码输入框,用户输入正确注册码,即可注册成功;若所输入注册码错误,则提示注册失败。
要注意的是,每台计算机的识别码都是唯一的,软件也是通过识别码来辨别各计算机的。但是当计算机升级或是某些部件被更换之后,其识别码也会产生变化。在这种情况下,用户若要再次使用软件,则可能需重新申请注册码,这在很大程度上加大了用户和开发者或开发商的负担。为此,在设计识别码时应注意有一定的变化空间。如WindowsXP,其识别码为64位,其中有10项硬件信息,如CPU序列号、RAM容量、网卡MAC地址等,若识别码有变化并保持在3位以内,则软件会默认为系统硬件更换或是软件升级等状况。在此情况下,软件程序在校验注册码时会与本机的识别码进行比较,若完全匹配或是硬件变化较小,则软件仍可正常运行。
利用RSA数字签名算法对软件进行加密,同时采取数据库管理方式定期更新密钥,可有效提高软件的破解难度,避免软件被非法复制或传播,保障了开发者及开发商的合法权益。但就理论而言,RSA数字签名算法也不能保证软件的绝对安全,因此对于RSA数字签名算法在软件加密当中的应用还需进行深入研究,以不断完善现有加密方法,同时开发新的软件保护技术,以将防止盗版工作做得更好,促进软件行业的健康发展。
[1]董灿钧.注册码软件加密保护中的RSA算法的应用[J].信息安全与技术,2013(9):15-16.
[2]刘心声.RSA算法在共享软件加密技术中的应用机制研究[J].计算机光盘软件与应用,2012(24):170-171.
[3]卜晓燕,张根耀.组合算法在软件加密系统中的实现[J].计算机与数字工程,2012(8):77-79.
[4]赵鑫.RSA文件加密软件的设计与开发[J].数字技术与应用,2014(8):173-174.
TP
A
1673-0046(2016)8-0187-02