Aes

TLS1.2 AES 128 CBC 加密數據大小不是塊大小的倍數

  • June 18, 2018

我知道 TLS_RSA_WITH_AES_128_CBC_SHA 等 TLS 密碼傳輸數據,如https://www.rfc-editor.org/rfc/rfc5246#section-6.2.3.2所示。據我了解,密文必須是塊大小的倍數,在本例中為 16 個字節。但是,當我查看wireshark 的以下輸出時,我很困惑。從Encrypted Application Data的開頭減去IV對應的16個字節後,剩下100個字節的密文,顯然不是16的倍數。我不明白什麼?

在此處輸入圖像描述

編輯:我已經包含了有關密碼套件的資訊

在此處輸入圖像描述

TLS 的預設模式使用MAC-then-Encrypt,它計算標籤,將其附加到消息中,然後將其填充為塊大小的倍數(在我們的例子中為 16)。但是,您可以更改預設模式以使用Encrypt-then-MAC(這消除了通過 AES-CBC 進行填充攻擊的風險)。在這種情況下,消息被填充和加密,然後才計算標籤並將其添加到最後。

在您的情況下, TLS_RSA_WITH_AES_128_CBC_SHA 使用 SHA1,它產生一個 20 字節長的標籤:

$$ 116-20=96=16\times 6 $$ 這是我必須解釋它的唯一方法,但伺服器和客戶端都必須實現選項Encrypt-then-MAC

據我了解,密文必須是塊大小的倍數,在本例中為 16 個字節。

這取決於密碼套件是什麼。對於 CBC 模式套件,例如 TLS_RSA_WITH_AES_128_CBC_SHA,就是這種情況,因為應用填充以使“明文”(包括 MAC)成為 16 的倍數。但是,對於基於 AEAD 的套件,例如 TLS_RSA_WITH_AES_128_GCM_SHA256,沒有填充涉及到,所以如果原始明文(在這種情況下,只是受保護的數據)是 92 字節長,那麼密文確實是 116 字節長。

那麼,您確定密碼套件確實是 TLS_RSA_WITH_AES_128_CBC_SHA 嗎?

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