Aes

在 TLS 中使用 CBC 塊密碼填充大小

  • August 10, 2015

我目前正在Client FinishedWireshark 中查看來自 TLS 會話的加密消息。先前消息中商定的密碼套件是TLS_RSA_WITH_AES_256_CBC_SHA.

據我了解,加密消息應該有一個握手協議頭,它由握手類型和長度組成。這應該是總共 4 個字節。然後應該有 12 個字節verify_data,然後是 20 個字節的 MAC(SHA-1 摘要大小)。這將我們帶到 36 個字節。現在根據RFC 2246第 6.2.3.2 節,然後應該填充它,以便總長度是塊長度的倍數(在這種情況下,對於 AES-256 為 16)。

這意味著它應該有 12 個字節的填充,其中每個填充值的值為 12 (0x0C),然後是一個填充長度欄位,其值也將為 12。我不明白的是,如果你添加所有這樣,你得到一個 49 字節的加密長度,但 Wireshark 數據包有 48 個字節。

有人能夠解釋其中的區別嗎?

在 RFC2246 中,如果您總共需要 12 個字節的填充,這意味著您有 11 個填充字節,然後是一個填充長度欄位。因此,每個填充字節的值都是 11 (0x0b),以及填充長度欄位。這暗示了總 TLSCiphertext.length 必須是塊大小的倍數的要求,並且此 TLSCiphertext.length 包括填充長度欄位本身。

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