Initialization-Vector

為什麼不能在 CTR 模式下重複使用 IV/密鑰對?

  • June 20, 2012

許多消息來源提到,IV 不能在 CTR 模式下使用相同的密鑰重複使用,以加密 2 條不同的數據,因為這完全破壞了安全性 - 但到目前為止我還沒有找到解釋為什麼會這樣。

如果攻擊者能夠設法獲取一段數據的純文字及其對應的密文,問題就很明顯了——但如果沒有已知的純文字可用,攻擊者如何僅從 IV 值重建密鑰流?

是否也可以通過將 IV 保密來緩解安全問題?例如,攻擊者是否有任何現實的機會通過只知道密鑰/IV 對已在創建兩個不同的密文中被重用,但僅此而已?

是的,攻擊者很有可能恢復明文,阻止他知道 IV 值並不能降低這種風險。

問題是 CTR 模式加密是有效的:

$ C = P \oplus F(Key, IV) $

在哪裡 $ P $ 是明文, $ C $ 是密文,並且 $ F $ 是其兩個輸入的複函式。

這個問題是如果你用相同的加密兩個不同的明文 $ Key $ , $ IV $ 值,然後攻擊者得到兩對:

$ C_1 = P_1 \oplus F(Key, IV) $

$ C_2 = P_2 \oplus F(Key, IV) $

他可以在哪裡看到價值觀 $ C_1 $ , $ C_2 $ . 有了這些,他就可以計算出:

$ C_1 \oplus C_2 = P_1 \oplus P_2 $

從而推導出兩個明文異或在一起的值。

至於如何攻擊它,您可以在此處此處找到兩個針對 ASCII 英語純文字的範例。

並且,請注意,由於攻擊者實際上並沒有使用 IV 值,所以他是否知道並不重要。

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