Cryptanalysis

替換 SHA-256 初始化值時是否存在任何安全問題?

  • March 12, 2017

正如RFC 4634在第 6.1 節中描述的那樣,SHA-256 使用八個 32 位字進行初始化。

這些是通過取前八個素數的平方根的小數部分的前 32 位獲得的:

H(0)0 = 6a09e667  
H(0)1 = bb67ae8  
H(0)2 = 3c6ef372  
H(0)3 = a54ff53a  
H(0)4 = 510e527f   
H(0)5 = 9b05688c  
H(0)6 = 1f83d9ab  
H(0)7 = 5be0cd19

這些顯然是*“我袖手旁觀”的*數字。

假設互操作性——閱讀:使用者之間的兼容性——不是問題,我有以下問題:

  1. 是否存在與替換那些 SHA-256 初始化值相關的安全問題?

該計劃是一次性使用 CSPRNG 來獲得特定(內部)實施的替代值;我認為這是獲得良好替代價值的安全方法。當這個假設是錯誤的時,請糾正我。

  1. 某些初始化值是否比其他值差?

換句話說:Merkle-Damgård 構造和/或 SHA-2 算法設計作為一個整體是否容易受到適用於密碼分析的 0 鍵問題的弱初始化值的影響?或者我們可以將它們全部設置為零而不影響加密安全嗎?


注意:歡迎指向相關研究論文,但不是*“必須”*。

  1. 隨機 IV 顯然是可以的。NIST 安全散列標准定義 SHA-512/t 具有任意 t 和不同的 IV 值,這些值本身就是 SHA2 的輸出,當您進行多塊按摩時,Merkle-Damgård 散列基本上在內部執行相同的操作。沒有理由不能對 SHA-256 或另一個生成 IV 值的 PRNG 執行相同的操作。
  2. 理論上,非隨機 IV 是另一回事。目前對 SHA2 的(部分)攻擊作用於壓縮函式,並為任何預定的 IV/連結值找到衝突。但是,至少在原則上,某些值可能更容易受到攻擊。只要弱 IV 的數量可以忽略不計,這不會破壞整個散列。

(就像CodesInChaos在評論中連結的惡意 SHA1的情況一樣,但使用的是圓形常量而不是 IV。)

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