注册码软件加密保护中RSA算法的应用

时间:2022-05-06 09:33:00

注册码软件加密保护中RSA算法的应用

【 摘 要 】 RSA算法是目前应用最为广泛的非对称性加密算法,其将加密密钥和加密算法分开能够更为方便地实现密钥的分配,防止注册机的非法制作和注册码的非法传播,对软件保护有着重要的意义。本文介绍了RSA算法,在阐述其基本原理的基础上对这一算法在一机一码的注册码软件加密保护中的应用进行了分析和探讨。

【 关键词 】 注册码软件;加密;RSA算法

Registration Code Software Encryption Protection in Application of RSA Algorithm

Dong Can-jun

(Aviva-Cofco IT Division Beijing 100022)

【 Abstract 】 The asymmetry of the RSA algorithm is the most widely used encryption algorithms, it separated the encryption key and encryption algorithm can be more easily to realize key distribution, prevent registration machine illegal spread of illegal production and registration code, for software protection has important significance. RSA algorithm has been introduced in this paper, on the basic principle on the basis of this algorithm in one yard registration code of the software encryption to protect the application are analyzed and discussed.

【 Keywords 】 registration code software; encryption; RSA algorithm

1 引言

计算机软件指一系列按照特定顺序组织的能够提供所要求功能和性能的计算机数据和指令的集合,包括与计算机操作系统有关的计算机程序及其文档,主要有系统软件和应用软件。计算机软件的开发研制成本高、周期长,但产品易于复制传播,大量的盗版软件给软件开发者带来巨大的经济损失,为了保护自身利益,开发者开始采用注册码的方法来对软件进行保护,但由于网上有不少的非法注册机和注册码,易导致软件保护失败,因此需要更为有效的加密方案来防止注册码的非法传播。RSA算法是目前最有影响力的公钥加密算法,能够很好地防止非法注册机的制作,保护计算机软件。

2 RSA算法

RSA算法是由美国麻省理工学院的Ron Rivest、Adi Shamirh和Len Adleman基于公开密钥密码体制开发的。在传统的加密方法中,加密和解密使用的是同一种密钥,密钥的生成、注入、管理、分发等较为复杂,随着用户量的迅速增加,这一缺陷也更为凸显。而在公开密钥密码体制中,加密和解密的密钥是不同的,加密密钥为公开信息也即是公开密钥,解密密钥则有加密保护,是秘密密钥,这种非对称的加密方法可较好地解决传统加密方法的不足,同时解密秘钥虽是由加密密钥决定的,但不能根据加密密钥来计算推导出解密密钥。

RSA算法是非对称加密算法之一。在应用中,通常是先生成一对RSA密钥,一个为公开密钥,可对外公开,一个为秘密密钥,由用户保存,基于公开密钥密码体制的特点,即使破解者能够分析出软件中注册验证算法,也难以将注册机算法推导出来,同时这一算法也易于理解和操作,能够抵抗目前已知的所有密码攻击,是目前公认的最优秀的公钥方案之一。

3 RSA算法基本原理

RSA算法主要涉及N、e1、e2三个参数,其中n=pq(公开),p、q为独立选取的两大质数,p≈q(保密),?准n=(p-1)*(q-1)(保密)。

随机选取一个值e1,满足e1与?准n互质,选择与e1相对的值e2,满足e2=(e2* e1)mod((p-1)*(q-1))=1,产生一对公钥E为(N,e1)和私钥D为(N,e1)。

加密:C=EkM=(M∧D)modN,用D对信息M加密,得密文C。

解密:M=DkC=(C∧E)modN,用E对密文C解密,得明文M。

4 RSA算法在注册码软件加密保护中的应用

为了更好地介绍RSA算法在软件加密保护中的应用方法,本文以采用“一机一码”制的软件保护方案为例,对这一算法的应用进行分析。

4.1 序列号产生

由于采用的是“一机一码”制,因此,序列号对每一个计算机都是唯一的,采取计算机硬盘序列号、网卡MAC地址混合构成计算机标志码,并通过消息摘要、哈希算法等将标识转变为固定长度的序列号,在序列号产生的过程中加入随机数据,采用RSA算法对数据进行加密,生成软件的注册序列号。

4.2 注册码生成

用户将生成的序列号、版本信息、电子邮箱等信息通过网络、电话等方式提供给开发商,由开发商运用私钥对用户信息进行RSA加密,得到注册码,并利用Base64、Uuencode编码等方法将得出密文转化为可以直接输入的字符后,提供给用户,将密文转化为可直接显示的数据的方法较多,以Base64为例,可通过以下代码来实现改功能:

Char buf2 [MAX _LENGTH + 1];

CString m_key;

//将buf1中的密文转化为可显示字符串m_ker

Cbase64::Encode(buf1,buf2,len,MAX_ LENGTH);

m_key. Format (“%s”,buf2);

4.3 RSA算法引入

使用RSA算法时,密钥长度越长,加密的计算量就越大,保密强度也就越高。本方案中密钥采用1024bit,RSA公钥算法主要有几个步骤:(1)提取计算机序列和网卡MAC地址形成信息M;(2)用RSA算法对信息M使用D加密得到密文C;(3)以RSA算法对密文C使用E解密得到明文M’,将解密得到的M’与提取的计算机序列号和网卡MAC地址混合形成的信息M,二者一致则表示注册信息为合法。

其部分代码如下:

//读取硬盘序列号

DWORD VolumeSerialNumber

GetVolumeInformation (“c:\”,NULL,12,& VolumeSerialNumber = _T(“”);

StrVolume. Format (“% 1d”, VolumeSerialNumber)

//RSA解码

CRsa ras;

Int len = rsa. Decrypt (buf2,strBase64. GerBuffer (0),strBase64.GetLength().

strE. GetBuffer(0),strN.GetBuffer(0))

if (len

buf2[len] = ‘\0’;

CString m_GenData = _T(“”);

M_GenData.Format(“%s”,buf2)。

4.4 密钥数据库管理

由于从理论上来说,没有任何加密方法是不可破解的,区别只在于破解的难度,因此为了进一步增加破解难度,可通过数据库管理的方法对公钥和私钥进行定期更换,利用Access数据库分别建立用户信息表和不同版本的加密密钥表,使不同的版本信息对应不同的秘密密钥,从而实现对密钥对的更新。

用户注册时可以通过SQL语句进行查询,使系统能够自动将与用户信息对应的加密密钥找出。

4.5 合法性验证

程序运行时,显示注册码输入界面,如果输入正确的注册码,点击注册之后,提示注册成功;若输入的注册码不正确则提示注册失败,用于判断正确与否的代码如下:

if(lsrecmp(shqm,myshqm)!=0)

{

AfMessageBox(“注册信息错误!”)

MB_ICONEXCLAMATION);

exit(0); //程序强行关闭

}

5 结束语

采用RSA算法加密和利用数据库管理对密钥对定期更新可更好地提高软件注册机破解难度,防止注册机的非法制作和传播,但由于理论上不存在绝对安全的保护技术,因此,仍需进行进一步的研究,不断地开发和更新软件保护技术,以更好地防止盗版。

参考文献

[1] 陈波.软件注册机制研究与实现[J].科技风,2011,(12):18,25.

[2] 朱烨行,李艳玲.混合加密算法在软件防盗版中的应用[J].电脑编程技巧与维护,2011,(16):125-126,134.

[3] 解亚萍,陆怀平.浅谈RSA数字签名的软件保护方案,2009(5):52-54.

[4] 向永谦,陈建华.一种基于身份的三方认证密钥交换协议[J].信息网络安全,2012,(11):32-35.

[5] 周书锋,孙玉真.基于RSA数字签名的软件保护方案[J].计算机应用与软件,2008,(3):35-37.

[6] 段善荣.软件保护技术的分析及实现[J].武汉理工大学学报:信息与管理工程版,2009,(6):906-908,921.

[7] 黄建文,田宏强,裴健.运营商用户数据安全防护体系的探索与实践[J].信息网络安全,2012,(12):80-82.

作者简介:

董灿钧(1974-),男,汉族,河南人,工程师;研究方向:网络安全 与网络管理。

上一篇:基于电子商务的信息安全风险评估与对策 下一篇:DDoS攻击的检测算法研究