Stream-Cipher

消除隨機 64 位隨機數的風險

  • July 10, 2017

給定一個流密碼,例如使用 64 位隨機數的Chacha20,使用隨機隨機數是不安全的,因為存在意外重複的風險(如果使用相同的密鑰兩次將是災難性的)。在不能使用簡單計數器的環境中,請考慮以下構造:

  • staticKey:256 位加密安全偽隨機密鑰
  • perEncryptionSalt:128 位隨機鹽
  • perEncryptionKey: HKDF(staticKey, perEncryptionSalt, info)
  • perEncryptionNonce:64 位隨機隨機數

密文 = chacha20(clearText, perEncryptionKey, perEncryptionNonce)

salt 和 nonce 將附加到密文並包含在 mac 中。鑑於每次加密都會更改密鑰(因此不太可能與相同的隨機數結合使用),這種結構安全嗎?我知道 XChacha20/XSalsa20 他們已經解決了這個問題,但我還是很好奇。

如果不看程式碼,我會說您的構造與 XChaCha20 幾乎相同:

來自https://download.libsodium.org/doc/advanced/xchacha20.html

在內部,XChaCha20 的工作方式類似於計數器模式中使用的分組密碼。 它使用 HChaCha20 散列函式從原始密鑰和擴展隨機數派生一個子密鑰和一個子隨機數,以及一個專用的 64 位塊計數器,以避免在每個塊之後增加隨機數。

(強調我的)

我不確定這個 HChaCha20 雜湊函式是否有任何特定屬性,但使用 HKDF 可能就可以了。

是關於 XSalsa20 的論文。應該可以調整安全證明。

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