Hash

為什麼雜湊函式(如 SHA-1)的初始狀態通常不為零?

  • November 25, 2013

已經有一個問題在問“為什麼用特定的緩衝區初始化 SHA1? ”我的問題由此而來:

為什麼雜湊函式的初始狀態通常非零?

對於大多數人來說,我已經能夠清楚地解釋初始值的來源,而且它們通常是毫無意義的值。也就是說,之所以選擇它們,是因為它們沒有顯著的結構。但是,如果是這樣,為什麼不能將它們保持為零?僅僅是零初始狀態本身就太可疑了嗎?

(其他相關問題:“初始化 Sha-512 ”)

在雜湊函式設計的早期,不清楚如何選擇常數(不僅僅是初始向量),人們普遍認為它們看起來越隨機,函式就越安全。這方面的研究還很少。然而,已經有幾種攻擊(旋轉密碼分析滑動攻擊內部差異攻擊)利用了常數之間的相似性和它們的低漢明權重。某些常量的選擇可能會產生一個弱點,甚至是一個允許更快碰撞/原像搜尋的後門。

如果 Keccak 狀態是用一些奇怪的常量初始化的,而不是像現在這樣為零,那麼最近對 Keccak/SHA-3 的攻擊會更慢。這是 Keccak 排列的一個屬性,而包含的海綿結構對於初始向量選擇是無懈可擊的。

另一個原因是選擇不同的 IV 來區分相同的函式,但將輸出截斷為不同的位數(如 SHA-224 和 SHA-256)。

引用自:https://crypto.stackexchange.com/questions/11351