Encryption
在密文中附加或附加隨機數之間的選擇
我知道,在使用 CTR 模式時,將隨機數附加或添加到生成的密文通常是安全的,無論隨機數是在密文之前還是之後都不重要。
但是,我正在製作另一個自製協議(總是不時發生的壞事),這導致了以下情況:
我選擇了 XChaCha20Poly1305,這是我能得到的最好的 AEAD 原語,作為加密原語。我必須放棄對加密密鑰的實際使用者控制,並且nonce不能可靠地持久儲存,所以我選擇隨機生成nonce。然後,生成的密文將被輸入另一個確定性加密器,例如 AES-CBC,其具有恆定密鑰(刻錄在晶片中並且在設備的生命週期內無法更改)和零 IV,對此我完全無法控制。最終結果將通過網路發送。
**密文的格式化順序是否重要?**我不知道設備的 RNG 是否損壞,也無法選擇將身份驗證標籤與密文相關的位置。
如果是 $$ nonce || Enc(key, plaintext) || tag $$ 然後在RNG失敗的情況下,安全性受到破壞;如果額外的加密器被破壞,系統將完全失敗。但如果是 $$ Enc(key, plaintext) || tag || nonce $$ 那麼額外的加密器可能會提供一些安全性,甚至可以使大多數安全性聲明成立,即使在 RNG 失敗的情況下也是如此。
這裡涉及許多限制,這可能是一個複雜的問題,但我希望有人可以為我闡明這個問題。
標籤、隨機數和密文的順序根本不重要。任何編碼都可以,因為經過身份驗證的是數據本身,而不是為傳輸而編碼的方式。
現在,如果您不能使用計數器,並且您不信任 PRG,那麼您最終可能會重用 nonce,無論它們是如何編碼的。
您應該使用防止隨機數誤用的方案,例如 AES-GCM-SIV,或者使用 KDF 從密文、PRG 的一些輸出和輔助密鑰創建隨機數。