Collision-Resistance
為什麼還沒有發現任何 SHA-256 衝突?
這幾天我一直在考慮這個問題,SHA-256 算法輸出 64 個字元,可以是小寫字母,也可以是 0-9 之間的數字。這應該意味著有 64^36 個不同的 SHA-256 結果。
怎麼從來沒有發現碰撞?如果我決定為長度增加的隨機輸入找到散列,我最終應該會找到衝突,即使這需要數年時間。我想這也可以在輸入是一個大文件的情況下完成,您只需更改一個字節併計算雜湊值,直到發現衝突。為什麼這沒有發生?
我認為你低估了有多大 $ 2^{256} \gg 64^{36} $ 是。
怎麼從來沒有發現碰撞?
這將需要一個非常非常非常非常 $ \text{very}^{\text{very}} $ 找了很久。相比之下,截至 2015 年 1 月,比特幣每秒計算 300 萬億次 SHA-256 雜湊。那是 $ 300 \times 10^{15} $ 每秒雜湊。
假設您正在嘗試執行碰撞攻擊並且“僅”需要計算 $ 2^{128} $ 雜湊。按照比特幣的發展速度,他們需要
$ 2^{128} / (300 \times 10^{15} \cdot 86400 \cdot 365.25) \approx 3.6 \times 10^{13} $ 年。相比之下,我們的宇宙只是 $ 13.7 \times 10^9 $ 歲。蠻力猜測不是一個實際的選擇。