【笔记】RSA 加密算法

RSA 加密算法在信息学奥赛上没有应用,但是在密码学以及数论领域是一个重要工具。现代很多银行、金融机构、政府机关对 RSA 加密算法都有很多的运用。

RSA 加密算法是由罗纳德·李维斯特 (Ron Rivest)、阿迪·萨莫尔 (Adi Shamir) 和伦纳德·阿德曼 (Leonard Adleman) 一起提出的。算法的名字是由他们三人姓氏首字母组成的。

行文方便,后面对 RSA 加密算法统称 RSA。

RSA 的破解瓶颈#

RSA 的破解瓶颈在于因式分解,只要对大整数的质因数分解没有重大的突破,且所采用的素数值足够大,那么 RSA 至少在有效的时间内是无法被破解的。而且 RSA 不是对称加密,就是说获得了加密用的密钥也没法解密,甚至你把公钥给窃密者看他也无法破解,这也是 RSA 的厉害之处。

算法具体内容#

RSA 有待加密文本 M(0M<n),公钥 P=(e,n) 以及私钥 S=(d,n)

具体过程如下:

  1. 选取两个大素数 pq,它们的位数最好在 700 位 到 1000 多位。然后我们计算 n=pq 以及 n 的欧拉函数值 φ(n)。其中易得 φ(n)=(p1)(q1)

  2. 选取一个数 ee2gcd(e,φ(n))=1其中 e 不要等于 1,不然加密的意义也就不存在了,这么说的原因请往下看。

  3. 计算模 φ(n) 的情况下 e 的乘法逆元 d(也就是方程 ed1(modφ(n))d 的值),根据乘法逆元的原理,保证 d 有解且只有 1 个解。

  4. 公开公钥,私钥保密。
    加密过程如下:

  5. P(M) 表示加密信息,那么 P(M)=Memodn

  6. S(C) 表示解密密文,那么 S(C)=Cdmodn
    RSA 的特性:

  7. 对于所有的公钥和密钥,满足 S(P(M))=M,同理也满足 P(S(C))=C

我们这里解释一下为什么 e 不能为 1

e=1 的情况下,P(M)=Mmodn,因为 1M<n,所以 P(M)=M,失去加密作用。

e=1 的情况下,d=φ(n)+1,也就是 S(C)=Cφ(n)+1modn。根据欧拉定理 Cφ(n)modn=1,所以我们可以得到 S(C)=(Cφ(n)modn)(Cmodn)modn=Cmodnmodn=Cmodn,但是因为 C 是由 P(M) 加密过来的,所以 1C<n,那么 S(C)=C,失去解密作用。

再解释一下为什么 0M<n

Mn 时,必定存在一个数 M20M2<n,使得 P(M2)=P(M),这就会使解密过程中无法返回正确结果。之所以会有这种歧义,是因为当 Mn 的时候,Memodn 肯定是小于 n 的。

RSA 正确性证明#

证明 RSA 无非就是证明 P(S(M))=M,那么我们就展开它,可以得到 P(S(M)) 等价于:

Medmodn

因为 ed 是对 φ(n)=(p1)(q1) 的乘法逆元,所以存在整数 k,使得:

ed=1+k(p1)(q1)

展开其得到:

Medmodn=M1+k(p1)(q1)modn=M((Mmodn)k(p1)(q1))modn=M(Mφ(n)1modn)modn

因为 欧拉定理,所以我们可以得到:

M(Mφ(n)1modn)modn=Mmodn

由于:

1M<n

因此得证。

参考文献#

[1] 《算法导论》第 31 章 RSA 加密算法

作者:2044-space-elevator

出处:https://www.cnblogs.com/2044-space-elevator/articles/17840785.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   CoutingStars  阅读(59)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示