ECDHE 生成密鑰對?
根據我對基本 Diffie Hellman 方案的理解,最終結果是 1 個雙方都知道的密鑰,現在可以用於對稱加密。
根據我對提供 PFS 的 ECDHE-RSA 方案的理解,出於計算考慮,創建了一對臨時 DH 密鑰而不是另一個 RSA 對。
我似乎無法理解創建 DH 公鑰 + 私鑰對的 ECDHE-RSA 的過程如何類似於產生 1 個密鑰而不是 2 個密鑰的基本 Diffie Hellman 方案。
SSL/TLS 中是否使用了維基百科中簡單地用顏色描述的實際基本 Diffie Hellman 方案?
我對這個問題感到困惑,因為似乎 ECDHE-RSA 程序實際上是一個“RSA-RSA”程序,只是密鑰的生成是由 DH(?)?
**所有 Diffie-Hellman(包括 EC)都使用兩個密鑰對並生成一個共享密鑰。**維基百科文章中的顏色只是一個比喻;原始 DH 的實際過程,如果需要區分,現在改稱為“整數”或“有限域”DH,使用一個足夠大的生成子群的整數乘法群模素數(在目前實踐中,2048 位素數) ,而橢圓曲線DH(ECDH)使用滿足某些標準的橢圓曲線,或者更準確地說是曲線上由一個基點生成的組。
**短暫的只是(!)關於時間。**DH 要求各方在密鑰協商操作時(對於 TLS,即創建會話的握手)都有一個密鑰對(私鑰和公鑰)。它不關心這些鍵在操作之前多久被創建,或者在操作之後它們被保留多長時間。你可以創建一個 DH 密鑰對並在你的一生中使用它,假設它足夠強大並且你保證它的安全,或者你可以每毫秒創建一個新的密鑰對,並且 DH 算法(整數或 EC)的工作方式完全相同。
但是,實際上,要使用最多幾分鐘或幾小時的密鑰對,您通常需要將其儲存在某個地方,因為電腦偶爾會出現故障或由於各種原因必須關閉。儲存的密鑰對總是存在被洩露的風險,儘管可以使用多種方法來防止洩露。
(EC)DH 的臨時模式不****儲存密鑰對,因此避免了這種風險。它們在執行密鑰協議之前立即創建(在每一端),並在之後立即丟棄(安全!)。這提供了完美的前向保密,或者只是前向保密。除非您有像 Heartbleed 這樣的錯誤,或者其他諸如共享虛擬機互動之類的側通道,否則攻擊者可以在它在記憶體中的短暫時間內獲取該資訊。
是的,在 TLS 中使用了臨時 DH 和 ECDH,包括但不限於 DHE-RSA 和 ECDSA-RSA,如@SEJPM 所述,它們使用 RSA進行身份驗證(簽名),而不是臨時 RSA,主要是因為生成 RSA 密鑰的成本更高並且在特別是在會話啟動時通常成本太高,而生成長期(通常一年或更長時間)用於身份驗證的 RSA 密鑰非常實用。
只是為了詳細說明 1 key, 2 key, 1 shared secret 問題:
在 DH 中,兩個使用者都以整數開頭 $ x_A, x_B $ (密鑰)。
然後 $ g^{x_A}, g^{x_B} $ (公鑰)被交換並且共享秘密被計算為 $ g^{x_Ax_B} $ .
這些可以被視為私鑰/公鑰的原因是因為您還可以保留 $ x $ 和 $ g^x $ . 然後有人可以通過選擇一個新的秘密來加密給你的消息 $ y $ 並發送給你們 $ g^y $ 並且使用一些派生的密鑰加密的消息 $ g^{xy} $ .
這只是通常的 DH,但一方保持相同的值,並且另一方已經知道。