ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:592.07KB ,
资源ID:7504703      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7504703.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于RSA算法的数字签名系统.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于RSA算法的数字签名系统.docx

1、基于RSA算法的数字签名系统 基于RSA算法的数字签名系统2013年3月目 录第一章 概述 11.1课题背景 11.2数字签名及其应用 21.2.1数字签名概述 21.2.2数字签名的应用 31.3 课题内容 3第二章 数字签名软件的技术支撑 42.1 RSA加密算法 42.1.1 公钥和私钥的产生 52.1.2 加密消息 52.1.3 解密消息 52.1.4 安全 62.1.5 实现细节 62.2 数字签名原理 72.3 散列函数 82.3.1散列函数的性质 82.3.2 散列函数的应用 92.3.3 MD5算法 102.3.4 SHA-1算法 112.4 C#和.NET 12第三章 系统的

2、分析与设计 133.1需求分析 133.2 总体设计 133.3 功能模块的划分 153.4 各功能模块的介绍 16第四章 系统的实现 184.1 RSA加密算法的实现 184.1.1 公私密钥的生成 194.1.2 使用私钥加密 204.1.3 使用公钥解密 214.1.4 其他 214.2 散列函数 214.3 数字签名的实现 224.3.1 设计思想 224.3.2 系统实现 244.4 本章小结 33结束语 34一 前言1.1需求随着Internet和计算机网络技术的蓬勃发展,连通全世界的电子信息通道已经形成,应用Internet网开展电子商务业务也开始具备实用的条件,电子商务获得长足

3、发展的时机已经成熟。专家认为,作为21世纪重要经济增长点的电子商务,其作用不亚于200年前的工业革命。随着世界经济一体化的发展,资金流动越来越快,市场变化也越来越快,各国间经济依存关系更加紧密,发展电子商务的重要性也日益突出。而且凭借其在增加贸易机会、降低贸易成本、简化贸易流程、提高贸易效率等方面的优势,电子商务也越来越得到全球各个国家的重视和支持。众所周知,在Internet上的电子商务交易过程中,最核心和最关键的问题就是交易的安全性。电子商务主要的安全要素包括:(1) 有效性,保证电子形式的贸易信息的有效性是开展电子商务的前提;(2) 机密性,电子商务建立在一个较为开放的网络环境上,维护商

4、业机密是其全面推广应用的重要保障;(3) 完整性,由于数据输入时的意外差错或欺诈行为,可能导致贸易各方信息的差异。此外,数据传输过程中信息的丢失、信息重复或信息传送的次序差异也会导致贸易各方信息的不同。贸易各方信息的完整性将影响到贸易各方的交易和经营策略,保持贸易各方信息的完整性是EC(Eletronic Commerce 电子商务)应用的基础;(4) 可靠性/不可抵赖性/鉴别,在无纸化的EC方式下,通过手写签名和印章进行贸易方的鉴别是不可能的。因此,要在交易信息的传输过程中为参与交易的个人、企业或国家提供可靠的标识;(5) 审查能力,根据机密性和完整性的要求,应对数据审查的结果进行记录。所以

5、为了保证电子商务的健康快速发展,上述的安全性必须得到满足。然而,随着网络的复杂性,网络安全面临着诸多的威胁,如破坏信息的完整性、冒充、抵赖等。这对电子商务的发展也带了许多不安全的因素。因此,必须有一个保密完善的机制运用在电子商务中,才可能保证电子商务的安全。而数字签名便是一个在电子商务交易中维护交易安全的工具。1.2数字签名及其应用1.2.1数字签名概述数字签名是在公钥加密系统的基础上建立起来的,这里首先讲述一下公钥密码的原理:公钥密码算法使用两个密钥,使用其中一个密钥(称为加密密钥)用于加密,另外一个密钥(称为解密密钥)用于解密。公钥密码算法具有如下特征:(1)加密密钥与解密密钥是本质上不同

6、的,也就是说如果仅仅知道密码算法和加密密钥,而要确定解密密钥,在计算上不可行的;(2)大多数公钥密码算法的加密密钥与解密密钥具有互换的性质。如RSA算法,密钥对中的一个用于加密,另外一个就用于解密。数字签名过程一般对于数据摘要信息进行处理,所谓数据摘要就是散列函数对消息处理产生的散列值,也称其为消息的散列值。摘要信息在数字签名中应用过程可以概述为:首先使用某种散列算法,对要发送的数据进行处理,生成数据摘要信息;然后采用公钥密码算法,用私钥加密数据摘要信息。加密后的数据摘要信息就相当于用户的签名,类似于现实生活中的签名和印章。接收方可以对接收到的签名结果进行验证,以判断签名的有效性。数字签名在具

7、体实施时,首先发送方对信息施以数学变换,所得到的信息与源信息唯一地对应;在接收方进行逆变换,得到原始信息。只要数学变换方法优良,变换后的信息在传输中就具有很强的安全性,很难被破译、篡改。这个发送方的变换过程就是签名,通常是一种加密措施;对应的逆变换过程就是对签名的认证,通常是一种解密措施。数字签名与传统签字或印章有根本不同,数字签名的基础是公钥密码学,通过数学的手段来达到传统签字的功能。简单地说,在公钥密码体制中,仅仅签名者自己掌握私钥,而其对应的公钥是公开的,那么签名者用自己的私钥变换数据(加密),其他人就可以利用签名者的公钥来逆变换数据(解密),因为利用其他任何公钥都无法正确逆变换出该私钥

8、变换后的数据,从而就可以鉴别该数据是谁进行的变换处理,亦即是谁的签名。数字签名具有许多传统签名所不具备的优点,如签名因消息而异,同一个人对不同的消息,其签名结果两者是一个混合的不可分割的整体等。所以,数字签名比传统签名更具可靠性。由上述介绍可知,一个签名体制一般包括两个部分:一个是发送方的签名部分,对消息M签名,可以记作S=Sig(K,M),签字算法使用的密钥是秘密的,即是签字者的私钥。二是接受方的认证部分,对签名S的验证可以记作Ver(M,S,K)=真,假,认证算法使用的密钥是发送方(即签名者)的公钥。1.2.2数字签名的应用数字签名机制作为保障网络信息安全的手段之一,可以解决伪造、抵赖、冒

9、充和篡改问题。数学签名的目的之一,就是在网络环境中代替传统的手工签字与印章,那么数字签名可以抵御那些网络攻击?(1)防冒充(伪造)。其他人不能伪造对消息的签名,因为私有密钥只有签名者自己知道,所以其他人不可能构造出正确的签名结果数据。显然自己的私有密钥是一定要保存好的。(2)可鉴别身份。由于传统的手工签字一般是双方直接见面的,身份自可一清二楚;在网络环境中,接收方必须能够鉴别发送方所宣传的身份。即接收方使用发送方的公开密钥对签名报文对签名报文进行解密运算,如其结果为明文,则签名有效,证明对方身份是真实的。(3)防篡改(防破坏信息的完整性)。传统的手工签字,假如要签署一本200页的合同,是仅仅在

10、合同末尾签名呢?还是对每一页都签名?不然,对方会不会偷换其中几页?这些都是问题所在。而数字签名,签名与原有文件已经形成了一个混合的整体数据,不可能篡改,从而保证了数据的完整性。(4)防抵赖。前面讲了,数字签名可以鉴别身份,不可能冒充伪造,那么,只要保存好签名的报文,就好似保存了手工签署的合同文本,也就是保留了证据,签名者就无法抵赖。以上是签名者不能抵赖,那如果接收方确已收到对方的签名报文,却抵赖没有收到呢?要防接收方的抵赖,在数字签名体制中,要求接收方返回一个自己签名的表示收到的报文,给对方或者是第三者,或者引入第三方机制。如此操作,双方都不可抵赖。(5)机密性。有了机密性保证,截收攻击也就失

11、效了。手工签字的文件是不具备保密性的,文件一旦丢失,文件信息就极可能泄露。数字签名可以加密要签名的信息,一串密文是不可理解的。综上所述,对于之前提到的电子商务的安全性因素,数字签名都可以得到保证。利用数字签名,电子商务可以安全地完成企业之间、企业与消费者之间在网上的商业交换活动。网上证券也能安全地完成股票交易、网上银行证券转账业务等。数字签名为这些业务提供了身份鉴别、防抵赖、防篡改等保证,是网上业务可以顺利安全地进行。1.3内容数字签名是当前网络安全领域的研究热点。特别是在电子商务、电子银行、电子政务等应用领域,数字签名是其关键技术之一,在社会生活的各个领域也有极其广阔的应用前景。密码技术是信

12、息安全的核心技术。公钥密码在信息安全中担负起密钥协商、数字签名、消息认证等重要角色,已成为最核心的密码。要求在了解了数字签名技术的基本功能、原理的基础上,设计并实现基于RSA的数字签名算法。利用RSA算法实现数字签名软件,要求软件可用性强,且操作简便。它应具有的功能如(1)对文件所生成的签名进行认证,即提供身份认证;(2)防止签名方的抵赖,保证签名的不可否认性;(3)防止签名文件的篡改,即保证数据的完整性。本系统将从RSA算法和数字签名的原理开始,详细叙述RSA数字签名的完整过程,以及软件的对改系统的具体实现。分别是系统的技术支撑,系统的分析与设计以及系统实现。第二章 数字签名软件的技术支撑本

13、章主要介绍系统开发过程中所需要的软件开发技术和算法原理。主要RSA算法原理,数字签名原理,C# 编程技术,以及Visual Studio中的.NET平台。2.1 RSA加密算法RSA加密算法是一种非对称加密算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德李维斯特(Ron Rivest)、阿迪萨莫尔(Adi Shamir)和伦纳德阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。1973年,在英国政府通讯总部工作的数学家克利福德柯克斯(Clifford Cocks)在一个内部文件中提出了

14、一个相应的算法,但他的发现被列入机密,一直到1997年才被发表。对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的 算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到 2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算技术和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。1983年麻省理工学院在美国为RSA算法申请了专利。

15、这个专利2000年9月21日失效。由于该算法在申请专利前就已经被发表了,在世界上大多数其它地区这个专利权不被承认。2.1.1 公钥和私钥的产生假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:(1) 随意选择两个大的质数p和q,p不等于q,计算N=pq。(2) 根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)(3) 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)(4) 用以下这个公式计算d:d e 1 (mod (p-1)(q-1)(5) 将p和q的记录销毁。(N,e)是公钥,(N,d)是私钥。

16、(N,d)是秘密的。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。2.1.2 加密消息假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c:计算c并不复杂。Bob算出c后就可以将它传递给Alice。2.1.3 解密消息Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转

17、换为n:得到n后,她可以将原来的信息m重新复原。解码的原理是以及ed 1 (mod p-1)和ed 1 (mod q-1)。由费马小定理可证明(因为p和q是质数)和 这说明(因为p和q是不同的质数,所以p和q互质)2.1.4 安全假设偷听者乙获得了甲的公钥N和e以及丙的加密消息c,但她无法直接获得甲的密钥d。要获得d,最简单的方法是将N分解为p和q,这样她可以得到同余方程d e 1 (mod (p-1)(q-1)并解出d,然后代入解密公式导出n(破密)。但至今为止还没有人找到一个多项式时间的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在(见因数分解)。至今为止也没有人能够证

18、明对N进行因数分解是唯一的从c导出n的方法,但今天还没有找到比它更简单的方法。(至少没有公开的方法。)因此今天一般认为只要N足够大,那么黑客就没有办法了。假如N的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999年,数百台电脑合作分解了一个512位长的N。今天对N的要求是它至少要1024位长。1994年彼得秀尔(Peter Shor)证明一台量子计算机可以在多项式时间内进行因数分解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔的算法可以淘汰RSA和相关的衍生算法(即依赖于分解大整数困难性的加密算法)。假如有人能够找到一种有效的分解大整数的算法的话

19、,或者假如量子计算机可行的话,那么在解密和制造更长的钥匙之间就会展开一场竞争。但从原理上来说RSA在这种情况下是不可靠的。2.1.5 实现细节1.密钥生成首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。除此之外这样找到的p和q还要满足一定的要求,首先它们不能太靠近,此外p-1或q-1的因子不能太小,否则的话N也可以被很快地分解。此外寻找质数的算法不能给攻击者任何信息,这些质数是怎样找到的,尤其产生随机数的软件必须非常好。要求是随机和不可预测。这两个要求并不相同。一个随

20、机过程可能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系列的话,那么它就已经不可靠了。比如有一些非常好的随机数算法,但它们都已经被发表,因此它们不能被使用,因为假如一个攻击者可以猜出p和q一半的位的话,那么他们就已经可以轻而易举地推算出另一半。此外密钥d必须足够大,1990年有人证明假如p大于q而小于2q(这是一个很经常的情况)而d N1/4/3,那么从N and e可以很有效地推算出d。此外e = 2永远不应该被使用。 2.速度比起DES和其它对称算法来说,RSA要慢得多。实际上Bob一般使用一种对称算法来加密他的信息,然后用RSA来加密他的比较短的对称密码,然后

21、将用RSA加密的对称密码和用对称算法加密的消息送给Alice。这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,因为否则的话可以越过RSA来直接攻击对称密码。3.密钥分配和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡一个从中取代的攻击。假设蛋蛋交给阿庆一个公钥,并使阿 庆相信这是小Q的公钥,并且她可以截下小Q和阿庆之间的信息传递,那么她可以将她自己的公钥传给阿庆,阿庆以为这是小Q的公钥。可以将所有阿庆传递给小Q 的消息截下来,将这个消息用她自己的密钥解密,读这个消息,然后将这个消息再用小Q的公钥加密后传给小Q。理论上小Q和阿庆都不会发现蛋蛋

22、在偷听他们的消 息。今天人们一般用数字认证来防止这样的攻击。2.2 数字签名原理 用RSA算法做数字签名,总的来说,就是签名者用私钥参数d加密,也就是签名;验证者用签字者的公钥参数e解密来完成认证。下面简要描述数字签名和认证的过程。1、生成密钥为用户随机生成一对密钥:公钥(e,n)和私钥(d,n).2、签名过程(1) 计算消息的散列值H(M).(2) 用私钥(d,n)加密散列值:s=(H(M) mod n,签名结果就是s.(3) 发送消息和签名(M,s).3、认证过程(1) 取得发送方的公钥(e,n).(2) 解密签名s:h=smod n.(3) 计算消息的散列值H(M).(4) 比较,如果h

23、=H(M),表示签名有效;否则,签名无效。根据上面的过程,我们可以得到RSA数字签名的框图如图2-1:图 2-1 RSA数字签名框图2.3 散列函数散列函数(或散列算法,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。2.3.1散列函数的性质所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是

24、不相同的。这个特性是散列函数具有确定性的 结果。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的。但也可能不同,这种情况称为“散列碰撞”, 这通常是两个不同长度的散列值,刻意计算出相同的输出值。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不 同的散列值。典型的散列函数都有无限定义域,比如任意长度的字节字符串,和有限的值域,比如固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域间的一一对应。一一对应的散列函数也称为排列。可逆性可以通过使用一系列的对于输入值的可逆“混合”运算而得到

25、。2.3.2 散列函数的应用由于散列函数的应用的多样性,它们经常是专为某一应用而设计的。例如,加密散列函数假设存在一个要找到具有相同散列值的原始输入的敌人。一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。为加密散列为目的设计的函数,如MD5,被广泛的用作检验散列函数。这样软件下载的时候,就会对照验证代码之后才下载正确的文件部分。此代码有可能因为环境因素的变化,如机器配置或者IP地址的改变而有变动。以保证源文件的安全性。错误监测和修复函数主要用于辨别数据被随机的过程所扰乱的事例。当散列函数被用于校验和的时候,可以用相对较短的

26、散列值来验证任意长度的数据是否被更改过。1.加密一个典型的加密单向函数是“非对称”的,并且由一个高效的散列函数构成;一个典型的加密暗门函数是“对称”的,并且由一个高效的随机函数构成。2.散列表散列表是散列函数的一个主要应用,使用散列表能够快速的按照关键字查找数据记录。(注意:关键字不是像在加密中所使用的那样是秘密的,但它们都是用来“解锁”或者访问数据的。)例如,在英语字典中的关键字是英文单词,和它们相关的记录包含这些单词的定义。在这种情况下,散列函数必须把按照字母顺序排列的字符串映射到为散列表的内部数组所创建的索引上。散列表散列函数的几乎不可能/不切实际的理想是把每个关键字映射到唯一的索引上(

27、参考完美散列),因为这样能够保证直接访问表中的每一个数据。一个好的散列函数(包括大多数加密散列函数)具有均匀的真正随机输出,因而平均只需要一两次探测(依赖于装填因子)就能找到目标。同样重要的是,随机散列函数不太会出现非常高的冲突率。但是,少量的可以估计的冲突在实际状况下是不可避免的(参考生日悖论或鸽洞原理)。在很多情况下,heuristic散列函数所产生的冲突比随机散列函数少的多。Heuristic函数利用了相似关键字的相似性。例如,可以设计一个heuristic函数使得像FILE0000.CHK,FILE0001.CHK,FILE0002.CHK,等等这样的文件名映射到表的连续指针上,也就是

28、说这样的串行不会发生冲突。相比之下,对于一组好的关键字性能出色的随机散列函数,对于一组坏的关键字经常性能很差,这种坏的关键字会自然产生而不仅仅在攻击中才出现。性能不佳的散列函数表意味着查找操作会退化为费时的线性搜索。3.错误校正使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。 在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。 这就叫做冗余校验。对于错误校正,假设相似扰动的分布接近最小(a distributio

29、n of likely perturbations is assumed at least approximately)。 对于一个信息串的微扰可以被分为两类,大的(不可能的)错误和小的(可能的)错误。我们对于第二类错误重新定义如下,假如给定 H(x) 和 x+s,那么只要s足够小,我们就能有效的计算出x。那样的散列函数被称作错误校正编码。这些错误校正编码有两个重要的分类:循环冗余校验和里德所罗门码。4.语音识别对与像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数例如MD5,但是这种方案会对时间平移、CD读取错 误、不同的音频压缩算法或者音量调整的实现机制等情

30、况非常敏感。使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的 音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。那些并不紧随IT工业潮流的人往往能反其道而行之,对于那些微小差异足够鲁棒的散列函数确实存在。现存的绝大多数散列算法都是不够鲁棒的,但是有少数散列算法能够达到辨别从嘈杂房间里的扬声器里播放出来的音乐的鲁棒性。有一个实际的例子是Shazam1服务。用户可以用电话机拨打一个特定的号码,并将电话机的话筒靠近用于播放音乐的扬声器。该项服务会分析正在播放的音乐,并将它于存储在数据库中的已知的散列值进行比较。用户就能够收

31、到被识别的音乐的曲名(需要收取一定的费用)。2.3.3 MD5算法MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的散列算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是散列算法的基础原理,MD5的前身有MD2、MD3和MD4。1992年8月Ronald L. Rivest在向IETF提交了一份重要文件,描述了这种算法的原理,由于这种算法的公开性和安全性,在90年代被广泛使用在各种程序语言中,用以确保资料传递无误等。MD5由MD4、MD3、MD2改进而来,一度

32、主要增强算法复杂度和不可逆性。MD5一度被广泛应用于安全领域。但是由于MD5的弱点被不断发现以及计算机能力不断的提升,现在已经可以构造两个具有相同MD5的信息,使本算法不再适合当前的安全环境。目前,MD5计算广泛应用于错误检查。例如在一些BitTorrent下载中,软件通过计算MD5和检验下载到的碎片的完整性。MD5较老,散列长度通常为128位,随着计算机运算能力提高,找到“碰撞”是可能的。因此,在安全要求高的场合不使用MD5。2004年,王小云证明MD5数字签名算法可以产生碰撞。2007年,Marc Stevens,Arjen K. Lenstra和Benne de Weger进一步指出通过伪造软件签名,可重复性攻击MD5算法。研究者使用前缀碰撞法(chose

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1