Aes

為什麼 AES-GCM 意味著沒有 MAC 密鑰,而不是他們將使用的 MAC 密鑰?

  • June 20, 2022

來自 RFC 5246,第 6.2.3.3 節:AEAD 密碼:

AEAD 密碼將單個密鑰、隨機數、明文和“附加數據”作為輸入,以包含在身份驗證檢查中,如第 2.1 節所述

$$ AEAD $$. 密鑰是 client_write_key 或 server_write_key。沒有使用 MAC 密鑰。 我無法理解這意味著什麼?它與CBC相比有什麼不同?

TLS 記錄需要保護機密性(防止攻擊者了解其內容)和真實性(防止攻擊者在傳輸過程中修改它們)。因此它們受到經過身份驗證的加密的保護。

較舊的 TLS 密碼套件通過將未經身份驗證的加密算法(CBC 模式中的分組密碼,或流密碼 RC4)與 MAC(始終為 HMAC)相結合來進行身份驗證加密。加密部分和認證部分由不同的原語完成,因此它們都有自己的密鑰。CBC 或 RRC4 本身並不能防止修改:中間人可以修改密文,而這種修改不一定會被檢測到。在 TLS 中,此類修改允許,例如,填充預言攻擊,如幸運十三,因為 CBC 填充未經過身份驗證。

較新的 TLS 密碼套件(在 TLS 1.2 中引入)使用經過身份驗證的加密原語進行身份驗證加密,例如 GCM 或 CCM 模式下的分組密碼,或 ChaCha20+Poly1305。身份驗證原語使用單個密鑰處理所有事情。由於認證加密保護了數據的機密性和真實性,如果攻擊者試圖修改傳輸中的數據,就會被檢測到:當接收者試圖對密文進行認證解密時,結果將是認證失敗而不是明文。

TLS是一種通信協議;雙方都需要從共享的主密鑰中導出相同的記錄保護密鑰。協議定義指定如何從主密鑰派生最多兩個密鑰。當使用單獨的原語進行加密和認證時,其中一個密鑰用作加密密鑰,另一個用作認證密鑰。當使用單個經過身份驗證的加密原語時,其中一個密鑰(有點隨意,加密密鑰)用作經過身份驗證的加密密鑰,而不使用另一個密鑰。

在幕後,經過身份驗證的加密所做的事情類似於使用一個密鑰和 MAC 使用另一個密鑰進行加密。但並非完全如此,細節取決於經過身份驗證的加密原語。每種算法都有自己的方法,從原始密鑰派生出兩個密鑰,一個密鑰用於流密碼,另一個密鑰用於一次性身份驗證器。一次性身份驗證器類似於 MAC,但當相同的密鑰用於不同的消息時,它是不安全的。(在 CCM 的情況下,兩個部分都使用一個密鑰。)因此,內部認證密鑰不僅來自原始密鑰,還來自隨機數。

AEAD 在內部計算加密數據的雜湊值。該雜湊與加密數據一起發送。

將第二個雜湊作為 MAC 與 MAC 密鑰一起添加不會提供更高的安全性。將 MAC 密鑰應用於 AEAD 生成的雜湊也不會提高安全性。這兩種變體只會增加消息大小並減慢處理速度。

因此省略了額外的 MAC + MAC 密鑰。

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