版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、RSA算法的应用与实现【摘 要】RSA 算法是使用最广泛的一种非对称密码体制. 在对RSA 算法的原理、算法描述等进行研究的基础上,近一步研究了RSA 算法在数字签名、密钥交换等方面的应用. 最后在.NET平台中使用C#语言进行编程,实现RSA数字签名算法。【关键词】RSA算法;数字签名;加密;解密1 RSA简述随着IT技术迅猛的发展,各个行业的信息化、网络化的增强,信息的安全性越来越得到人们的重视。一个完整的、先进的信息系统无不考虑到信息安全技术的应用。RSA加密体制是一种公开的密码体制。RSA公匙密码体制是又R.L.Rivest,A.Shamir和L.Adelman于1978年提出的。RS
2、A算法完善,既可用于加密,又可用于签名,并为用户的公开密钥签发公钥证书、发放证书、管理证书等提高了服务质量,RSA公钥密码体制在世界许多地方已经成为事实上的标准。RSA是一个基于数论的非对称密码体制,是一种分组密码体制,是一种基于因子分解的指数函数作为单向陷门函数的公钥体制算法。它基础是数论的欧拉定理,素数检测,它的安全性是基于大数分解,后者在数学上是一个困难问题。2 RSA算法2.1 RSA算法描述RSA的安全性基于复杂性理论中的计算安全性,依赖于大整数分解这一NP难题。可靠性与所用密钥的长度有很大关系,假如有人找到一种很快的分解因子的算法,即从一个公钥中通过因数分解得到私钥,那么用RSA加
3、密的信息的可靠性肯定会极度下降。但由于其工作量巨大,按目前计算机的处理能力是不可能实现的。实践证明,在当前的技术和方法下,密钥不小于1024 bit的RSA算法仍然是安全的。这充分说明RSA系统具有良好的保密性能。因此,尽管先后出现了很多新的公钥体制算法,但RSA仍然在不同应用领域占据了重要的位置。随着计算机运算速度的提高以及因子分解算法的突破,RSA的密钥长度将越来越大,其软硬件实现速度将成为制约其使用的重要因素。RSA系统由以下几部分组成1:1)随机选取的在素数P和Q,还有N ,其中N=P*Q,P和Q保密,N公开。2)任取(n)=(P-1)*(Q-1),其中(n)表示比n小的素数的个数,任
4、取2=e=(n),且(e,(n)=1,e为加密密钥,公开其存在的问题。1)RSA公钥密码体制在加密或解密中涉及大量的数值计算,其加密和解密的运算时间比较长,以致于实际使用RSA密码体制无法应用到软件产品,必须用超大规模集成电路的硬件产品。2)虽然提高N位数会大大提高RSA密码体制的安全性,但其计算量呈指数增长,以致使其实现的难度增大,实用性降低。3)RSA公钥密码体制的算法完整性(指密钥控制加密或解密变换的唯一性)和安全性(指密码算法除密钥本身外,不应该存在其它可破译密码体制的可能性)沿有等进一步完善。4)RSA算法面临着数学方法的进步和计算机技术飞跃发展带来的破译密码能力日趋增强的严重挑战。
5、RSA公开密钥密码算法在信息交换过程中使用比较广泛,安全性比较高。以当前的计算机水平,如选择1024位长的密钥(相当于300位十进制数字)就认为是无法攻破的。3 基于RSA的数字签名23.1 RSA数字签名算法描述RSA是目前使用最为广泛、最著名的公开密钥系统,它是由麻省理工学院的三位学者Rivest、Shamir和Adleman于1978年提出的。RSA密码系统可以完成数据加密、数字签名以及密钥交换等功能,其安全性是建立在大素数因子分解困难问题上的3。设n=pq,p、q是两个大素数,消息空间和签名空间为P=A=Zn,定义K=(n,p,q,a,b)ln=pq,p,q为素数,ab=l(mod(n
6、)。值n和b公开的,p、q、a是保密的。对K=(n,p,q,a,b),签名及验证算法定义如下:签名算法:验证算法:如果B使用RSA解密规则Dk签一个消息x,那么B是能产生签名的唯一的人,这是因为Dk是保密的。验证算法使用RSA的加密规则Ek,因为Ek是公开的,保存在公开的信任机构服务器中,所以任何人能验证一个签名。3.2 RSA数字签名算法实现步骤3.2.1 签名算法(包括两步:消息摘要计算,RSA加密)1)消息摘要MD的计算:消息在签名前首先通过MD5计算,生成128位的消息摘要;MD5函数是一种单向散列函数,它将任意长度的消息压缩成128位的消息摘要。应用MD5的单向性(即给定散列值,计算
7、消息很难)和抗碰撞性(即给定消息M,要找到另一消息M并满足两者的散列值很难),可以实现信息的完整性检验。另外该函数的设计不基于任何假设和密码体制而直接构造,执行的速度快,是一种被广泛认可的单向散列算法。2)对MD作RSA加密算法:采用签名者的私钥加密消息摘要,得到加密后的字符串即数字签名;3.2.2 验证签名算法(RSA解密、对消息摘要计算和比较)验证签名算法包括两步:RSA解密得签名者的消息摘要,验证者对原消息计算摘要,比较两个消息摘要。验证签名的过程输入为消息,签名者的公钥,签名;输出为验证的结果,即是否是正确的签名。1)RSA解密:签名实际是加密的消息摘要,用以上所述的RSA解密方法采用
8、签名者的公钥对这个加密的消息摘要解密,解密的结果应为128位的消息摘要。2)消息摘要计算和比较:验证者对消息用MD5算法重新计算,得到验证者自己的消息摘要。验证者比较解密得到的消息摘要和自己的消息摘要,如果两者相同,则验证成功,可以确认消息的完整性及签名确实为签名者的;否则,验证失败,确认签名被冒充或是被篡改。3.3 RSA数字签名方案的弱点1)随着计算机速度的提高,以及集群计算技术的应用,RSA算法已经不足够安全,对RSA的破解也成为可能。RSA算法运行中所需要的密钥长度变得越来越大,使其计算量也猛增。经过实验得到,密钥长度为1024位至2048位是比较合理的,既可以保证系统的安全性,计算量
9、又可以接受。然而密钥长度的猛增,对RSA的应用带来严重的负面影响,使其应用范围越来越受到制约。2)任何人能通过对某一y计算x=Ek(y)来伪造一个随机消息x关于B的签名y,这是因为y=sigk(x);3)如果消息x1和x2的签名分别是y1和y2,则拥有x1、x2、y1、y2的任何人可伪造B关于消息x1x2的签名y1y2,这是因为sigk(x1x2)=sigk (x1) sigk (x2)modn。4)由于RSA算法每次只能对log2n比特长的消息进行签名,这就使消息签名变得繁琐。这就减缓了系统的运行速度,降低了签名效率。克服上述弱点的办法是对消息进行签名之前作杂凑变换,亦称杂凑函数计算。变换之
10、后再进行签名,降低了签名计算量,这样既能完成签名任务,又能保证签名效率。4 RSA数字签名算法实现本算法是在.NET平台中使用C#语言编写的面向对象的应用程序,命名空间是System.Security.Cryptography。需要实现的功能有以下几个:4.1 产生公钥和私钥public void button_creatKey_Click(object sender, EventArgs e)tryRSACryptoServiceProvider rsa=new RSACryptoServiceProvider();textBox_publicKey.Text=rsa.ToXmlString
11、(false);textBox_privateKey.Text=rsa.ToXmlString(true);catch(System.Exception ex)MessageBox.Show(“密钥创建”+ex.ToString();随机产生一个公钥,一个私钥,密钥是XML可扩展标记语言形式,XML是一套定义语义表激动额规则,这些标记将文档分成许多部件加以标识?它也是元标记语言,即定义了用于定义其他与特定领域有关的,与移动额,结构化的标记语言的语句语法?他是一种以简单文本格式存储数据的方式,这意味着他可以被任何计算机读取,此返回的是字符串?4.2 产生摘要private void button
12、_getHash_Click(object sender, EventArgs e)trybyte fileSource = Encoding.UTF8.GetBytes(sendFileString);HashAlgorithm MD5 = HashAlgorithm.Create(”MD5”);byte hashData = MD5.ComputeHash(fileSource);textBox_getHash.Text = BitConverter.ToString(hashData);catch(System.Exception ex)MessageBox.Show(“获取哈希值”+e
13、x.ToString();4.3 数字签名的验证private void button_ensureSign_Click(object sender, EventArgs e)tryRSACryptoServiceProvider rsa = new RSACryptoServiceProvider();rsa.FromXmlString(textBox_privateKey.Text);RSAPKCS1SignatureDeformatterrsadDeformatter=new RSAPKCS1SignatureDeformatter(rsa);rsadDeformatter.SetHas
14、hAlgorithm(“MD5”);string strSplit=textBox_receiveHash.Text.Split(-);byte receiveByteHash=new bytestrSplit.Length;for (int i = 0; i strSplit.Length; i+)receiveByteHashi=byte.Parse(strSpliti, System.Globalization.NumberStyles.AllowHexSpecifier);string strSignedSplit=textBox_signHash.Text.Split(-);byte
15、 signedByteHash=new bytestrSignedSplit.Length;for (int i = 0; i strSignedSplit.Length; i+)signedByteHashi=byte.Parse(strSignedSpliti, System.Globalization.NumberStyles.AllowHexSpecifier);if(rsadDeformatter.VerifySignature(receiveByteHash,signedByteHash)MessageBox.Show(”数字签名验证成功!”);elseMessageBox.Show(”数字签名验证失败!”);catch(Exception ex)throw ex;数字签名验证另一个实体的标识并保护数据的完整性,即当使用公钥系统对消息进行数字签名,发送方先向该消息应用哈希函数以创建消息的摘要?然后,发送方使用发送的私钥加密消息摘要以创建发送方的个人签名,因为此私钥唯一的标识该发送方,在收到消息和签名后,接受方使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江宇翔职业技术学院《公路工程定额原理与计价》2023-2024学年第一学期期末试卷
- 浙江工业职业技术学院《采购过程演练》2023-2024学年第一学期期末试卷
- 反谐振阻抗比较小的原因
- 中国传媒大学《计算机电子电路基础》2023-2024学年第一学期期末试卷
- 长治医学院《剧场品牌管理》2023-2024学年第一学期期末试卷
- 云南司法警官职业学院《体育-台球》2023-2024学年第一学期期末试卷
- 企业内部知识分享平台构建方案
- 保险行业数字营销模板
- 拿破仑历史名人人物介绍
- 中考誓师大会学生发言稿
- 2025年浙江省金华市统计局招聘2人历年高频重点提升(共500题)附带答案详解
- 员工职业素养与团队意识培训课件2
- 部编版三年级下册语文全册教案及全套导学案
- 2024年国家级森林公园资源承包经营合同范本3篇
- 对口升学《计算机应用基础》复习资料总汇(含答案)
- 迪士尼乐园总体规划
- 2024年江苏省苏州市中考数学试卷含答案
- 2024年世界职业院校技能大赛高职组“市政管线(道)数字化施工组”赛项考试题库
- 介绍蝴蝶兰课件
- 大学计算机基础(第2版) 课件 第1章 计算机概述
- 数字化年终述职报告
评论
0/150
提交评论