1fffY0Y1YL-1bbbnnnnnIV=CV0CV1CVL-1CVL明文M被分为L个分组Y0,Y1,…,YL-1b:明文分组长度n:输出hash长度CV:各级输出,最后一个输出值是hash值无碰撞压缩函数f是设计的关键6.2.4迭代型杂凑函数的一般结构2算法步骤(1)-分组填充RonRivest于1990年提出MD-4杂凑算法。输入消息可任意长,压缩后输出为128bits。1992年改进为MD-5。消息100…064bit消息长度填充图样L×512bitKbit6.3MD5杂凑算法(MD5HashAlgorithm)6.3.1算法描述3每轮输出为128bit,可用4个32bits字表示:A,B,C,D。初始存数以十六进制表示为A=01234567,B=89ABCDEF,C=FEDCBA98,D=76543210。算法步骤(2)-缓冲初始化4对512bit(16-字)组进行运算,Yq表示输入的第q组512bit数据,在各轮中参加运算。T[1,…,64]为64个元素表,分四组参与不同轮的计算。T[i]为232×abs(Sine(i))的整数部分,i是弧度。T[i]可用32bit二元数表示,T是32bit随机数源。算法步骤(3)-HMD5运算算法步骤(4)-输出MD0=IV(ABCD缓存器的初始矢量)MDq+1=MDq+fI[Yq,fH[Yq,fG[Yq,fF[Yq,MDq]]]]MD=MDL(最终的杂凑值)。5MDq,128Yq512ABCD32ABCD"fF(ABCD,Yq,T[1…16])ABCDABCD"fG(ABCD,Yq,T[17…32])ABCDABCD"fH(ABCD,Yq,T[33…48])ABCDABCD"fI(ABCD,Yq,T[49…64])+++++:mod232MD-5的一个MDq+1128512-bit组的处理6MD-5是四轮运算,各轮逻辑函数不同。每轮又要进行16步迭代运算,4轮共需64步完成。每步完成ab+CLSS(a+g(B,C,D)+X[k]+T[i])其中a,b,c,d=缓存器中的四个字,按特定次序变化。g=基本逻辑函数F,G,H,I中之一,算法的每一轮用其中之一。6.3.2轮运算7ABCDABCD+++CLSS++X[k]T[i]CLSs:循环左移s位。X[k]:第q-512-bit组的第k个32-bit字。T[i]:矩阵T中第I个32-bit字。+:模232加法。8基本逻辑函数定义轮基本函数gg(b,c,d)fFF(b,c,d)(b•c)V(b•d)fGG(b,c,d)(b•d)V(c•d)fHH(b,c,d)bcdfII(b,c,d)c(b•d)9MD-5的输出为128-bit,若采用纯强力攻击寻找一个消息具有给定Hash值的计算困难性为2128,用每秒可试验1000000000个消息的计算机需时1.07×1022年。采用生日攻击法,寻找有相同Hash值的两个消息需要试验264个消息,易受第II类生日攻击。差分攻击攻击MD-5单轮可以在合理的时间内找到具有相同杂凑值的两个不同的消息。但未能推广到4轮6.3.3MD-5的安全性10可找到一个消息分组和两个相关的连接变量,使算法产生相同的输出,但还未能成功的推广到4轮。对单个512比特长的消息分组已经成功的找出了碰撞,为推广到在有初值IV时整个消息运算该算法。6.3.3MD-5的安全性11美国NIST设计1993年成为联邦信息处理标准(FIPSPUB180)基于MD4算法,与之非常类似。输入为小于264比特长的任意消息分组512bit长输出160bit6.4安全杂凑算法(SecureHashAlgorithm)12消息填充:与MD5完全相同附加消息长度:64bit长度缓冲区初始化A=67452301B=EFCDAB89C=98BADCFBD=10325476E=C3D2E1F06.4.1算法描述13模232加分组处理14A,B,C,D,E(E+ft(B,C,D)+CLS5(A)+Wt+Kt),A,CLS30(B),C,D)6.4.2SHA的压缩函数15SHA中基本逻辑函数定义16SHA分组处理所需的80个字的产生过程