哈希碰撞H(x)= H(y)与x!= y,对于随机z,这是否也意味着H(x + z)= H(y + z)?

时间:2013-10-29 15:08:19

标签: hash append collision

假设H是一些哈希函数(例如MD5或SHA256或其他),我对此哈希有一个冲突:两个不同的数据x和y,它们具有相同的哈希值。

换句话说,x≠y但H(x)= H(y)。

现在,如果我连接一些随机数据z,H(x + z)是否与H(y + z)相同?

这个想法是:x和y是一个碰撞可能意味着它们碰巧使H函数处于相同的状态(从而导致相同的散列)。从那时起,我们附加的其他数据无关紧要,它们的哈希值将保持不变。

我测试了上面的this MD5 collision,它似乎在那里工作。但我不知道这一般是否属实?

3 个答案:

答案 0 :(得分:1)

这种特殊技术称为length extension attack。散列函数是否易受攻击显然取决于特定的散列函数。基于Merkle–Damgård construction的哈希函数(如MD5和SHA-1)容易受到攻击。 SHA-3不易受攻击,HMAC constructions也不容易受到攻击。

答案 1 :(得分:0)

取决于has功能。由于哈希函数不是homomorphic(即,f(x) = f(y)暗示x = y),因此f(x + z)f(y + z)将映射到同一地方项目。考虑一个反例:

给出哈希函数

f(x) = (x * 3) + 1 mod 6

然后f(2) = 1f(6) = 1。让z = 1。然后:

f(2 + z) = 4 and f(6 + z) = 1

因此f(2) = f(6)f(2 + z) ≠ f(6 + z)

但是,如果哈希函数是同态的,那么根据同态的定义:

f(p + q) = f(p) + f(q)

因此:

f(x + z) = f(x) + f(z) 
f(y + z) = f(y) + f(z)

除了你最初说过的f(x) = f(y)之外:

f(x) + f(z) = f(y) + f(z)

所以他们的哈希会是一样的。

答案 2 :(得分:0)

(请放纵,这是我的第一个回答:D) 不一定:

考虑以下数据(作为数字列表)

x = [8 0 4]
y = [8 1 0]
z = [5]

和散列函数:

H([a b c]) = a + b*c
H([a b c d]) = H([b c d]) + H([a b c]) 

然后,x和y发生碰撞:

H(x) = H([8 0 4]) = 8 + 0*4 = 8
H(y) = H([8 1 0]) = 8 + 1*0 = 8

但是在追加数据时,哈希值不相等:

H(z + x) = H([5 8 0 4]) = H([5 0 8]) + H([8 0 4]) = 5 + 8 = 13
H(z + y) = H([5 8 1 0]) = H([5 8 1]) + H([8 1 0]) = 13 + 8 = 21