Aes

如果使用已知和/或固定的 IV,CBC 模式下的 AES 是否安全?

  • November 17, 2018

我需要為受保護的內部應用程序使用的第三方應用程序加密憑據。在 ITSec.SE 上,我看到了一個基於內部應用程序憑據雜湊加密第三方憑據的方案。

我選擇 AES 作為加密算法,但問題是基於密碼的方案不會產生“秘密”IV。因此,IV 至少必須為攻擊者所知(與加密數據一起儲存)。用於密碼驗證的雜湊值可以工作,或者我可以生成一個偽隨機字節數組並將其作為新列放入數據庫中。為簡單起見,我進一步考慮使用常數 IV。

這些選擇中的任何一個都會對加密的安全性產生什麼不利影響?AES 是否像許多分組密碼一樣依賴於不可預測的 IV?IV是否儲存為未加密的明文是否重要?

不要使用固定的 IV。它可能會產生嚴重的負面後果。對於 CBC 模式尤其如此。

也就是說,以明文形式儲存的隨機 128 位 IV 通常是您想要的。攻擊者可以在不破壞安全性的情況下知道 IV。

初始化向量永遠不需要保密。如果它需要保密,那麼它將被稱為“密鑰”而不是“向量”。

通常,初始化向量要求僅取決於操作模式,而不取決於分組密碼的選擇。然而,操作模式的參數,例如 IV 大小,可能取決於使用的​​塊密碼的塊大小。對於 CBC 模式,IV 的大小始終與塊大小相同,對於 AES,塊大小為 16 字節。

對於 CBC 模式,當同一密鑰僅用於一條消息時,您可以使用固定的初始化向量。請注意,這也意味著您不應將 IV 重複用於同一消息的多個版本。如果您的密鑰是使用散列從使用者的登錄憑據中確定性地計算出來的,那麼這將不起作用。但是,您可以使用不斷變化的鹽和密碼散列,例如 PBKDF2 或 Argon2。唯一的鹽和唯一的密鑰然後扮演初始化向量的安全形色。

當攻擊者可以選擇要加密的消息然後觀察密文時,變化但可預測的初始化向量是不好的。可以觀察 IV / 明文組合是否會導致與分組密碼相同的輸入,從而產生相同的密文。因此,使用可預測的 IV 可能會洩漏有關具有特定值的先前明文的資訊。當然,攻擊者選擇的初始化向量同樣糟糕,即使她無法選擇消息。

加密安全(偽)隨機初始化向量 - 儲存在密文旁邊 - 通常對於所有操作模式都是安全的。


請注意,您通常還需要計算數據的 MAC,以確保它不會在沒有檢測到的情況下更改。如果您不這樣做,那麼攻擊者可以修改密文並觀察您嘗試解密時的反應。這可能允許攻擊者執行填充或其他明文預言攻擊並檢索明文。如果您將 IV 儲存在密文旁邊,那麼您還應該將 IV 包括在 MAC 的計算中。

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