|
使用最广的报文摘要算法是MD5,这是Ronald L. Rivest设计的一系列Hash函数中的第5个。其基本思想就是用足够复杂的方法把报文位充分“弄乱”,使得每一个输出位都受到每一个输入位的影响。具体的操作分成下列几个步骤:
|
|
|
(1)分组和填充。把明文报文按512位分组,最后要填充一定长度的“1000....”,使得
|
|
|
|
(2)附加。最后加上64位的报文长度字段,整个明文恰好为512的整数倍。
|
|
|
(3)初始化。置4个32位长的缓冲区ABCD分别为:
|
|
|
A=01234567B=89ABCDEFC=FEDCBA98D=76543210
|
|
|
(4)处理。用4个不同的基本逻辑函数(F,G,H,I)进行4轮处理,每一轮以ABCD和当前512位的块为输入,处理后送入ABCD(128位),产生128位的报文摘要,如下图所示。
|
|
|
|
|
关于MD5的安全性可以解释如下:由于算法的单向性,因此要找出具有相同Hash值的两个不同报文是不可计算的。如果采用野蛮攻击,寻找具有给定Hash值的报文的计算复杂性为2128,若每秒试验10亿个报文,需要1.07×1022年。采用生日攻击法,寻找有相同Hash值的两个报文的计算复杂性为264,用同样的计算机需要585年。从实用性考虑,MD5用32位软件可高速实现,所以有广泛应用。
|
|
|