应用密码学报告文档格式.docx
《应用密码学报告文档格式.docx》由会员分享,可在线阅读,更多相关《应用密码学报告文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
尽管如此,只有一些RSA算法的变种[来源请求]被证明为其安全性依赖于因数分解。
假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。
但找到这样的算法的可能性是非常小的。
今天只有短的RSA钥匙才可能被强力方式解破。
到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。
1983年麻省理工学院在美国为RSA算法申请了专利。
这个专利2000年9月21日失效。
由于该算法在申请专利前就已经被发表了,在世界上大多数其它地区这个专利权不被承认。
2.2RSA算法原理
RSA作为公钥密码体制,利用了单向陷门函数的原理,其算法的详细原理如下:
算法描述:
第一:
密钥的生成
选择两个互异的大素数p,q,计算n=pq,ф(n)=(p-1)(q-1),其中(n)是欧拉函数:
选择一个随机整数e(0<
e<
ф(n)),满足gcd(e,ф(n))=1.计算d=e-1modф(n)(保密).确定:
公钥KU={e,n},私钥KR={d,p,q},或KR={d,n}.
第二:
加密
已知:
明文M<
n(因为所有明文和密文空间均为Zn,即在0~n-1的范围内.实际处理时对于M>
=n的情形,则需要对大报文进行分组,确保每一个分组满足该条件)和公钥KU={e,n}
计算密文:
C=Memodn
第三:
解密
密文C和私钥KR={d,n}
计算明文:
M=Cdmodn
2.3RSA算法安全性分析
在公布RSA算法之后,在使用RSA密码体制和分析RSA算法发现了一系列的算法本身脆弱性及其存在的问题。
(1)RSA公钥密码体制在加密或解密变化中涉及大量的数值计算,其加密和解密的运算时间比较长,这比数据加密标准DES的计算量开销大,在一定程度上限制了它的应用范围,以致于实际使用RSA密码体制无法用软件产品,必须用超大规模集成电路的硬件产品。
(2)虽然提高N=P*Q的位数会大大提高RSA密码体制的安全性,但其计算量呈指数增长,以致使其实现的难度增大,实用性降低。
(3)RSA公钥密码体制的算法完整性(指密钥控制加密或解密变换的唯一性)和安全性(指密码算法除密钥本身外,不应该存在其它可破译密码体制的可能性)沿有等进一步完善。
(4)RSA算法面临着数学方法的进步和计算机技术飞跃发展带来的破译密码能力日趋增强的严重挑战。
因子分解问题有了长跑的发展,1995年人类成功地分解了128位十进制数RSA密码算法,破译512位长的RSA指日可待。
尽管如此,自1978年RSA算法公布以来,公开密钥密码已从理论研究进入实际应用研究阶段。
RSA公开密钥密码算法在信息交换过程中使用比较广泛,安全性比较高。
以当前的计算机水平,如选择1024位长的密钥(相当于300位十进制数字)就认为是无法攻破的。
2.4RSA算法应用
主要是用于保护数据的机密性
RSA应用举例:
为了对字母表中的第M个字母加密,加密算法为C=Md(modn),第C个字母即为加密后的字母。
对应的解密算法为M=Cd(modn),下面以一个简单的例子进行计算。
1、设p=5,q=7。
2、所以n=pq=35,z=(5-1)(7-1)=24。
3、选择e=5(因为5与24互质)。
4、选择d=29(ed-1=144,可以被24整除)。
5、所以公开密钥为(35,5)私有密钥为(35,29)。
如果被加密的是26个字母中的第十二个字母L,则它的密文为:
C=125(mod35)=17
第17个字母为Q,解密得到明文为:
M1729(mod35)=12通过以上计算可以看出,当两个互质数p和q取的值足够大时,RSA的加密是非常安全的。
3.RSA算法实现
3.1RSA算法的直接实现
3.2基于API函数实现RSA算法
4RSA算法应用编程
4.1数字签名系统设计
数字签名流程图:
生成公钥私钥
NO判断是否已经
存在公钥
YES
失败提示信息
创建公钥路径
RSA数字签名
浏览明文文件
是否选择明文文件
NO
提示选择文件
YES
生成数字摘要
浏览密钥文件
NO是否选择密钥文件
请检查确认明文数字摘要已经生成
生成数字签名
验证签名流程图:
验证签名
NO是否选择明文文件
浏览签名文件
NO公钥是否存在
提示确认
读取公钥文件
读取签名文件
NO判断签名文件摘要
提示身份失败是否等于明文摘要
确认身份
分析:
usingSystem.Security.Cryptography;
命名空间加密与解密,包含于加密签名相关的类。
命名空间提供加密服务,包括安全的数据编码和解码,以及许多其他操作,例如散列法、随机数字生成和消息身份验证。
usingSystem.Runtime.Serialization.Formatters.Binary;
是序列化,又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。
其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。
命名空间包含BinaryFormatter类,该类可用于以二进制格式将对象序列化和反序列化。
.NET框架提供了串行化的方式:
1、是使用BinaryFormatter进行串行化;
2、使用SoapFormatter进行串行化;
3、使用XmlSerializer进行串行化。
第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,而第二种将数据流格式化为XML存储;
第三种其实和第二种差不多也是XML的格式存储,只不过比第二种的XML格式要简化很多(去掉了SOAP特有的额外信息)。
引用命名空间,利用MD5哈希函数加密。
在RSAForm.cs[设计]中一旦选择了某个菜单,程序就开始执行相应的代码模块。
执行签名用的是序列化的函数。
4.2数字签名系统实现
实现步骤:
第一步:
双击RSA.sln,打开文件,在弹出的对话框中选择确定,在解决方案资源管理器中双击RSAForm.cs,然后右击,选择查看代码。
第二步:
单击启动调试按钮(或按F5)运行程序。
第三步:
在弹出的RSA数字签名对话框中选择“生成公钥和私钥”菜单,单击确定按钮,再次单击确定按钮。
单击“RSA数字签名”菜单,选择明文文件后的浏览按钮,在弹出的“打开”对话框中新建一个文本文档,单击打开按钮。
单击生成数字摘要按钮,单击确定。
单击私钥文件后的浏览按钮,在弹出的对话框中选择prvatekey.dat,单击打开按钮,单击数字签名按钮,单击确定。
4.3数字签名系统测试
步骤:
单击“验证签名”菜单,单击“明文文件”后面的浏览按钮,在打开对话框中选择文本文档,单击打开按钮,单击“生成数字摘要”,单击确定。
单击“签名文件”后面的浏览按钮,在弹出的对话框中选择digitalsign.sign,单击打开按钮。
单击单击“公钥文件”后面的浏览按钮,在弹出的对话框中选择publickey.dat,单击打开按钮。
单击“验证身份”按钮,单击确定。
5总结
RSA公开密钥密码算法在信息交换过程中使用比较广泛、安全性比较高.在使用RSA加密时,必须选择足够长的密钥,对于当前的计算机水平,一般认为要选择1024位长的密钥(相当于约300位十进制数字)就可认为是无法攻破的.RSA公开密钥密码算法即可用于加密,又可用于签名.并为用户的公开密钥签发公钥证书、发放证书、管理证书等提高了服务质量.所以,RSA公开密钥密码在当今的信息交换过程中呈现出越来越重要的作用。
6.实现体会
算法分析对什么都不懂的我们来说相当困难,对函数和类等都很陌生,但是在同学的指导和耐心帮助下看懂了一些程序,知道了几个函数的作用以及实现过程,学习是一个漫长的过程,需要平时一点一滴的积累,临时抱佛脚还是比较不靠谱的,踏踏实实很重要。
代码附录:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.IO;
namespaceRSA
{
publicpartialclassRSAForm:
Form
{
RSACryptoServiceProvider_myRSA;
//byte[]encryptedData;
//byte[]decryptedData;
byte[]digitalsummary;
byte[]Hashbyte;
RSAParametersrsapara=newRSAParameters();
publicRSAForm()
InitializeComponent();
}
privatevoidRSAForm_Load(objectsender,EventArgse)
//初始化RSA的标准参数。
pnlSign.Visible=false;
pnlValidate.Visible=false;
//创建密钥文件
///<
summary>
///
/summary>
paramname="
path"
>
<
/param>
Mytype"
public,private<
returns>
/returns>
publicboolCreateKey(stringpublic