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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

哈希函数MD5.docx

1、哈希函数MD5一哈希函数简介 信息安全的核心技术是应用密码技术。密码技术的应用远不止局限于提供机密性服务,密码技术也提供数据完整性服务。密码学上的散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。Hash函数常用来构造数据的短“指纹”,消息的发送者使用所有的消息产生一个短“指纹”,并将该短“指纹”与消息一起传输给接收者。即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹是否改变,就能够检测数据的完整性。这是因为一旦数据在中途被破坏或改变,短指纹就不再正确。 散列函数是一个函数,它以一个变长的报文作为输入,并产生一个定长的散列码,有时也称为报文摘要,作

2、为函数的输出。散列函数最主要的作用是用于鉴别,鉴别在网络安全中起到举足轻重的地位。鉴别的目的有以下两个:第一,验证信息的发送者不是冒充的,同时发信息者也不能抵赖,此为信源识别;第二,验证信息完整性,在传递或存储过程中未被篡改,重放或延迟等。二哈希函数特点 密码学哈希函数(cryptography hash function,简称为哈希函数)在现代密码学中起着重要的作用,主要用于数据完整性认证和消息认证。哈希函数的基本思想是对数据进行运算得到一个摘要,运算过程满足: 压缩性:任意长度的数据,算出的摘要长度都固定。 容易计算:从原数据容易计算出摘要。 抗修改性:对原数据进行任何改动,哪怕只修改1个

3、字节,所得到的摘要都有很大区别。 弱抗碰撞:已知原数据和其摘要,想找到一个具有相同摘要的数据(即伪造数据),在计算上是困难的。 强抗碰撞:想找到两个不同的数据,使它们具有相同的摘要,在计算上是困难的。三针对哈希函数的攻击 对散列函数的攻击方法主要有两种: 穷举攻击:它可以用于对任何类型的散列函数的攻击,最典型的方式就是所谓的“生日攻击”。采用生日攻击的攻击者将产生许多明文消息,然后计算这些明文消息的摘要,进行比较。 利用散列函数的代数结构:攻击其函数的弱性质。通常的有中间相遇攻击、修正分组攻击和差分分析攻击等。四MD5哈希函数 1990年R.L.Rivest提出哈希函数MD4。MD4不是建立在

4、其他密码系统和假设之上,而是一种直接构造法。所以计算速度快,特别适合32位计算机软件实现,对于长的信息签名很实用。MD5是MD4的改进版,它比MD4更复杂,但是设计思想相似并且也产生了128位摘要。五MD5哈希算法流程 对于任意长度的明文,MD5首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。 对于每个明文分组的摘要生成过程如下: (1)将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。 (2)申请4个32位的链接变量,记为A、B、C、D。 (3)子明文分组与链接变量进行第1轮运算。 (4)子明文分组与链接变量进行第2轮运算。 (5)子明文分组与

5、链接变量进行第3轮运算。 (6)子明文分组与链接变量进行第4轮运算。 (7)链接变量与初始链接变量进行求和运算。 (8)链接变量作为下一个明文分组的输入重复进行以上操作。 (9)最后,4个链接变量里面的数据就是MD5摘要。六MD5分组过程 对于任意长度的明文,MD5可以产生128位的摘要。任意长度的明文首先需要添加位数,使明文总长度为448(mod512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。然后将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。当明文长度大于2的64次方时,仅仅使用低64位比特填充,附

6、加到最后一个分组的末尾。 经过添加处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用Y0,Y1,YL-1表示这些明文分组。对于每一个明文分组,都要重复反复的处理。七MD5子明文分组和链接变量 对于512位的明文分组,MD5将其再分成16份子明文分组(sub-block),每份子明文分组为32位,我们使用Mk(k= 0, 1,15)来表示这16份子明文分组。这里的概念要弄清楚,一个添加位后的明文可以划分为L份明文分组,而一个明文分组又可以划分为16份子明文分组。 MD5有4轮非常相似的运算,每一轮包括16个类似的步骤,每一个步骤的

7、数据处理都是针对4个32位记录单元中的数据进行的。这4个链接变量的初始值以16进位制表示如下(低字节优先)A:0x01234567,B:0x89ABCDEF,C:0xFEDCBA98,D:0x76543210,这时A、B、C、D四个链接变量的值为:A=0x67452301,B=0xEFCDAB89,C=0x98BADCFE,D=0x10325476。链接变量用于存放中间散列函数值,经过4轮运算(共64个步骤)之后,链接变量A,B,C,D中的128位即为中间散列函数值。中间散列函数值作为下一个明文分组的输入继续使用,当所有的明文分组都处理完毕后,链接变量A,B,C,D中的128位数据就是摘要。八

8、MD5第1轮运算 MD5有4轮非常相似的运算,每一轮包括16个类似的步骤,当第1轮运算中的第1步骤开始处理时,A、B、C、D四个链接变量中的值先赋值到另外4个记录单元A,B,C,D中。这4个值将保留,用于在第4轮的最后一个步骤完成之后与A,B,C,D进行求和操作。 第1轮的操作程序为FF(a,b,c,d,Mk,S,Ti) 它表示的逻辑为:ab+(a+F(b,c,d)+Mk+Ti)S) 其中,a、b、c、d为32位的变量,Mk表示相应的子明文分组,对于4轮共64步的MD5算法中Ti是64个不同的固定的数值,S为循环左移的位数,F(x,y,z)是第一轮的逻辑函数,最后将结果存放在链接变量A中,固定

9、值Ti,循环左移位数和逻辑函数将在以后讨论。 第1轮16步的固定值Ti的取值。T1=D76AA478 T5=F57C0FAF T9=698098D8 T13=6B901122 T2=E8C7B756 T6=4787C62A T10=8B44F7AF T14=FD987193 T3=242070DB T7=A8304613 T11=FFFF5BB1 T15=A679438E T4=C1BDCEEE T8=FD469501 T12=895CD7BE T16=49B40821 MD5规定,第一轮的16步的操作程序。MD5第1轮16步运算步骤数 运算 1 FF(A,B,C,D,M0,7,0xD76AA

10、478) 2 FF(D,A,B,C,M1,12,0xE8C7B756) 3 FF(C,D,A,B,M2,17,0x242070DB) 4 FF(B,C,D,A,M3,22,0xC1BDCEEE) 5 FF(A,B,C,D,M4,7,0xF57C0FAF) 6 FF(D,A,B,C,M5,12,0x4787C62A) 7 FF(C,D,A,B,M6,17,0xA8304613) 8 FF(B,C,D,A,M7,22,0xFD469501) 9 FF(A,B,C,D,M8,7,0x698098D8) 10 FF(D,A,B,C,M9,12,0x8B44F7AF) 11 FF(C,D,A,B,M10

11、,17,0xFFFF5BB1) 12 FF(B,C,D,A,M11,22,0x895CD7BE) 13 FF(A,B,C,D,M12,7,0x6B901122) 14 FF(D,A,B,C,M13,12,0xFD987193) 15 FF(C,D,A,B,M14,17,0xA6794383) 16 FF(B,C,D,A,M15,22,0x49B40821) MD5算法中,第一轮的逻辑函数为F(x,y,z)= ( x & y )|( x & z ),MD5的算法比较复杂,每一轮包括16步类似的运算,下面我们以第1轮的第1步和第2步为例来展示每一步的运算。 例如,子明文分组M0 = 0x43686

12、96E,第1轮的操作程序为FF(a,b,c,d,Mk,S,Ti),它表示的逻辑为: ab+(a+F(b,c,d)+Mk+Ti)S) 第一轮的逻辑函数F(x,y,z)= ( x & y )|( x & z ),由表4-1-2知,第1轮第1步的运算为:FF(A,B,C,D,M0,7,0xD76AA478),注意到这里的0xD76AA478就是T1的值,变量a、b、c、d分别代表链接变量A、B、C、D。首先,b、c、d要经过逻辑函数F,即: 然后得到的值要与A、M0和T1相加得0x67452301+0x98BADCFE+0x6E696843+0xD76AA478 = 0x45D40CBA,0x45D

13、40CBA要循环左移7位,得到结果:0xEA065D22,0xEA065D22与b相加得:0xEA065D22 + 0xEFCDAB89 = 0xD9D408AB,最后,将这个结果赋值给a,第1步的计算就完成了,只有链接变量A发生了改变,这时链接标量的值为: A = 0xD9D408AB B = 0x89ABCDEF C = 0xFEDCBA98 D = 0x76543210 经过16个步骤之后,MD5的第一轮运算就完成了,链接变量A、B、C、D将携带第1轮运算后的数值进入第二轮运算。九MD5后3轮运算 MD5第2轮、第3轮和第4轮算运与第一轮运算相似,这里给出相应的操作程序、固定数T、每一步

14、运算和逻辑函数。 第2轮的逻辑函数为:G( x, y, z ) = ( x & z )|( y & z )。 第3轮的逻辑函数为:H( x, y, z ) = xyz。 第4轮的逻辑函数为:I( x, y, z ) = y( x & z )。 第2轮的操作程序为:GG(A,B,C,D,Mk,S,Ti)。 它表示的逻辑为:ab+(a+G(B,C,D)+Mk+Ti)S)。 第3轮的操作程序为:HH(A,B,C,D,Mk,S,Ti)。 它表示的逻辑为:ab+(a+H(B,C,D)+Mk+Ti)S)。 第4轮的操作程序为:II(A,B,C,D,Mk,S,Ti)。 它表示的逻辑为:ab+(a+I(B,C

15、,D)+Mk+Ti)S)。 后3轮的每个步骤的运算如表4-1-3所示。表4-1-3 MD5后3轮16步运算第二轮 1 GG(A,B,C,D,M1,5,0xF61E2562) 2 GG(D,A,B,C,M6,9,0xC040B340) 3 GG(C,D,A,B,M11,14,0x275E5A51) 4 GG(B,C,D,A,M0,20,0xE9B6C7AA) 5 GG(A,B,C,D,M5,5,0xD62F105D) 6 GG(D,A,B,C,M10,9,0x02441453) 7 GG(C,D,A,B,M15,14,0xD8A1E681) 8 GG(B,C,D,A,M4,20,0xE7D3FB

16、C8) 9 GG(A,B,C,D,M9,5,0x21E1CDE6) 10 GG(D,A,B,C,M14,9,0xC33707D6) 11 GG(C,D,A,B,M3,14,0xF4D50D87) 12 GG(B,C,D,A,M8,20,0x455A14ED) 13 GG(A,B,C,D,M13,5,0xA9E3E905) 14 GG(D,A,B,C,M2,9,0xFCEFA3F8) 15 GG(C,D,A,B,M7,14,0x676F02D9) 16 GG(B,C,D,A,M12,20,0x8D2A4C8A) 第三轮 1 HH(A,B,C,D,M5,4,0xFFFA3942) 2 HH(D,A

17、,B,C,M8,11,0x8771F681) 3 HH(C,D,A,B,M11,16,0x6D9D6122) 4 HH(B,C,D,A,M14,23,0xFDE5380C) 5 HH(A,B,C,D,M1,4,0xA4BEEA44) 6 HH(D,A,B,C,M4,11,0x4BDECFA9) 7 HH(C,D,A,B,M7,16,0xF6BB4B60) 8 HH(B,C,D,A,M10,23,0xBEBFBC70) 9 HH(A,B,C,D,M13,4,0x289B7EC6) 10 HH(D,A,B,C,M0,11,0xEAA127FA) 11 HH(C,D,A,B,M3,16,0xD4EF

18、3085) 12 HH(B,C,D,A,M6,23,0x04881D05) 13 HH(A,B,C,D,M9,4,0xD9D4D039) 14 HH(D,A,B,C,M12,11,0xE6DB99E5) 15 HH(C,D,A,B,M15,16,0x1FA27CF8) 16 HH(B,C,D,A,M2,23,0xC4AC5665) 第四轮 1 II(A,B,C,D,M0,6,0xF4292244) 2 II(D,A,B,C,M7,10,0x411AFF97) 3 II(C,D,A,B,M14,15,0xAB9423A7) 4 II(B,C,D,A,M5,21,0xFC93A039) 5 II(

19、A,B,C,D,M12,6,0x655B59C3) 6 II(D,A,B,C,M3,10,0x8F0CCC92) 7 II(C,D,A,B,M10,15,0xFFEFF47D) 8 II(B,C,D,A,M1,21,0x85845DD1) 9 II(A,B,C,D,M8,6,0x6AFA87E4F) 10 II(D,A,B,C,M15,10,0xFE2CE6E0) 11 II(C,D,A,B,M6,15,0xA3014314) 12 II(B,C,D,A,M13,21,0x4E0811A1) 13 II(A,B,C,D,M4,6,0xF7537E82) 14 II(D,A,B,C,M11,10

20、,0xBD3AF235) 15 II(C,D,A,B,M2,15,0x2AD7D2BB) 16 II(B,C,D,A,M9,21,0xEB86D391 后3轮的固定数Ti的值如表4-1-4所示。表4-1-4 后3轮的固定数TiT17=F61E2562 T33=FFFA3942 T49=F4292244 T18=C040B340 T34=8771F681 T50=432AFF97 T19=265E5A51 T35=699D6122 T51=AB9423A7 T20=E9B6C7AA T36=FDE5380C T52=FC93A039 T21=D62F105D T37=A4BEEA44 T53=6

21、55B59C3 T22=02441453 T38=4BDECFA9 T54=8F0CCC92 T23=D8A1E681 T39=F6BB4B60 T55=FFEFF47D T24=E7D3FBC8 T40=BEBFBC70 T56=85845DD1 T25=21E1CDE6 T41=289B7EC6 T57=6FA87E4F T26=C33707D6 T42=EAA127FA T58=FE2CE6E0 T27=F4D50D87 T43=D4EF3085 T59=A3014314 T28=455A14ED T44=04881D05 T60=4E0811A1 T29=A9E3E905 T45=D9D4D039 T61=F7657E82 T30=FCEEA3F8 T46=E6DB99E5 T62=BD3AF235 T31=676F02D9 T47=1FA27CF8 T63=2AD7D2BB T32=8D2A4C8A T48=C4AC5665 T64=EB86D391 十求和运算 第四轮最后一步骤的A,B,C,D输出,将分别与A,B,C,D记录单元中数值进行求和操作。其结果将成为处理下一个512位明文分组时记录单元A,B,C,D的初始值。当完成了最后一个明文分组运算时,A,B,C,D中的数值就是最后的散列函数值。

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

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