Stream-Cipher

IV在流密碼中的作用是什麼?為什麼需要它,它的重要性是什麼?

  • October 25, 2021

當我閱讀有關流密碼並且沒有找到令人滿意的答案時,我遇到了這個問題。

為什麼在流密碼中需要 IV,使用它的重要性是什麼?

如果要重用密鑰,則任何對稱密碼都需要 IV。原因很簡單,否則密鑰重用會洩漏有關明文的資訊。從最基本的意義上說,如果重複消息,您將獲得相同的密文。這很容易看出:對稱密碼是確定性的,並且沒有唯一的輸入,因此結果必須相同 - 與任何算法一樣。

對於生成與明文消息異或的密鑰流的流密碼,問題更加明顯。在這種情況下,您會遇到與many-time-pad相同的問題,並且很容易檢索有關兩個輸入消息的更多資訊。如果知道足夠多的資訊,那麼完整的消息可能會被洩露,即使密鑰應該仍然是安全的。

對於大多數流密碼來說,提供一個隨機數就足夠了(一個使用一次的數字,只是該特定密鑰的唯一數字,甚至只是一個唯一的位串);對於某些操作模式,例如CBC,IV 不需要是隨機的。只要給出一個唯一的隨機數,密鑰流就與隨機數沒有區別。


一些流密碼不接受 IV。在這種情況下,必須生成唯一的密鑰。在許多情況下,可以簡單地連接密鑰和 IV 以生成與隨機無法區分的密鑰流,但如果懷疑密鑰的安全屬性不夠完美,則使用帶有 salt 或 Info 欄位的 KDF 表示為每個加密派生一個新密鑰的 IV 是一個更好的選擇。

這些密碼之一是 RC4。當然,由於存在許多安全問題,使用舊 RC4 並不是一個好建議。在 RC4 的情況下 - 它以不止一種方式被破壞 - 使用如上所述的 KDF 似乎是一個更好的主意。完全避免使用這種古老的算法會更好;嘗試例如 Salsa 或 ChaCha,它確實支持 IV 或更確切地說是 nonce。

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