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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验项目与实验报告(1)学科:信息与网络安全学号:20134088141姓名:羊波时间:10月11日实验项目:RSA加密解密算法的实现(使用工具软件与代码实现)及RSA的安全性分析实验目的:通过利用RAS工具的使用实现加密和解密过程,加深对公钥(非对称)密码算法的认识。一、实验步骤:1.完成实验教程1-32.登录网络平台修改作业发布密码,上传实验报告一3.注册百度知道号,并加入知行网络团队。二、实验内容:实验原理:公钥密码算法是指一个加密系统的加密密钥和解密密钥是不同的,或者说不能用其中一个推导出另一个。在公钥密码算法的两个密钥中,一个是用于加密的密钥,它是可以公开的,称为公钥;另一个是用于解密的密钥,是保密的,称为私钥。公钥密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学的最重要的发明。RAS算法描述如下:1.公钥选择两个不同的大素数p和q(一般都为100位左右的十进制数字),n是二者的乘积;计算乘积:n=pq;计算欧拉函数值:φ(n)=(p-1)(q-1);随机选取正整数e,使其满足1eφ(n),且e和φ(n)互素;则将(n,e)作为公钥。2.私钥求出正整数d,使其满足ed≡1modφ(n),即(de-1)modφ(n)=0,由此推出:ed=tφ(n)+1(t是大于等于1的正整数);则将(p,q,d)作为私钥。3.加密算法RAS加密消息m时(这里假设m是以十进制表示的),首先将消息分成大小合适的数据分组,然后对分组分别进行加密。每个分组的大小应该比n小。设C为明文分组M加密后的密文,则加密公式为:C=M^emodn得到密文C。4.解密算法:对每一个密文分组进行如下运算M=C^dmodn得到明文M。如果窃密者获得了n,e和密文C,为了破解密文必须计算出私钥d,为此需要先分解n,为了提高破解难度,达到更高的安全性,一般商业应用要求n的长度不小于1024位,更重要的场合不小于2048位。使用RSATool2.14工具软件实现操作步骤如下:1.打开RSA-Tool工具软件窗口,如下图1所示:图12.在“NumberBase”组合框中选择进制为10,如下图2所示:图23.单击“Start”按钮,然后随意移动鼠标直到提示信息框出现,以获取一个随机数种子,如下图3所示:图34.在“KeySize(Bits)”编辑框中输入32,如下图4所示:图45.单击“Generate”按钮生成,如下图5所示:图56.复制“Prime(P)”编辑框中的内容到“PublicExp.(E)”编辑框,如下图6所示:图67.在“NumberBase”组合框中选择进制为16,如下图7所示:图78.记录下“Prime(P)”编辑框中的十六进制文本内容:BCF3。9.再次重复第2步。10.在“KeySize(Bits)”编辑框中输入你所希望的密钥位数,从32到4096,位数越多安全性也高,但运算速度越慢,一般选择1024位足够了;单击“Generate”按钮生成,如下图8,图9所示:图8图911.单击“Test”按钮测试,在“Messagetoencrypt”编辑框中随意输入一段文本,然后单击“Encrypt”按钮加密,再单击“Decrypt”按钮解密,看解密后的结果是否和所输入的一致,如果一致表示所生成的RSA密钥可用,否则需要重新生成,如图10所示:图1012.到此生成完成,“PrivateExp.(D)”编辑框中的内容为私钥如下图11,第7步所记录的内容为公钥(BCF3),“Modulus(N)”编辑框中的内容为公共模数如下图12,请将上述三段十六进制文本保存起来即可。图11图12使用代码实现:#includestdio.h#includestdlib.hunsignedlongprime1,prime2,ee;unsignedlong*kzojld(unsignedlongp,unsignedlongq)//扩展欧几里得算法求模逆{unsignedlongi=0,a=1,b=0,c=0,d=1,temp,mid,ni[2];mid=p;while(mid!=1){while(pq){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);}unsignedlongmomi(unsignedlonga,unsignedlongb,unsignedlongp)//模幂算法{unsignedlongc;c=1;if(ap)a=a%p;if(bp)b=b%(p-1);while(b!=0){while(b%2==0){b=b/2;a=(a*a)%p;}b=b-1;c=(a*c)%p;}return(c);}voidRSAjiami()//RSA加密函数{unsignedlongc1,c2;unsignedlongm,n,c;n=prime1*prime2;system(cls);printf(Pleaseinputthemessage:\n);scanf(%lu,&m);getchar();c=momi(m,ee,n);printf(Thecipheris:%lu,c);return;}voidRSAjiemi()//RSA解密函数{unsignedlongm1,m2,e,d,*ni;unsignedlongc,n,m,o;o=(prime1-1)*(prime2-1);n=prime1*prime2;system(cls);printf(Pleaseinputthecipher:\n);scanf(%lu,&c);getchar();ni=kzojld(ee,o);d=ni[0];m=momi(c,d,n);printf(Theoriginalmessageis:%lu,m);return;}voidmain(){unsignedlongm;charcho;printf(Pleaseinputthetwoprimeyouwanttouse:\n);printf(P=);scanf(%lu,&prime1);getchar();printf(Q=);scanf(%lu,&prime2);getchar();printf(E=);scanf(%lu,&ee);getchar();if(prime1prime2){m=prime1;prime1=prime2;prime2=m;}while(1){system(cls);printf(\t*******RSA密码系统*******\n);printf(Pleaseselectwhatdoyouwanttodo:\n);printf(1.Encrpt.\n);printf(2.Decrpt.\n);printf(3.Exit.\n);printf(Yourchoice:);scanf(%c,&cho);getchar();switch(cho){case'1':RSAjiami();break;case'2':RSAjiemi();break;case'3':exit(0);default:printf(Errorinput.\n);break;}getchar();}}将以上代码复制到实验环境C++软件中。算法结果分析如下:1.主界面初始化如下图1所示:图12.设置密钥,输入两个素数p和q,还有e的值,如下图2所示:图23.对明文加密,n=pq=4087,输入公钥(e,n):17,4087如下图3,并回车得到图4:图3图44.选择1并回车对明文加密,输入明文M=1234,得到密文C=2793,如下图5所示:图55.在步骤3选择2回车对密文C=2793进行解密,得到明文M=1234,如下图6所示:RSA的安全性分析:理论上,RSA的安全性取决于因式分解模数N的困难性。从严格的技术角度上来说这是不正确的,在数学上至今还未证明分解模数就是攻击RSA的最佳方法,也未证明分解大整数就是NP问题(表示那些能在多项式时间内利用“不确定性图灵机可以求解的问题)。事实情况是,大整数因子分解问题过去数百年来一直是令数学家头疼而未能有效解决的世界性难题。人们设想了一些非因子分解的途径来攻击RSA体制,但这些方法都不比分解n来得容易。因此,严格地说,RSA的安全性基于求解其单向函数的逆的困难性。RSA单向函数求逆的安全性没有真正因式分解模数的安全性高,而且目前人们也无法证明这两者等价。许多研究人员都试图改进RSA体制使它的安全性等价于因式分解模数。实验内容:(写出实验步骤及实验结果或数据,不够可写在左边:前页反面)实验中出现的问题及解决方法:1.问题:一开始不理解RSA算法的原理。解决方法:多看几遍书,网上查阅相关资料。2.问题:对RSA工具软件的使用不够熟悉。解决方法:多操作几遍,慢慢摸索。3.问题:代码看不懂,对运行出来的不理解是怎么回事。解决方法:查阅相关资料,多运行几遍。实验结论:通过本次对RSA算法的学习还有对RAS工具软件的操作使用,明白了该算法加密解密的原理,以及他的安全性问题和缺点。虽然RSA算法可靠性较高,但是还是有一些缺陷,就是运算量太大,速度太慢,适合加密比较短的明文。RSA方法既可用于保密,也可用于签名和认证。教师评语:得分:

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功