0

H が何らかのハッシュ関数 (MD5 や SHA256 など) であり、このハッシュに衝突があるとします。同じハッシュを持つ 2 つの異なるデータ x と y です。

つまり、x≠y ですが、H(x)=H(y) です。

ランダムなデータ z を連結すると、H(x+z) は H(y+z) と同じになりますか?

アイデアは次のとおりです。 x と y が衝突しているということは、H 関数がたまたま同じ状態になることを意味している可能性があります (したがって、同じハッシュが得られます)。その時点から、追加する他のデータに関係なく、それらのハッシュは同じままです。

この MD5 衝突について上記をテストしたところ、そこで動作するように見えました。しかし、これが一般的に正しいかどうかはわかりませんか?

4

3 に答える 3

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
于 2013-10-29T15:44:15.713 に答える