zoukankan      html  css  js  c++  java
  • RSA加密算法破解及原理

     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

    扫我关注。






  • 相关阅读:
    爬取博客园有关爬虫的文章
    小只爬虫的相关思路
    fiddler显示出服务器IP方法
    在测试时用到的一些mysql的小技巧(持续更新)
    把python脚本打包成win可执行文件
    关于SQL中的ROWNUM问题
    关于C#的DataGridView设置了DataSource后Rows无值问题
    微信小程序wx.request的简单封装
    ASP.NET进行请求转发
    微信小程序设置滚动条
  • 原文地址:https://www.cnblogs.com/protosec/p/11673371.html
Copyright © 2011-2022 走看看