RSA 加密算法
博客园体验更好!
RSA 加密算法在信息学奥赛上没有应用,但是在密码学以及数论领域是一个重要工具。。
RSA 加密算法是由罗纳德·李维斯特 (Ron Rivest)、阿迪·萨莫尔 (Adi Shamir) 和伦纳德·阿德曼 (Leonard Adleman) 一起提出的。算法的名字是由他们三人姓氏首字母组成的。
行文方便,后面对 RSA 加密算法统称 RSA。
RSA 的破解瓶颈
RSA 的破解瓶颈在于因式分解,只要对大整数的质因数分解没有重大的突破,且所采用的素数值足够大,那么 RSA 至少在有效的时间内是无法被破解的。而且 RSA 不是对称加密,就是说获得了加密用的密钥也没法解密,甚至你把公钥给窃密者看他也无法破解,这也是 RSA 的厉害之处。
算法具体内容
RSA 有待加密文本
具体过程如下:
-
选取两个大素数
p 与q ,它们的位数最好在 700 位 到 1000 多位。然后我们计算n=pq 以及n 的欧拉函数值\varphi(n) 。其中易得\varphi(n)=(p-1)(q-1) 。 -
选取一个数
e ,e\nmid 2 且\gcd(e,\varphi(n))=1 ,其中e 不要等于1 ,不然加密的意义也就不存在了,这么说的原因请往下看。 -
计算模
\varphi(n) 的情况下e 的乘法逆元d (也就是方程ed\equiv 1(\bmod \varphi(n)) 中d 的值),根据乘法逆元的原理,保证d 有解且只有 1 个解。 -
公开公钥,私钥保密。 加密过程如下:
-
设
P(M) 表示加密信息,那么P(M)=M^e\bmod n 。 -
设
S(C) 表示解密密文,那么S(C)=C^d\bmod n 。
RSA 的特性:
- 对于所有的公钥和密钥,满足
S(P(M))=M ,同理也满足P(S(C))=C 。
我们这里解释一下为什么
在
e=1 的情况下,P(M)=M\bmod n ,因为1\le M<n ,所以P(M)=M ,失去加密作用。在
e=1 的情况下,d=\varphi(n)+1 ,也就是S(C)=C^{\varphi(n)+1}\bmod n 。根据欧拉定理C^{\varphi(n)}\bmod n=1 ,所以我们可以得到S(C)=(C^{\varphi(n)}\bmod n)(C\bmod n)\bmod n=C\bmod n\bmod n=C\bmod n ,但是因为C 是由P(M) 加密过来的,所以1\le C< n ,那么S(C)=C ,失去解密作用。
再解释一下为什么
在
M \ge n 时,必定存在一个数M_2 (0\le M_2 < n ,使得P(M_2)=P(M) ,这就会使解密过程中无法返回正确结果。之所以会有这种歧义,是因为当M\ge n 的时候,M^e\bmod n 肯定是小于n 的。RSA 正确性证明
证明 RSA 无非就是证明
因为
展开其得到:
因为 欧拉定理,所以我们可以得到:
由于:
因此得证。
参考文献
[1] 《算法导论》第 31 章 RSA 加密算法