当前位置:文档之家› 密码算法安全分析与算法攻击分析解析

密码算法安全分析与算法攻击分析解析

实验项目与实验报告( 1 )
操作步骤如下:
1.打开RSA-Tool 工具软件窗口,如下图1所示:
图1
2. 在“Number Base”组合框中选择进制为10 ,如下图2所示:
图2
3.单击“Start”按钮,然后随意移动鼠标直到提示信息框出现,以获取一个随机数种子,如下图3所示:
图3 4.在“KeySize(Bits)”编辑框中输入32,如下图4所示:
图4
5.单击“Generate”按钮生成,如下图5所示:
图5
6. 复制“Prime(P)”编辑框中的内容到“Public Exp.(E)”编辑框,如下图6所示:
图6
7.在“Number Base”组合框中选择进制为16,如下图7所示:
图7
8.记录下“Prime(P)”编辑框中的十六进制文本内容:BCF3。

9.再次重复第 2 步。

10.在“KeySize(Bits)”编辑框中输入你所希望的密钥位数,从32到4096,位数越多安全性也高,但运算速度越慢,一般选择1024位足够了;单击“Generate”按钮生成,如下图8,图9所示:
图8
图9
11.单击“Test”按钮测试,在“Message to encrypt”编辑框中随意输入一段文本,然后单击“Encrypt”按钮加密,再单击“Decrypt”按钮解密,看解密后的结果是否和所输入的一致,如果一致表示所生成的RSA密钥可用,否则需要重新生成,如图10所示:
图10
12.到此生成完成,“Private Exp.(D)”编辑框中的内容为私钥如下图11,第7步所记录的内容为公钥(BCF3),“Modulus (N)”编辑框中的内容为公共模数如下图12,请将上述三段十六进制文本保存起来即可。

图11
图12
使用代码实现:
#include<stdio.h>
#include<stdlib.h>
unsigned long prime1,prime2,ee;
unsigned long *kzojld(unsigned long p,unsigned long q) //扩展欧几里得算法求模逆
{unsigned long i=0,a=1,b=0,c=0,d=1,temp,mid,ni[2];
mid=p;
while(mid!=1) {
while(p>q)
{p=p-q; mid=p;i++;}
a=c*(-1)*i+a;b=d*(-1)*i+b;
temp=a;a=c;c=temp;
temp=b;b=d;d=temp;
temp=p;p=q;q=temp;
i=0; }
ni[0]=c;ni[1]=d;
return(ni);}
unsigned long momi(unsigned long a,unsigned long b,unsigned long p) //模幂算法
{ unsigned long c;
c=1;
if(a>p) a=a%p;
if(b>p) b=b%(p-1);
while(b!=0) {
while(b%2==0)
{ b=b/2;
a=(a*a)%p;
}
printf("Please select what do you want to do:\n");
printf("1.Encrpt.\n"); printf("2.Decrpt.\n"); printf("3.Exit.\n");
printf("Your choice:");
scanf("%c",&cho);
getchar();
switch(cho){
case'1':RSAjiami();break;
case'2':RSAjiemi();break;
case'3':exit(0);
default:printf("Error input.\n");break; }
getchar();
}
}
将以上代码复制到实验环境C++软件中。

算法结果分析如下:
1.主界面初始化如下图1所示:
图1
2.设置密钥,输入两个素数p和q,还有e的值,如下图2所示:
图2
3.对明文加密,n=pq=4087,输入公钥(e,n):17,4087如下图3,并回车得到图4:
图3
图4
4.选择1并回车对明文加密,输入明文M=1234,得到密文C=2793,如下图5所示:
图5
5.在步骤3选择2回车对密文C=2793进行解密,得到明文M=1234,如下图6所示:
RSA的安全性分析:
理论上,RSA的安全性取决于因式分解模数N的困难性。

从严格的技术角度上来说这是不正确的,在数学上至今还未证明分解模数就是攻击RSA的最佳方法,也未证明分解大整数就是NP问题(表示那些能在多项式时间内利用“不确定性" 图灵机可以求解的问题)。

事实情况是,大整数因子分解问题过去数百年来一直是令数学家头疼而未能有效解决的世界性难题。

人们设想了一些非因子分解的途径来攻击RSA体制,但这些方法都不比分解n来得容易。

因此,严格地说,RSA的安全性基于求解其单向函数的逆的困难性。

RSA单向函数求逆的安全性没有真正因式分解模数的安全性高,而且目前人们也无法证明这两者等价。

许多研究人员都试图改进RSA体制使它的安全性等价于因式分解模数。

相关主题