Rsa

當 RSA 已用於 TLS 中的密鑰交換時,為什麼需要 Diffie-Hellman 密鑰交換?

  • October 23, 2019

特別是 TLS,

  1. 密鑰交換期間 RSA 的用途是什麼?
  2. Diffie-Hellman 是做什麼用的?
  3. 既然 RSA 已經提供了真實性和保密性,為什麼在交換過程中使用 Diffie-Hellman?
  4. 我聽說 DH 交換不安全。在具有 Diffie-Hellman 交換的 RSA 中,這是需要擔心的事情嗎?
  5. 如果 DH 用於前向保密。僅生成新的 RSA 密鑰對並與之交換密鑰有什麼問題?

使用 Diffie-Hellman 和 RSA 是我對現代公鑰密碼學不了解的一件事。

  1. 密鑰交換期間 RSA 的用途是什麼?

RSA 可用於 (a)使用其他一些密鑰協議機制 (ciphersuites )簽署TLS_*DH*_RSA_WITH_*密鑰協議副本,或 (b) 讓客戶端加密它作為經過身份驗證的密鑰協議發送給伺服器的預主密鑰TLS_RSA_WITH_*(ciphersuites) )。

預主密鑰確定會話中對等方交換的記錄使用對稱加密和認證的密鑰,例如使用 AES-GCM。

在這兩種情況下,伺服器都會執行私鑰操作來證明其身份:在 (a) 中,它使用伺服器的長期公鑰簽署密鑰協議記錄,生成客戶端(和其他任何人)可以驗證的簽名;在 (b) 中,它解密客戶端的預主密鑰,證明它能夠解密加密到伺服器長期公鑰的消息。

請注意,在 TLS 1.3 中,RSA 密鑰協議即將消失。

  1. Diffie-Hellman 是做什麼用的?

Diffie-Hellman,在有限域或橢圓曲線上,可用於臨時或靜態密鑰協商。

在臨時情況下,雙方生成並交換新的密鑰對,並使用它來就預主密鑰達成一致,然後他們通過另一種方式對其進行身份驗證,例如 RSA 或 ECDSA 簽名。(請注意,原則上您可以將 DH 用於密鑰協議身份驗證,但在 TLS 中沒有人這樣做。)

在靜態情況下,至少一方(通常是伺服器)具有長期 DH 公鑰,另一方(通常是客戶端)與 DH 私鑰結合以導出預主密鑰。伺服器通過從其私鑰和客戶端(臨時或靜態)公鑰派生相同的預主密鑰來證明其身份。(靜態DH用的不多。)

  1. 既然 RSA 已經提供了真實性和保密性,為什麼在交換過程中使用 Diffie-Hellman?

Diffie–Hellman 提供了一個快速密鑰協商程序,循環次數少,支持快速密鑰擦除:一旦會話完成,DH 私鑰的所有副本、派生的預主密鑰、派生的主密鑰、,可以被同行擦除。快速密鑰擦除意味著破壞長期身份密鑰不會啟用會話的追溯解密

相比之下,使用 RSA 密鑰協議,未來對伺服器長期身份密鑰的妥協使攻擊者能夠追溯解密過去的會話,因為會話密鑰都被加密為伺服器的長期身份密鑰。

  1. 我聽說 DH 交換不安全。在具有 Diffie-Hellman 交換的 RSA 中,這是需要擔心的事情嗎?

人們可能會擔心很多安全問題。也許您的朋友擔心受支持的密碼套件中的歷史錯誤;也許您的朋友擔心在一般素數上的有限域算術中的時序側通道;也許您的朋友擔心動態 DH 組選擇和驗證不足;也許你的朋友關心橢圓曲線的選擇。但我無法讀懂你朋友的想法:你必須更具體。

  1. 如果 DH 用於前向保密。僅生成新的 RSA 密鑰對並與之交換密鑰有什麼問題?

您可以為每個會話生成一個新的 RSA 身份密鑰,要求您的證書頒發機構為該密鑰簽署證書,然後將其用於 RSA 密鑰協議。

這將是有史以來最昂貴的 TLS 堆棧,因為與生成 DH 密鑰相比,生成 RSA 密鑰非常昂貴(並且需要不可預測的啟動時間),明智的認證機構將其密鑰儲存在您不使用的硬體安全模組中希望附加到您的 TLS 前端,並且明智的證書頒發機構對證書有詳盡的審計跟踪,包括您可以在crt.sh瀏覽的證書透明度日誌。

您可以使用臨時 RSA 密鑰設計一個基於 RSA 的密鑰協商協議,而不涉及您的 CA,但是生成 RSA 密鑰仍然非常昂貴,並且需要在對等方之間進行額外的往返,並且您仍然需要找到一些驗證它們的方法。

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