RSA加密算法是一种非对称加密算法,目前被广泛应用。本文介绍RSA算法的基本原理和破解方法。

RSA在互联网上被广泛应用,典型的如各个网站的证书。

0?wx_fmt=png

很多应用数据的加密也是使用RSA。

本文介绍RSA算法的原理,并介绍其破解方法和工具。

01

RSA算法原理

RSA加密算法是一种非对称加密算法,它能抵抗目前绝大多数密码攻击。RSA算法基于以下事实:


两个大素数相乘十分容易,但是对其乘积进行因式分解却极其困难,因此,RSA的安全性取决于对极大整数做因数分解的难度。

RSA加密体制中,有两个密钥,即一个公钥,一个私钥,它们组成一对密钥,公钥用来加密,私钥用来解密,公钥被公开,私钥要藏好了,如果私钥泄漏或者被爆破,则这对密钥就基本没用了。

加密的一般过程为:

0?wx_fmt=png

02

公钥和私钥

RSA公钥与私钥的生成过程如下:

  1. 随机选定两个大素数p, q。

  2. 计算公钥和私钥的公共模数 n = pq。

  3. 计算模数n的欧拉函数φ(n)=lcm(p-1,q-1).(即最小公倍数) 。

  4. 选定一个正整数e,使1 < e < φ(n) , 且e与φ(n)互质。

  5. 计算e关于φ(n)的模反元素d, 满足de ≡ 1 (mod φ(n) ). (计算方法de=xφ(n) +1)。

  6. 公钥为(e,n),私钥为(n,d)。

RSA成立的条件依赖于如下等式:

  

0?wx_fmt=png

03

加密与解密

在RSA中,Bob想给Alice发一个消息X,Alice公钥为(e,n),私钥为(n,d)。

加密和解密的过程如下:

  1. Bob先把X转换为一个大数m < n, 再用Alice的公钥(e,n)把m加密为另一个大数: 

    0?wx_fmt=png

  2. Alice收到Bob发来的大数c, 进行解密。 通过自己的私钥(p,q,d)得到大数m: 

    0?wx_fmt=png

  3. 再把m转换为X, Alice即得到Bob的原始消息,转换方法二人提前约定。

04

RSA暴力破解

RSA暴力破解,简单理解,就是根据公钥(e,n)获取私钥(n,d)的方法。


对一个RSA证书来说,公钥是公开的,e及n值可以使用openssl库进行获取,重要的是模数n值,假设公钥文件问pub.pem,则模数n值其获取命令如下:


openssl rsa -in pub.pem -pubin -modulus -noout


RSA爆破就是对大数n值使用工具分解成pq的过程,得到pq,就得到了d。


RSA爆破,是根据数学原理,按数学步骤进行一步步计算,不是使用openssl这类通用的工具进行的,具体的步骤,太专业了,这里不做描述。

目前,RSA-220 即729位的数,已经有破解成功的案例。对RSA-155即512位的数,使用服务器集群很快就能得到结果。而对RSA-1024而言,已经不够安全了,所以现在SSL证书都升级到了2048位。

在互联网大发展的时代,最幸福的是,目前已经有很多开源的爆破工具供我们使用。

05

RSA爆破工具

RSA爆破的工具有很多,如:CADO-NFS,ggnfs,MSIEVE,yafu、sage等,还有在线破解的网站如cocalc.com。

有的工具可以在Linux,有的可以在Windows下使用。在线破解工具则是大伙玩的,实用性有限。

在爆破工具的选择上,如果需要分解的数字不大,可以使用yafu等工具,如果需要爆破的是大数,则需要使用CADO-NFS这类Linux平台下可以并行运算的爆破工具。

CADO-NFS官方提供的实验结果如下:

0?wx_fmt=png

实际上,如果服务器够多,CPU够多,破解速度会更快。

当然,对协议分析而言,如果需要爆破,则这个数不会小,我推荐的爆破工具肯定就是CADO-NFS啦。

如果在RSA爆破过程中需要获取帮助,可以留言找我进行了解。

0?wx_fmt=jpeg

扫我关注。

版权声明:本文为protosec原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/protosec/p/11673371.html