Collision-Resistance
SHA-256 中的循環
假設我從一個特定的 256 位值開始。呼叫這個 $ v $ . 然後我散列該值,並獲得另一個 256 位值。呼叫這個 $ \text{SHA256}(v) $ . 我取這個值並得到另一個 256 位值。呼叫這個 $ \text{SHA256}^2(v) $ . 更一般地說,讓我們稱散列的結果 $ v $ 反复 $ n $ 次 $ \text{SHA256}^n(v) $ .
現在我的問題是,會有多大 $ n $ 是,這樣 $ \text{SHA256}^n(v) = v $ ?
在我看來,如果它是一種巨大的排列, $ n $ 必須是 $ 2^{256} $ , 那是對的嗎?這是可證明的,還是有這方面的任何資訊?(只是好奇,真的。)
我遇到的另一個問題是,所有 256 位字元串是否都有唯一的 SHA256 值,有沒有辦法證明這一點?(或者,換一種說法,是否可以證明所有“256 位字元串”的語言中都沒有 SHA-256 衝突?)
$ \text{SHA256} $ 被設計成一個隨機函式。在該假設下,預計對於大多數 256 位 $ v $ , 不存在正整數 $ n $ 和 $ \text{SHA256}^n(v) $ 等於 $ v $ . 否則說,大多數 $ v $ 不屬於循環。
為了直覺地說明這一點,在下圖中顯示了 7 位雜湊的迭代中,我用紅色繪製了屬於循環的點。
對於具有 256 位輸出 的隨機
函式, 平均值幾乎完全一樣 $ \sqrt{\hspace{.03 in}2\hspace{-0.05 in}\cdot \hspace{-0.04 in}\pi} \cdot 2^{127} $ .沒有什麼比 SHA-256 更具體的了。