RSA攻击之wiener攻击
来源:互联网 发布:windows多系统 编辑:程序博客网 时间:2024/06/08 02:09
1、理论基础
1.1连分数概念
详细信息请参阅维基百科(http://zh.wikipedia.org/wiki/连分数)
在数学中,连分数或繁分数即如下表达式:
这里的a0是某个整数,而所有其他的数an都是正整数,可依样定义出更长的表达式。
下面通过实际的例子来学习如何将一个实数转换为连分数
eg:找出3.245的连分数
1.2重要定理
结合RSA算法,我们理解上面的定理
根据上面的定理,我们根据给定的实数a求出p、q。具体过程如下
2、wiener攻击代码实现
在正式开启编程之前,必须明确本次攻击是有前提的:
1.尝试的d有限(可以事先设置一个阈值N,即尝试的次数,本测试案例设置N为10,实际上这远不够,可根据自己的需要适当增大N)
2、
其次,与其他RSA攻击目标不同,这次攻击的目标是d
- #include <stdio.h>
- #include <time.h>
- #include "gmp.h"
- #include "iostream"
- #include<string>
- #define N 10
- using namespace std;
- /*本案例为测试工程,所设置的N比较小*/
- int main()
- {
- long tmpb;
- string ntmp,etmp;
- mpz_t n_tmp,e_tmp;
- mpz_init(n_tmp);
- mpz_init(e_tmp);
- mpf_t one,e,n;
- mpf_init(e);
- mpf_init(n);
- mpf_init(one);
- cout<<"请输入e:";
- cin>>etmp;
- cout<<"请输入n:";
- cin>>ntmp;
- mpz_init_set_str(e_tmp,etmp.c_str(),0);//etmp.c_str()就是把string转换成char
- mpz_init_set_str(n_tmp,ntmp.c_str(),0);
- mpf_set_z (e,e_tmp);
- mpf_set_z (n,n_tmp);
- gmp_printf("e:%Ff\n",e);
- gmp_printf("n:%Ff\n",n);
- mpf_set_str(one, "1", 10);
- mpz_t m;
- mpz_init(m);
- mpz_set_str(m, "10000000000", 10);//已知m
- gmp_printf("m:%Zd\n",m);
- mpf_t a[N];
- for(int i=0;i<N;i++)
- {
- mpf_init(a[i]);
- }
- mpf_t b_tmp[N];
- for( i=0;i<N;i++)
- {
- mpf_init(b_tmp[i]);
- }
- mpz_t b[N];
- for( i=0;i<N;i++)
- {
- mpz_init(b[i]);
- }
- mpz_t q[N];
- for(i=0;i<N;i++)
- {
- mpz_init(q[i]);
- }
- mpf_div(a[0],e,n);
- gmp_printf("a[0]:%Ff\n", a[0]);
- mpf_trunc(b_tmp[0],a[0]);
- gmp_printf("b_tmp[0]:%Ff\n", b_tmp[0]);
- tmpb=mpf_get_ui (b_tmp[0]) ;
- mpz_set_ui(b[0],tmpb);
- gmp_printf("b[0]:%Zd\n",b[0]);
- mpz_set_ui(q[0],1);
- gmp_printf("q[0]:%Zd\n", q[0]);
- mpf_t sub_tmp;
- mpf_init(sub_tmp);
- mpf_sub(sub_tmp,a[0],b_tmp[0]);
- mpf_div(a[1],one,sub_tmp);
- gmp_printf("a[1]:%Ff\n",a[1]);
- mpf_trunc(b_tmp[1],a[1]);
- tmpb=mpf_get_ui (b_tmp[1]) ;
- mpz_set_ui(b[1],tmpb);
- gmp_printf("b[1]:%Zd\n",b[1]);
- mpz_set(q[1],b[1]);
- gmp_printf("q[1]:%Zd\n",q[1]);
- mpz_t mul_tmp;
- mpz_init(mul_tmp);
- mpz_t ed,result;
- mpz_init(ed);
- mpz_init(result);
- for(i=2;i<N;i++)
- {
- mpf_sub(sub_tmp,a[i-1],b_tmp[i-1]);
- mpf_div(a[i],one,sub_tmp);
- mpf_trunc(b_tmp[i],a[i]);
- tmpb=mpf_get_ui (b_tmp[i]) ;
- mpz_set_ui(b[i],tmpb);
- mpz_mul(mul_tmp,b[i],q[i-1]);
- mpz_add(q[i],mul_tmp,q[i-2]);
- printf("q[%d]:",i);
- gmp_printf("%Zd\n",q[i]);
- mpz_mul(ed,e_tmp,q[i]);
- mpz_powm(result,m,ed,n_tmp);
- if(mpz_cmp(result,m)==0)
- {
- printf("OK,successful");
- gmp_printf("%Zd\n",q[i]);
- break;
- }
- }
- printf("目前破解失败,请调大N重试!");
- }
0 0
- RSA攻击之wiener攻击
- 对RSA密码的Wiener的低解密指数攻击的C++实现
- RSA 常见攻击方法
- 攻击
- 攻击
- RSA--低加密指数广播攻击例子
- Web攻击手段之XSS攻击,CRSF, SQL注入攻击
- 计算机网络攻击实验之-DDOS攻击
- DOS攻击之SYN攻击法
- DOS攻击之SYN攻击原理
- DOS攻击之SYN攻击法
- 二层攻击之:mac层攻击
- Kali密码攻击之在线攻击工具
- DDoS攻击之SSL Flood攻击
- 网络安全之_XSS攻击
- Webx之csrf攻击
- webx之XSS攻击
- 攻击攻击再攻击 - 笔记
- json使用
- 可编辑div获取焦点位置和选择区域的文本
- MongoDB数据关系建模
- Struts2与JSON
- html表格边框
- RSA攻击之wiener攻击
- Netty线程模型详解
- PHP学习之开发环境搭建
- 用Thread实现socket多线通讯
- shell 2>&1
- 使用Myeclipse下的tomcat服务器开发web项目
- 数字,字符,字符串转换
- c#按位与运算在业务设计中的应用
- Xen Credit调度算法详细说明