Tls
TLS1.3 加密握手
我讀到 TLS 1.3 支持加密握手。它是使用 encrypted_extensions 實現的嗎?
這是否意味著從記錄協議的角度來看,包含握手消息的記錄是加密/保護的?
或者
這是否意味著握手協議本身會加密其消息有效負載,並且從記錄協議的角度來看,記錄是純文字?
在 TLS 1.3 中,之後的所有消息
ServerHello
都是加密的。這種加密發生在EncryptedExtensions
發送之前。流量密鑰保護記錄層有效負載;他們將TLSPlaintext
結構轉換為TLSCiphertext
結構。在握手期間,將傳輸以下消息:
- 客戶 $ \rightarrow $ 伺服器:(
ClientHello
生成客戶端隨機數)- 客戶 $ \rightarrow $ 伺服器:(
ClientKeyShare
生成臨時 Diffie-Hellman 參數 $ X = g^x $ )- 伺服器 $ \rightarrow $ 客戶端:(
ServerHello
生成伺服器隨機數)- 伺服器 $ \rightarrow $ 客戶端:(
ServerKeyShare
生成臨時 Diffie-Hellman 參數 $ Y = g^y $ )此時Client和Server都可以計算出pre-master secret $ g^{xy} $ ,這是 PRF 中派生握手主密鑰 (HMS) 的一部分。然後你派生一個握手秘密交通密鑰 $ t_{hs} $ ,這取決於 HMS 和隨機數。
該
EncryptedExtensions
消息是之後發送的第一個消息 $ t_{hs} $ 生成。這個和其餘的握手消息(如ClientCertificateVerify
,ServerFinshed
等)是用加密的 $ t_{hs} $ . 在此處查看鍵是如何計算的。您可以在此處查看範例握手跟踪。(由於 TLS 1.3 仍處於草案形式,這將很快被淘汰。)