Protocol-Design

TLS 1.1 中如何使用初始化向量?

  • April 25, 2020

據我了解,TLS 1.0可以使用 CBC 來加密數據。為此,它創建一個初始化向量 (IV),然後使用前一個密文塊作為下一條記錄的 IV。我製作了這張圖來描述我對 TLS 1.0 的理解:

TLS 1.0

在上圖中,紅色箭頭向BEAST攻擊打開了 TLS 1.0。從TLS 1.1開始,這似乎可以通過創建顯式 IV 來解決:

$$ CBCATT $$描述了對 TLS 的選擇明文攻擊,該攻擊依賴於知道記錄的 IV。以前版本的 TLS$$ TLS1.0 $$使用先前記錄的 CBC 殘差作為 IV,因此啟用了此攻擊。此版本使用顯式 IV 來防止這種攻擊。

我的問題是:這些明確的 IV 是在何時何地創建的?它們是否像這樣為每條消息創建(兩條消息仍然像上面一樣在同一個流中發送)?:

這是 CBC 在 TLS 1.1 中的工作方式嗎?

還是我們現在對每條記錄都有明確的 IV?:

在此處輸入圖像描述

……或者兩者都不是?

我對這一切都比較陌生,所以如果這是一個愚蠢的問題,請原諒我。

您可能對“記錄”一詞感到有些困惑。

在 TLS 中,要加密的數據被分成一系列片段;每個片段都被加密為一條記錄,每條記錄都被加密並獨立保護完整性

$$ 1 $$. 這樣的記錄最多可以保存 16kbytes 的數據。此“記錄”是標準 TLS 術語,是您所說的“消息”。如果使用分組密碼,那麼該分組密碼一次處理的數據量稱為“塊”(而不是“記錄”),在 TLS 中,我們一般不談論它就這麼多,因為通常很少需要處理較低級別的加密是如何完成的。 在 TLS 中,每條記錄都是單獨加密的。如果您使用 TLS 1.1 和 CBC 模式,當您加密記錄時,您會選擇一個不可預測的 IV,然後使用該 IV 以 CBC 模式加密所有數據(以及數據的 HMAC)。您以標準方式使用 CBC 模式,因此 CBC 模式使用 IV 加密第一個塊(AES 為 16 字節),然後使用生成的初始 16 字節密文加密第二個塊,依此類推。就像 TLS 1.0 CBC 模式一樣,除了不使用前一個密文作為下一個 IV 之外,您使用緊接密文之前出現的值。因此,您的第一個圖表更準確。

$$ 1 $$:此外,TLS有時會在加密器和解密器之間發送消息,以進行原始協商或重新生成密鑰。此數據也在記錄中發送。

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