在计算机信息传递中,信息发送方甲方,为了保护传输的明文信息不被第三方窃取,采用一个密钥A对要发送的信息进行加密而形成密文M并且发送给乙方,信息的接收方-乙方用另一把密钥B对密文M解密,得到明文消息,从而完成密文通讯。密钥A和密钥B是采用事先商定的某种计算机算法产生的密钥对,其中密钥A为用户私有,密钥B对网络上的大众是公开的,这种安全机制被称为公开密钥加密,公开密钥加密算法又叫非对称密钥加密算法,RSA加密算法就是其中最流行的一种,被广泛应用于简短信息加密和数字签名等领域

一、RSA加密算法简介

RSA加密算法诞生于1978年,是以三位发明人的名字(Rivest,Shamir和Adleman)首字母命名的,它是利用质数因子分解的困难性开发的算法,其保密强度是建立在计算的复杂性的基础之上的。RSA应用中要求每一个用户拥有自己的一种密钥:公开的加密密钥,用于加密明文;保密的解密密钥,用于解密密文。

二、RSA加密算法原理

RSA公开密钥加密算法的基本原理是:

(一)产生密钥对

首先,选择两个大质数,p 和q,计算:

n = p * q

然后,随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质,且0 < e < ( p - 1 ) * ( q - 1 )。

最后,计算解密密钥d, 要求满足:

e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )

其中n和d也要互质。数e和 n是公钥,用于加密信息,对所有使用者公开;数d和n是私钥,用于解密信息,用户自己保存。

(二)加密

信息发送者取得对方的公钥e和 n后,对发送的明文信息m进行加密运算可获得加密信息c,对应的密文计算方法是:

c = me mod n

然后通过通信渠道把密文信息c传递给信息接收者。

(三)解密

信息接收者接收到密文信息c后,采用自己掌握的私钥d和n进行解密获取明文信息m,对应的解密运算方法是:

m = cd mod n

由于RSA加密算法速度较慢,通常适用于对少量数据的加密,所以在加密明文信息 m时,首先把m分成等长数据块m1,m2,...,mi ,然后分别对m1,m2,..., mi进行加密,即m = m1m2... mi,c = c1c2... ci ,解密时也是如此。

三、RSA加密算法应用

RSA加密算法除了用于少量数据加密之外,最主要的应用就是数字签名。数字签名是通过密码运算生成一组符号及代码,用于鉴定签名人的身份以及对电子数据内容的认可,它还能验证出文件的原文在传输过程中有无变动,确保传输电子文件的完整性、真实性和不可抵赖性。

(一)数字签名的原理

被发送的文件用SHA编码加密产生128bit的数字摘要;发送方用自己的私有密钥对摘要再加密,形成数字签名;将原文和加密的摘要同时传给对方;对方用发送方的公共密钥对摘要解密,同时对收到的文件用SHA编码加密产生又一摘要;将解密后的摘要和重新用SHA编码加密收到的文件所产生的摘要相互对比。

(二)数字签名运算

数字签名使用者首先采用SHA编码法对欲签名的文件信息m进行数字摘要运算,得出摘要值h(m),再用自己掌握的私钥d和n进行签名运算,可获得数字签名s,之后将数字签名s和文件信息m一起发送给对方。

RSA加密算法是被研究得最广泛的公钥算法,易于理解和操作,可同时用于加密和数字签名,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,尽管存在一些瑕疵,但还是被普遍认为是目前最优秀的公钥方案之一。在电子商务应用系统中,RSA加密算法更是惯用的技术之一。

小知识之公开密钥:

公开密钥也称为非对称密钥,每个人都有一对唯一对应的密钥:公开密钥(简称公钥)和私人密钥(简称私钥),公钥对外公开,私钥由个人秘密保存;用其中一把密钥加密,就只能用另一把密钥解密。非对称密钥加密算法的典型代表是RSA。