RSA算法到底是什么?
节目石头(id:tangleithu)
我是石头哥。
大家一定听说过RSA算法。它是一种常见的非对称加密算法,常用于对网络上传输的一些敏感信息进行加密。
但是不知道大家是否知道具体流程?本文将概述RSA算法的流程,并用一个简单的例子进行讲解,最后讲解一种意想不到的“侧门”破解方法。
RSA算法流程
具体算法流程如下:
- 找到两个互质,
p和❿,⸀❿N = p*q - 确定一个数
e,使得e和(p-1)♿ 互为倒数。此时公钥为(N,e),请对方 - 确定私钥
d,使得-2C为:
- 消息接收方收到密文消息
C,在算法上解密消息M:m RS版本约为a和p互质,则:即
ass 幂对
p 以余为)1为例,(enp-1的次方减去可以❀分为d p欧拉定理的证明比较复杂,可以参考参考如下文末。
举例
我们用一个简单的例子来说明:N = pq,取两个素数p *♿ = 11,q3 = 11,q3,取,私钥为e与(p-1)(q-1) = 20互质e = 3e 验证私钥,即取一个可以被 20 整除,前提是d因此 3*d -1d=7 = 6 7。(3*7-1=20当然可以被20整除,3*67-1=200也可以被20整除)因此是(N=33) ,e=3)d=7或d=67。假设密文
M=8,通过加密算法,得到密文
C3=C3C3。再看解密,从
,我们得到明文
M = 17^7% 33 = 8或❓❓=3,是不是很神奇? (这里^代表多少次幂,后文有的代表异或)来,安利一个计算器工具,
bcbc

- 精准指令,支持,其实可以通过前面介绍的Alfred轻松完成Mac上的简单计算。
linux计算器RSA破解
如果需要破解RSA,需要找到
p和❀和❀♿,所以❓pq=33 ,如果你知道p和q,就可以通过公钥♾N❀和♸ed提取私钥。当然,上面描述的情况是比较简单的,但是当N很大的时候,就变得特别困难了。纵观历史,分解大数一直是数学中的一个难题。
有人曾经花了五个月的时间分解这个数字
39505874583265144526419767800614481996020776460304936454139376051579355626529450683609727842468219535093544305870490251995655335710209799226484977949442955603(159位),RSA-155(512位)[来自维基百科]。这条路行不通,所以有人走了“旁路”。斯坦福的几位研究人员花了两个小时破解了OpenSSL 0.9.7的1024位RSA私钥(有兴趣的同学可以看他们的论文
Remote Timing Attacks are Practical),使用的方法就是上面提到的定时攻击。稍后(或翻译为“定时攻击”)。定时攻击(timingattack)
定时攻击是侧信道攻击(或“Side Channel Attack”,缩写为SCA)的一种。它主要是一种利用不同的输入来进行不同的攻击的攻击方式。这个函数的执行时间是被执行的。
当我第一次看到这个的时候,我震惊了。直观上我感觉干扰因素太多,不利于实际应用。我可以忽略它吗?
不过,由于上述论文中有成功突破的实际案例,以及各大编程语言的更新,所以这样做还是非常有必要的。
例如,JDK 1.6.0_17版本的发行说明中提到了修复
MessageDigest.isEqual中的Bug,如下图所示:
e 关于本主题,了解更多信息,看到我之前写的这篇文章——这10行比较字符串相等性的代码完全把我搞糊涂了。不信你看一下参考资料:
- 【RSA的计时攻击:通过第四维度揭露你的秘密】(http://www.cs.sjsu.edu/faculty/stamp/ Students/article.html)
- [远程定时攻击很实用](http://crypto.stanford.edu/~dabo/papers/ssl-timing.pdf)
- [费马小定理](https:/ /zh.wikipedia.org/wiki/%E8%B4%B9%E9%A9%AC%E5 %B0%8F%E5%AE%9A%E7%90%86)
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网