Aes
在 Fortuna 中,我可以使用 ChaCha20 代替分組密碼和 Blake2b 代替迭代的 SHA256 嗎?
在 Fortuna CSPRNG 中,我可以使用 ChaCha20 代替分組密碼和 Blake2b 代替雙 SHA256,並且仍然保持安全性嗎?
我的假設是“是”,因為:
- 分組密碼的唯一用途是在 CTR 模式下(即作為流密碼)。ChaCha20 是 CTR 模式下使用的 PRF。事實上,我認為這應該增加安全性。
- Blake2b 被認為至少與 SHA256 一樣強大,並且不受長度擴展攻擊,因此不需要雙重雜湊。
主要優點是性能。
TL;DR:Fortuna 是一個 CSPRNG,因此您可以隨意更換組件,因為您不受兼容性要求的約束,並且修改應該可以工作,儘管有一些值得注意的點。
在Fortuna (PDF)中,AES-256 僅用於一個地方:根據目前計數器生成密鑰流(甚至呼叫該函式
GenerateBlocks()
)然而,Fortuna 使用 AES-CTR 的方式有一個潛在的困難:*計數器不會在重新設置密鑰時重置。*因此,如果 Fortuna 重新輸入密鑰,它會生成兩個密鑰材料塊並將它們用作新密鑰,但用於此操作的計數器只是再次增加 1 並繼續使用。
這可以通過適當使用ChaCha的尋找機制來克服。
最後,Fortuna 中的 AES-CTR 履行了偽隨機發生器的角色,因此可以被任何其他 PRG 任意交換,其中包括 CTR 模式下的分組密碼,當然還有 ChaCha。使用不同的密碼是否會真正提高安全性取決於對新密碼的密碼分析量,因為 256 位 AES 在物理上對人類來說已經牢不可破。
SHA-256d 在 Fortuna 中的兩個地方使用:作為 KDF 從舊密鑰和給定的隨機字元串派生新密鑰,以及分別作為標準雜湊函式來收集池熵。
對於這兩種用法,用 Blake-2b 替換 SHA-256(d) 在功能上是等效的,即使有人可能想考慮在 MAC 模式下使用 Blake-2b(對於 KDF 部分)或使用一些(不同的)個性化字元串兩種操作。