Encryption

我的偽隨機初始化向量是否安全?

  • August 16, 2012

我怎麼知道我是否正在生成一個安全的偽隨機初始化向量?

目前我正計劃使用目前日期和時間生成一個偽隨機初始化向量 - 這是否足夠安全?

如果答案取決於分組密碼和操作模式,我將使用 OFB 模式和 AES。

只需使用您的作業系統或框架的內置加密 PRNG。

對於只需要唯一性的模式,日期/時間可能就足夠了,但是如果您快速連續生成兩個 IV(大約在 16 毫秒內)或者如果時鐘發生了變化。這仍然是一個不必要的風險。

對於需要不可預測的 IV 的模式(例如 CBC 的某些用途),日期/時間肯定是不夠的。

IV 必須滿足的屬性很大程度上取決於使用 IV 的模式。有些模式需要不可預測性;有些模式需要不可預測性。其他模式不關心不可預測性,但需要唯一性。

至於OFB模式,它屬於“不關心不可預測性,但需要唯一性”的陣營。特別是,只要您從不重複使用 IV,並且您不太可能使用以前用於加密另一個塊的 IV,那麼您就是安全的。

這可以通過 OFB 的工作方式看出:第一個塊被加密為:

$ Ciphertext = Plaintext \oplus Encrypt(IV) $

只要兩條不同的消息有不同的IV,它們對應的 $ Encrypt(IV) $ 將完全無關。即使攻擊者可以預測您將使用哪個 IV,這仍然適用。

因此,要回答您的問題,如果您從不使用相同的 IV 兩次,則從目前日期和時間派生 IV 將是安全的;例如,目前時間總是在發送兩條不同消息之間遞增。

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