Symmetric

具有大型 IV 和身份驗證的對稱加密算法?

  • December 22, 2015

大多數現代對稱密碼都需要隨機數/IV。如果重新使用隨機數,就會失去安全性。

如果 nonce 足夠大,則可以使用 CSPRNG 安全地生成它。這避免了需要在加密之間保持狀態。我正在尋找算法

  • 有一個大的 IV — 具體來說,一個大到足以每次使用 CSPRNG 生成一個新的 IV 是安全的。
  • 提供身份驗證。
  • 具有易於使用、備受推崇、可移植的開源實現,可以抵抗定時攻擊。

這些要求的原因是我正在尋找一種(相對)難以誤用並且幾乎可以在任何地方工作的實現——而且它是由專業的密碼學家編寫的。

我有一些想法(例如用單輪 ChaCha20 加密隨機生成的 512 位 IV,然後傳輸它)但我不是密碼學家,所以我不信任他們。

讓我們看看您的要求:

有一個大的 IV — 具體來說,一個大到足以每次使用 CSPRNG 生成一個新的 IV 是安全的。

通常,超過 96 位的 IV/nonce 被認為可以用於隨機生成。如果它至少是 128 位,您可以安全地使用它,只要您可以使用 AES 之類的 128 位分組密碼,因為在您遇到隨機隨機數衝突之前,您已經有隨機分組衝突。

較短的隨機數,例如 Salsa20 和 ChaCha 中的 64 位隨機數,不能隨意使用,因為你會在幾十億 ( $ 10^9 $ ) 消息,並在數百萬之後,機率不可忽略。

提供身份驗證。

除非您想使用密碼和 MAC 編寫自己的經過身份驗證的加密,否則這基本上會給您留下一個常用的選項:AES-GCM。ChaCha20Poly1305 也是常用的 (TLS),但有一個較短的 64 位隨機數。CodesInChaos 提到的 XSalsa20Poly1305 也是一種選擇,但據我所知,基本上只用於 NaCl/libsodium。

XSalsa20 中的 X 很重要。該算法具有 192 位隨機數。如此長的隨機數允許您使用 128 位隨機值和 64 位時間戳,即使在 RNG 不足的情況下也不太可能發生衝突。

具有易於使用、備受推崇、可移植的開源實現,可以抵抗定時攻擊。

這有點離題了,但同樣,AES-GCM 和 XSalsa20Poly1305 都有開源實現。例如,libsodium 兩者都有實現。


我有一些想法(例如用單輪 ChaCha20 加密隨機生成的 512 位 IV,然後傳輸它)但我不是密碼學家,所以我不信任他們。

這似乎沒有完成任何事情。IV 不需要保密,ChaCha20 本身需要一個(短)隨機數。

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