MD4碰撞攻击

​ 目 的:以论文梳理为主,回顾总结课程学习。

参考论文:2005年王小云教授等人发表的 Cryptanalysis of the Hash Functions MD4 and RIPEMD

MD4算法

​ MD4是较早出现的hash函数,在MD4后出现 了MD5,HAVAL,RIPEMD,RIPEMD-160,SHA-1,SHA-256等更加复杂的hash函数,但设计原理和结构与MD4类似(碰撞原理也类似)。

​ 消息摘要函数MD4将任意长度的消息压缩至128bit。算法对一个消息做如下操作:

step 1(填充):将消息m填充至512的倍数(如果本身是512bit的消息,仍要填充,因为必须有64bit放消息长度)

填充部分:|m | 100… | len

对应长度:| 448bit | 64bit

step2(压缩):填充完后,对每一个512bit消息块使用压缩函数将其压缩成128bit,最后一个消息块压缩完后得到的压缩值为整个消息的压缩值。

压缩函数有3轮:

压缩函数

Notes:

① mk:一个512bit块m

mi为32bit,共16个,每一步操作中用到不同的mi(即mk),据表5得到具体值。


② a,b,c,d:链变量(具体操作见下)


③ F,G,H:3个非线性bool函数

F,G,H

X,Y,Z为32bit消息字,三个函数是按位操作,进行与、或、非和异或运算


④ s:循环左移位数,据表5可得到具体值。


⑤ 两个16进制数:无具体含义,指定好的。

压缩过程:

设填充后消息填充后m

M为填充后m中一个512bit块,且m,mi每个32bit,共16个。

① 输入链变量:设(aa,bb,cc,dd)为输入链变量,若M是填充后m的第一个512bit块,则输入链变量等于给定的初始值链变量初始值,其后的消息块的输入链变量(aa,bb,cc,dd)为上一块的压缩值。

② 使用压缩函数:对每一个512bit消息块M,3轮压缩函数每轮进行16步,共48步,每一步中有一个链变量被更新,注意顺序是a、d、c、b:(注:wi即为上述的mk)

48步

w与s由表5得具体值,设输入链变量a0,d0,c0,b0,48步产生的链变量为a1,d1,c1,b1,a2,d2,…,a12,d12,c12,b12,实际上a1-b12的链变量更新,使用到的是其往前数的4个值,如d1的产生用到了d0,a1,b0,c0

③ 反馈过程: 48步操作完后,加入当前块的输入链变量,得到的结果才是当前块的最终链变量加入初始链变量

如果已经是最后一个512bit的压缩了,则hash值

作为整个消息填充后m的压缩值,否则(aa,bb,cc,dd)作为下一个512bit消息块的输入链变量。

####攻击思路

​ 碰撞是指不同的消息得到相同hash值,那么实际上,如果能够找到两个512bit消息m和m’产生碰撞,便可以构造m|s和m‘|s(s为任意串),两者一定产生碰撞。所以研究时只简化考虑512bit的消息。

​ 完整的想法应该是先确定好两个消息的差分,然后找一条最后能产生碰撞的差分路线。再找一组满足该差分路线的充分条件,根据这组条件修改消息以满足路线。在已经有了本论文的差分路线的前提下,找512bit消息的碰撞:首先找到两个满足消息差分的512bit消息。论文中的表6是使得表5差分路线成立的一组充分条件,接着我们按照表6修改链变量,再根据链变量修改消息 。

准备工作

1.有用的bool函数性质(x,y,z是对位的操作)

函数性质1

函数性质2

函数性质3 如F中第一条:当y与z在第i位相同时,x的第i位改变并不影响F得到的结果。利用这些性质可以合适的构造差分路线。

2.论文中使用的符号

为了方便描述构造的差分路线,先定义一些符号。

1.m符号1代表两个512bit消息。

2.符号2消息M压缩过程中产生的链变量,从a0,d0,c0,d0..a12,d12,b12,c12

3.符号3消息M’压缩过程中产生的链变量,从a’0…c’12。

4.符号4很直观,代表小消息块(32bit)的差分。

5.符号5表示ai,bi,ci,di的第j个bit(1<=j<=32)。

6.符号6(x为a,b,c,d中任一个),前者表示将x的第j位由0改为1,其他位保持不变后得到的对应结果值,后者是x第j位由1改为0,其他位保持不变得到的结果值。

7.符号7按照上述规则,对x(a/b/c/d)修改j1,j2..jl位,并让其他位保持不变得到的结果值。

例子🌰:在使用中,如对两个消息中c2的差分C2差分,用符号可以表示为C2差分1,因为该差分实际上可由c2修改第19位(1->0),第22位(0->1)产生的c’2,两者相减得到。为什么是19和22位呢?因为第一位是2^0。再进一步,由于bit只有0和1,差分是可以被扩散的,也就是说两个链变量的差分-2^18=-2^19+2^18=-2^20+2^19+2^18=…可以一直扩散下去,当然具体扩散到哪里,这就是论文给出的“精确的”差分路线了。如最后是修改c2的19,20,21,22,位得到c’2.C2差分2

碰撞攻击

​ 使用论文中的方法,找到碰撞的概率可达2^-2~2^-6,且MD4运算复杂度低于2^8,自然,论文中的差分路线给了很多限制,是“精确”到bit的差分攻击。

消息差分构造

两个512bit的消息M和M’ ,只有第1,2,12块不同,其他相同。

消息差分

消息修改
单步消息修改

######多步消息修改

其它