array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 RSA加密算法破解及原理 - 爱码网
protosec

 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

扫我关注。






分类:

技术点:

相关文章: