Tls

TLS1.3 加密握手

  • June 3, 2017

我讀到 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 仍處於草案形式,這將很快被淘汰。)

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