对RSA密码的Wiener的低解密指数攻击的C++实现

原创 2006年06月21日 16:47:00

这里提供的是一个简要的实现,虽然简单,但是还是蛮有意思,因为毕竟是一种避开分解因子的攻击RSA的方法。可以看到,在一定的条件下,程序可以由公钥n,b求得私钥

具体思路,证明及伪代码请参考Douglas R.Stinson的《Cryptography Theory and Practice(Second Edition)》,这本书有中文译版,书名是《密码学原理与实践》,冯登国译。

对RSA密码的Wiener的低解密指数攻击的C++实现

 #include<iostream>
#include<math.h>
using namespace std;

const N=10000;
static long q[N],m,Prikey,P,Q;
static int flag=0;

int Euc(long a,long b)//euclidean算法
{
    long r[N];
    r[0]=a;
    r[1]=b;
    m=1;
    while(r[m]!=0)
    {
        q[m]=r[m-1]/r[m];
        r[m+1]=r[m-1]-q[m]*r[m];
        m++;
    }
    m--;
    return r[m];
}

void Wiener(long n,long b)//wiener attack
{
    long c[N],d[N],j;
    double ndot,test,test1;
    double temp,mid,de,delte,pp,qq;
    c[0]=1;
    c[1]=q[1];
    d[0]=0;
    d[1]=1;
    j=1;
    while(j<=m)
    {
        temp=double(c[j])*(b);
        ndot=(temp-1)/double(d[j]);
        test=long(ndot);
       
        if(test==ndot)
        {       
            mid=double(n)-ndot+1.0;
            de=mid*mid-4.0*double(n);
            delte=sqrt(de);
            qq=(mid-delte)/2.0;
            pp=(mid+delte)/2.0;
           
            test=long(pp);
            test1=long(qq);
            if(test==pp && test1==qq && de>=0)
            {               
//                cout<<"p="<<pp<<",q="<<qq<<endl;
                P=pp;Q=qq;
                flag=1;
            }
        }
        j++;
        c[j]=q[j]*c[j-1]+c[j-2];
        d[j]=q[j]*d[j-1]+d[j-2];
    }
    if(!flag) cout<<"...attack failed"<<endl;
}

int Gcd(int a,int b,int &x,int &y)//求同余方程
{
    if(!b)
    {
        x=1;
        y=0;
        return a;
    }
    else
    {
        int r=Gcd(b,a%b,x,y);
        int t=x;
        x=y;
        y=t-(a/b)*y;
        return r;
    }
}


int GetPriKey(int Fn,int Pubkey)//求得密钥d..
{
    int x,y,d;
    d=Gcd(Pubkey,Fn,x,y);
    return (x/d)%Fn;
}

int main()
{
    int rm,i;
    long n,b,Fn;
    double temp0;
//    n=160523347;b=60728973;//样例数据
cout<<"PLEASE INPUT n,b"<<endl; cin>>n>>b; cout<<"Euclidean Algorithm("<<n<<","<<b<<")..."<<endl; rm=Euc(n,b); cout<<"r[m]="<<rm<<endl;for(i=0;i<=m;i++)
    {
        cout<<"q["<<i<<"]="<<q[i]<<endl;
    }
    cout<<"[Wiener Attack]"<<endl;
    Wiener(n,b);
   
    if(flag)
    {
        cout<<"attack successed"<<endl;
        cout<<"now checking presupposition...";
       
        temp0=sqrt(sqrt(n));
        if(temp0>3*Prikey && P>Q && P<2*Q)//初始条件验证
        {
            cout<<"passed"<<endl<<"RESULT"<<endl;
            cout<<"p="<<P<<",q="<<Q<<endl;           
            Fn=(P-1)*(Q-1);
            Prikey=GetPriKey(Fn,b);
            cout<<"Prikey="<<Prikey<<endl;
        }
        else
        {
            cout<<"failed"<<endl;
        }
    }   
    return 0;   
}

加密解密、信息摘要算法收集

MD5算法研究 综述   md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和...
  • chensheng913
  • chensheng913
  • 2004年07月04日 17:03
  • 2884

加密算法

软件保护技术-- 加密算法   1、RSA算法   2、DES算法   3、ElGamal算法   4、DSA算法   5、MD5算法   6、BLOWFISH算法1、RSA算法  它是第一个既能用于...
  • lxslove
  • lxslove
  • 2008年10月08日 00:46
  • 1485

RSA攻击之wiener攻击

1、理论基础     1.1连分数概念 详细信息请参阅维基百科(http://zh.wikipedia.org/wiki/连分数) 在数学中,连分数或繁分数即如下表达式:         这...
  • oumeixi_wjp
  • oumeixi_wjp
  • 2015年03月30日 10:32
  • 1046

RSA--低加密指数广播攻击例子

RSA低加密指数广播攻击--脚本例子
  • xuqi7
  • xuqi7
  • 2017年07月20日 21:41
  • 834

RSA加密算法 源码

RSA加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。 RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它...
  • kimwu
  • kimwu
  • 2013年11月07日 17:02
  • 1471

PKCS#1 v2.1 RSA Cryptography Standard (PKCS#1 RSA密码学规范,版本2.1)

PKCS#1 v2.1: RSA密码学规范 RSA实验室 2002年6月14日 --翻译:CaesarZou (zoudeqiang1979@tsinghua.org.cn) 1.介绍...
  • CaesarZou
  • CaesarZou
  • 2012年03月23日 14:07
  • 6202

RSA低指数加密

0x01 题目来源https://github.com/pbiernat/BlackBox/tree/master/RSA_Cube0x02 解题思路1、查看源码在题目的源码中看到,这里RSA使用的加...
  • jeffreynnn
  • jeffreynnn
  • 2017年08月14日 20:46
  • 235

RSA小公钥指数(e=3)的安全性分析

1. 引言 学术界普遍认为绝对不能选用e=3作为RSA公钥指数,就好像说我们再也不能用md5一样。但实际上,md5今天仍然广泛使用。一个密码算法在理论上被攻破,并不等于实践中就一定会有安全风险。...
  • seccloud
  • seccloud
  • 2012年11月15日 22:22
  • 3849

RSA公钥密码算法的原理及实现(二)

RSA公钥密码算法的原理请看: http://blog.csdn.net/A00553344/archive/2009/01/07/3730194.aspx 下面主要论述RSA公钥密码算法的具体实现。...
  • jasmineal
  • jasmineal
  • 2013年07月10日 11:19
  • 1459

PKCS#1 v2.1 RSA Cryptography Standard (PKCS#1 RSA密码学规范,版本2.1)

PKCS#1 v2.1: RSA密码学规范 RSA实验室 2002年6月14日 --翻译:CaesarZou (zoudeqiang1979@tsinghua.org.cn) 1.介绍...
  • CaesarZou
  • CaesarZou
  • 2012年03月23日 14:07
  • 6202
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对RSA密码的Wiener的低解密指数攻击的C++实现
举报原因:
原因补充:

(最多只允许输入30个字)