Cryptanalysis
替換 SHA-256 初始化值時是否存在任何安全問題?
正如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
這些顯然是*“我袖手旁觀”的*數字。
假設互操作性——閱讀:使用者之間的兼容性——不是問題,我有以下問題:
- 是否存在與替換那些 SHA-256 初始化值相關的安全問題?
該計劃是一次性使用 CSPRNG 來獲得特定(內部)實施的替代值;我認為這是獲得良好替代價值的安全方法。當這個假設是錯誤的時,請糾正我。
- 某些初始化值是否比其他值差?
換句話說:Merkle-Damgård 構造和/或 SHA-2 算法設計作為一個整體是否容易受到適用於密碼分析的 0 鍵問題的弱初始化值的影響?或者我們可以將它們全部設置為零而不影響加密安全嗎?
注意:歡迎指向相關研究論文,但不是*“必須”*。
- 隨機 IV 顯然是可以的。NIST 安全散列標准定義 SHA-512/t 具有任意 t 和不同的 IV 值,這些值本身就是 SHA2 的輸出,當您進行多塊按摩時,Merkle-Damgård 散列基本上在內部執行相同的操作。沒有理由不能對 SHA-256 或另一個生成 IV 值的 PRNG 執行相同的操作。
- 理論上,非隨機 IV 是另一回事。目前對 SHA2 的(部分)攻擊作用於壓縮函式,並為任何預定的 IV/連結值找到衝突。但是,至少在原則上,某些值可能更容易受到攻擊。只要弱 IV 的數量可以忽略不計,這不會破壞整個散列。
(就像CodesInChaos在評論中連結的惡意 SHA1的情況一樣,但使用的是圓形常量而不是 IV。)