SSL中的密碼塊連結(CBC)如何受到攻擊?
我試圖了解 SSL/TLS 中的 CBC 模式如何受到攻擊。
我一直在網上四處尋找,但所有的例子和解釋都很難理解和遵循。你能簡單解釋一下這種攻擊是如何發生的嗎?
最近展示的針對 SSL ( BEAST ) 的攻擊是一種 IV 濫用攻擊,與發生在XML 加密中的攻擊完全不同。儘管如此,這就是 SSL 發生的事情。
基本上他們發現了兩件事:
- 一種讓瀏覽器在現有 SSL 連接使用的會話密鑰下加密數據的方法,以及
- 編寫 SSL 的方式中的一個錯誤允許利用該能力來讀取消息。
假設您在 CBC 模式下使用 AES。消息的第一個塊的加密基本上是 $ AES(K, IV \oplus m) $ . IV 通常與密文一起發送。這是一種簡化,忽略了處理較長消息的方式,有關更多詳細資訊,請參閱Wikipedia 的 CBC 文章,但它適用於此目的。
關鍵是同一事物的多次加密不會產生相同的密文,因為 IV 是隨機的
data XOR random = random
,因此您永遠不會真正加密相同的消息。因此,可以使瀏覽器加密數據的攻擊者不能簡單地猜測消息是什麼,並通過使瀏覽器加密猜測並檢查它是否與他們想要閱讀的加密消息匹配來驗證猜測。那麼問題是,如果我提前知道 IV,這不再成立:如果我想猜測以前的一些消息是“黎明攻擊”(用 IV $ IV_1 $ ) 我知道下一條消息的 IV 將是 $ IV_2 $ ,那麼我只需要讓瀏覽器加密一條消息 $ m $ 這樣 $ IV_1 \oplus \text{“attack at dawn”} = IV_2 \oplus m $ ,並檢查密文塊是否匹配。
SSL 使用前一個加密消息的最後 128 位作為 IV。因為在發送這條消息和下一條消息之間有一段時間,攻擊者可以做出猜測。
這是一個基本概述,還有一些關於如何有效地執行此操作以獲取隨每個 HTTP 請求發送的會話 cookie 的詳細資訊,但這就是它的要點。
這種攻擊在 TLS 1.1 和 1.2 中是不可能的(因為它們為每個消息生成一個新的初始化向量),OpenSSL 庫已經在 TLS 1.0 中通過在每個消息之前直接發送一個空消息(即只有填充和 MAC)來解決這個問題真實消息,所以這個空消息的密文被用作真實消息的初始化向量(如果不知道密鑰,這是無法預測的)。(編輯:事實證明,這個功能在 OpenSSL 中被禁用,因為它破壞了大量假設零字節讀取是文件結尾的伺服器。相反,部署的修復是“1/n-1 記錄拆分”,其中一個字節是在一個塊中發送,其餘消息在下一個塊中)