Hash

將消息雜湊用作 ChaCha 中的 IV 是否安全?

  • March 7, 2019

如果雜湊是不可預測的,這似乎是一種選擇。

它可能是消息的散列或消息的散列 + 一些公共秘密(除了密鑰)。

雜湊是可預測的唯一情況是消息相同時。在這種情況下,查看相同的隨機數/雜湊不會為攻擊者提供任何新資訊。

所以看起來雜湊可以像隨機數一樣工作。將消息雜湊用作 ChaCha 中的 IV 是否安全?

首先,這對 ChaCha 來說是不安全的,因為 ChaCha 隨機數只有 64 位長,因為 ChaCha 隨機數通常是按順序選擇的,因此與合理數量的消息發生衝突的危險是不可忽略的。讓我們說 XChaCha,它有一個 192 位的隨機數,它足夠大,可以隨機選擇而沒有碰撞的危險。

接收者必須知道隨機數才能解密消息,因此我們可能必須將其與密文一起傳輸。呼叫雜湊 $ h $ ; 密文是 $ E_k(h, m) \mathbin\Vert h $ , 在哪裡 $ E_k(h, m) $ 是密鑰下的 XChaCha 加密 $ k $ 和隨機數 $ h $ 消息的 $ m $ .

  • 如果您使用固定的公共雜湊 $ h = H(m) $ ,比如SHA-256,那麼密文 $ E_k(h, m) \mathbin\Vert H(m) $ 揭示攻擊者可以利用的明文資訊:他們可以通過評估來確認對明文是什麼的猜測,例如 Attack at dawn! vs. Attack at dusk! $ H(m) $ 他們自己的猜測和檢查。
  • 如果您使用秘密雜湊 $ h = H_\kappa(m) $ ,比如keyed BLAKE2s-192,你有一種MAC-and-encrypt組合。對手不知道秘密 $ \kappa $ ,因此無法證實猜測。它並沒有完全達到認證加密的安全目標,因為如果你重複一條消息,密文也會被重複。但正如您所觀察到的,這是成本有限的對手將獲得的唯一泄漏。
  • 如果您將 nonce參數添加回系統並使用秘密雜湊 $ h = H_\kappa(n, m) $ ,然後您將獲得一個抗隨機誤用的經過身份驗證的密碼。如果您從不重複隨機數,則它是經過身份驗證的加密;如果你確實重複了一個隨機數,無論是意外還是意外,重複的密文是成本有限的對手將得到的唯一泄漏。

這是一種SIV合成初始化向量方案,類似於市場上的其他產品,如 AES-SIV、AES-GCM-SIV 和各種CAESAR角斗士,它們的名字太酷了,以至於像我這樣的鳥兒都記不住。使用 BLAKE2 不會打破任何速度記錄——使用 BLAKE2,你需要為抗碰撞性付出代價,而不僅僅是偽隨機性——但如果你手頭有這些元件,它就可以完成這項工作。一種更快的方法可能是使用通用雜湊系列將消息壓縮為 256 位,例如hash256,並通過 256 到 192 位的 PRF 提供它;通過利用 XChaCha 的結構作為 ChaCha 和 HChaCha 的組合可能會做得更好。

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