Diffie-Hellman

如何為 TLS 生成會話密鑰?

  • March 14, 2019

我想更好地了解在建立 SSL/TLS 安全連接期間會發生什麼。

  1. 客戶端想要建立連接 - ClientHello
  2. 伺服器以 ServerHello 應答。這包括一個隨機生成的數字和一個伺服器證書
  3. 客戶端創建一個“預主密鑰”並使用其公鑰將其加密發送到伺服器。
  4. 雙方從隨機數和預主密鑰創建會話密鑰。

問題:

這與 Diffie-Hellman 密鑰協議相同嗎?在 DH 密鑰協商期間,雙方向最終生成會話密鑰的伙伴發送一個隨機密鑰。DH(原則上)是完全對稱的。為什麼來自客戶端的隨機數稱為“pre-master-secret”而來自伺服器的只是“隨機數”?

不,這與 Diffie-Hellman 密鑰協議不同。

這裡發生的是伺服器通過 RSA 解密 pre-master-secret 來驗證自己。如果伺服器能夠做到這一點,則可以使用派生的會話密鑰執行 (H)MAC 操作。

這種方案的一個問題是攻擊者可以儲存加密的預主密鑰 - 連同 TLS 會話的其餘部分。然後攻擊者可以嘗試找到私鑰值。一旦找到該特定會話的所有數據以及受私鑰保護的所有其他會話,就可以解密。

DHE_ 和 ECDHE_ 密碼套件的工作方式不同。密鑰對是即時生成的;即密鑰對是短暫的(DHE 中的 E)。客戶端和伺服器都建立一個會話密鑰。然後伺服器(或客戶端伺服器)通過執行簽名生成(用於身份驗證)進行身份驗證。這樣做的好處是每個會話都需要單獨攻擊。這被稱為(完美)前向保密。


伺服器的隨機數是不需要保護的值。它用作從 pre_master_secret 生成 master_secret 的派生數據。如果它不存在,那麼密鑰將不依賴於伺服器的隨機源。如果客戶端的隨機數生成器不安全(足夠),這是一個問題。另一方面,預主秘密需要保密。

請注意,伺服器無法向客戶端發送加密值,因為當時客戶端未經過身份驗證。

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