為什麼 AES-GCM 在 TLS 中需要雜湊/MAC?
“TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”只是密碼套件的一個例子,就我而言,這意味著:
它使用 TLS 協議,與 Elliptic Curve Diffie Hellman Ephemeral 交換密鑰,其公鑰使用 RSA 簽名,然後使用 AES 128 位與 Galois 計數器模式一起使用,該模式提供經過身份驗證的加密。最後一個函式是一個雜湊算法,用於計算每個數據包的消息驗證碼。
鑑於 AES-GCM 已經提供了完整性,為什麼還需要額外的雜湊算法來進行身份驗證?還是我對此的解釋有誤?
來自RFC 5246,第 6.2.3.3 節:AEAD 密碼:
AEAD 密碼將單個密鑰、隨機數、明文和“附加數據”作為輸入,以包含在身份驗證檢查中,如第 2.1 節所述
$$ AEAD $$. 密鑰是 client_write_key 或 server_write_key。 沒有使用 MAC 密鑰。 但是在RFC 5246 第 5 節:HMAC 和偽隨機函式中:
此外,出於密鑰生成或驗證的目的,需要建構將秘密擴展為數據塊。 這個偽隨機函式 (PRF) 將秘密、種子和辨識標籤作為輸入,並產生任意長度的輸出。
在本節中,我們基於 HMAC 定義一個 PRF。 當協商 TLS 1.2 時,此帶有 SHA-256 散列函式的 PRF 用於本文件和在本文件之前發布的 TLS 文件中定義的所有密碼套件。新密碼套件必須明確指定 PRF,並且通常應該使用帶有 SHA-256 或更強標準雜湊函式的 TLS PRF。
最後,在 HMAC 的散列函式中還使用主密鑰來驗證 Finished 消息中的握手;請參閱RFC 5246,第 7.4.9 節:完成:
雜湊表示握手消息的雜湊。 對於第 5 節中定義的 PRF,雜湊必須是用作 PRF 基礎的雜湊。任何定義不同 PRF 的密碼套件還必須定義要在 Finished 計算中使用的 Hash。
因此,它用於密鑰派生和身份驗證以及握手成功的最終確認,而不是用於在數據消息上生成 MAC。