Stream-Cipher
消除隨機 64 位隨機數的風險
給定一個流密碼,例如使用 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 的論文。應該可以調整安全證明。