Aes
如果我使用帶有 SCrypt 和 AES-GCM 的 32 字節隨機鹽,我是否需要擔心 IV?
我正在使用 KEK(密鑰加密密鑰)加密 DEK(數據加密密鑰)。KEK 是使用帶有預設參數的 scrypt 和隨機生成的 32 字節鹽的密碼生成的。加密算法是AES-GCM。
在這種情況下,IV 的含義是什麼?假設 IV 被初始化為 0(96 位 0)。如果我重新使用帶鑰匙的 IV,那麼這是個壞消息。由於密鑰是從密碼生成的,因此它將始終相同。但是我每次重新加密文件時都會生成一個隨機的 32 字節鹽,每次都應該提供不同的密鑰。我假設一個 32 字節的鹽會顯著改變 KEK,因此零初始化的 IV 不會對 GCM 造成問題。這是一個有效的假設嗎?
如果您只使用一次密鑰,那麼使用同一個密鑰重複使用隨機數是沒有危險的,因為您甚至沒有重複使用密鑰!
salt 和密碼的衝突會導致相同的密鑰,但儘管這種衝突的機率可能不為零,但對於 32 字節的 salt 來說它仍然可以忽略不計——當然,除非你回滾你的 VM 狀態並得到相同的初始 RNG 狀態或等效狀態。
順便說一句,如果您想要 128 位安全級別,請確保使用 AES-256,而不是 AES-128。