【笔记】RSA 加密算法
RSA 加密算法在信息学奥赛上没有应用,但是在密码学以及数论领域是一个重要工具。现代很多银行、金融机构、政府机关对 RSA 加密算法都有很多的运用。
RSA 加密算法是由罗纳德·李维斯特 (Ron Rivest)、阿迪·萨莫尔 (Adi Shamir) 和伦纳德·阿德曼 (Leonard Adleman) 一起提出的。算法的名字是由他们三人姓氏首字母组成的。
行文方便,后面对 RSA 加密算法统称 RSA。
RSA 的破解瓶颈#
RSA 的破解瓶颈在于因式分解,只要对大整数的质因数分解没有重大的突破,且所采用的素数值足够大,那么 RSA 至少在有效的时间内是无法被破解的。而且 RSA 不是对称加密,就是说获得了加密用的密钥也没法解密,甚至你把公钥给窃密者看他也无法破解,这也是 RSA 的厉害之处。
算法具体内容#
RSA 有待加密文本 ,公钥 以及私钥 。
具体过程如下:
-
选取两个大素数 与 ,它们的位数最好在 700 位 到 1000 多位。然后我们计算 以及 的欧拉函数值 。其中易得 。
-
选取一个数 , 且 ,其中 不要等于 ,不然加密的意义也就不存在了,这么说的原因请往下看。
-
计算模 的情况下 的乘法逆元 (也就是方程 中 的值),根据乘法逆元的原理,保证 有解且只有 1 个解。
-
公开公钥,私钥保密。
加密过程如下: -
设 表示加密信息,那么 。
-
设 表示解密密文,那么 。
RSA 的特性: -
对于所有的公钥和密钥,满足 ,同理也满足 。
我们这里解释一下为什么 不能为 :
在 的情况下,,因为 ,所以 ,失去加密作用。
在 的情况下,,也就是 。根据欧拉定理 ,所以我们可以得到 ,但是因为 是由 加密过来的,所以 ,那么 ,失去解密作用。
再解释一下为什么 :
在 时,必定存在一个数 (,使得 ,这就会使解密过程中无法返回正确结果。之所以会有这种歧义,是因为当 的时候, 肯定是小于 的。
RSA 正确性证明#
证明 RSA 无非就是证明 ,那么我们就展开它,可以得到 等价于:
因为 和 是对 的乘法逆元,所以存在整数 ,使得:
展开其得到:
因为 欧拉定理,所以我们可以得到:
由于:
因此得证。
参考文献#
[1] 《算法导论》第 31 章 RSA 加密算法
作者:2044-space-elevator
出处:https://www.cnblogs.com/2044-space-elevator/articles/17840785.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战