RSA是在Diffe-Hellman算法问世两年之后,由Rivest、Shamir和Adelman在MIT研究出的,并于1978年公布。
RSA系统利用这样的事实:模运算中冥的自乘数是容易解的。RSA的加密方程为:
C=memodn
这里,密文C是信息m自乘指数幂e并除以模数n后的余数。这可以由任何一个知道信息m、模数n和加密指数e的计算机迅速完成。另一方面,将这一个过程反过来,根据 em 根求膜n。对任何一个不知道n因子的人来说,这是很困难的。
RSA系统非常适合用于制作用于制作数学特征和某些加密应用。但是,常常要求制作保密密钥,以便直接用于保存密钥保密系统,这需要使用另外一个单向函数。
y=gxmodp
(在g自乘幂x后,然后除以p,x为余数)
RSA特点
- 密钥配发十分方便,用户的公用密钥可以像电话号码一样公开,使用方便。这对网络环境众多用户的系统,密钥管理更加便捷。每个用户只需要只有一对密钥即可实现与网路中任何一个用户的保密通信。
- RSA加密原理基于单向函数,非法接受者利用公用密钥不可能在有限的时间内推算出秘密密钥,这种算法的保密性好。
- RSA在用户确认和实现数组签名方面优于现有的其他加密机制。
- RSA的加密速度是一个缺陷。由于进行的都是大数运算,使得RSA最快的情况也比DES慢上好几倍。由于这些限制,RSA目前主要用于网络环境中少量的数据加密。
- RSA数字签名是一种强有力的认证鉴别方式,他可以确保接收方能够判断发送方的真实身份。
是不是有点一头雾水?别急,前面的都不重要,到这里我们只需要脑子里有一点概念,RSA实现原理是于一个单向函数就OK了。下面我们将以例子的形式来进行分析说明。
RSA公开密钥密码系统
首先我们先梳理RSA的使用机制。
RSA要求每一个用户拥有自己的一种密钥。
* 公开的加密密钥,用来加密明文
* 保密的解密密钥,用来解密密文
这是一对非对称密钥,又称为公用密钥体制(Public Key Cryptosystem )。
在RSA密钥体制运行中,当A用户发送文件给B用户时,A用户用B用户公开的密钥加密明文,B用户则用解密密钥解读密文。
下面将用一个简单的例子来说明RSA公开密钥密码系统的工作原理。
- 随机取两个质数。
例如p=11,q=13.(实际应用中,着两个质数越大,越难破解) - 计算p和q的乘积n。
n = p*q = 11*13 = 143
(此时n的长度就是密钥的长度,此时n=143,转化成二进制为1000 1111 ,一共是8位,实际应用中一般用1024-2048位) - 计算n的欧拉函数φ(n)。
由公式φ(n) = (p-1)(q-1)
可得出此时φ(n) = 120。 - 随机选择一个与φ(n)互质的数,取值范围为1~φ(n)。
例如这里我们随机选择 e = 7。(称为“公开指数”) - 计算e对于φ(n)的摸反元素d。
d的值需要满足 e×d=1mod(φ(n)) 这个等式相当于