將雜湊函式重複應用於先前的結果會訪問所有可能的雜湊嗎?
如果要接收消息,請說“Hello world!”,然後計算 MD5 雜湊:
86fb269d190d2c85f6e0468ceca42a20
然後,獲取這個的 MD5 雜湊,並重複該過程:
d522231cf8bd5bd3bceb31c640bcab9a
64bb07c8a424dbb918495fa428702998
ed64b3e94672013dd88c415b8575dede
95119774bf93c232892b4f3071348abd
0d1fff8e1426591625a888451ed893c2
3e858eba431292825240db61628a817a
055609b11d0a06b46eff40bcb52eca09
8860c0fbffff97c16f1aa617e3b243e5
518ca0b27a1990b5bac51799c2c1b636
b62fd7e949b2995312b9fbddccd6b19f
b1d831a1d1c6ed8a81e4cb908f5aa36e
dd4e0883a48b1fd3a3a08e26cbc6adc4
3f4a12f0cdc506141badd00bf498dbad
be536872dde5b558975fd3a7dfec4884
402b32bb6839f17028deb13e60dd32ad
…
給定上述無限次重複,是否有可能計算所有可能的雜湊值無限次?是否有可能給定一些初始消息,在程序開始後不久可能會重新訪問初始雜湊,即。如果 402b32bb6839f17028deb13e60dd32ad 的 MD5 又是 86fb269d190d2c85f6e0468ceca42a20。
給定上述無限次重複,是否有可能計算所有可能的雜湊值無限次?
對的,這是可能的; 但是(據我們所知)這是極不可能的。MD5(在 16 字節輸入上)不僅是一個排列,它還需要是一個單週期排列。
是否有可能給定一些初始消息,在程序開始後不久可能會重新訪問初始雜湊
這也是可能的,但同樣不太可能(只是不像之前的情況那樣令人眼花繚亂);對於一個隨機函式,發生這種情況的機率大約是 $ 2^{-64} $
最可能的情況是我們會陷入不包含初始雜湊的循環。
如果假設 MD5 像隨機函式一樣工作,那麼所有這些都可以顯示出來。現在,MD5 不是一個隨機函式,它可能有一些未知的行為會改變事情。然而,根據我們對 MD5 的了解,這看起來不太可能。