Elliptic-Curves

橢圓曲線如何影響伺服器密鑰交換參數

  • October 17, 2018

在有限域 DHE 中,伺服器在伺服器密鑰交換消息中發送以下參數: $ p $ : 主要 $ g $ : 團體 $ g^b $ : 伺服器的 DH 公鑰

在 DHE_RSA(非匿名 DHE)中,伺服器對參數進行簽名。根據規格的完整參數是:

伺服器密鑰交換( $ p $ , $ g $ , $ g^b $ , 符號(雜湊( $ \mathit{server_nonce} $ , $ \mathit{client_nonce} $ , $ p $ , $ g $ , $ g^b $ ))

客戶端向它發送包含客戶端公共 DH 密鑰的 ClientKeyExchange:

客戶密鑰交換( $ g^a $ )

ECDHE 使用橢圓曲線,這需要不同的方法來選擇關鍵參數。

1)對於TLS消息,如果密鑰交換是Elliptic-Curve而不是Finit-Field,這究竟是如何影響上面的參數和消息的?就客戶端和伺服器發送的確切參數而言,它有什麼變化?

2)在關鍵參數方面,Elliptic-Curve是否改變了雙方計算pre-master-secret的方法?在 Finit-Field 中,客戶端的 pre-master-secret 由以下公式計算:

$ pms = g^{ab} $

伺服器也一樣:

$ pms = g^{ab} $

由於EC不使用 $ g $ ,pre-master-secret 是否仍然通過將其他對等方的公共 ECDHE 參數乘以其私有 ECDHE 參數來計算?IE:

$ pre_master_secret_{Server} = ECDHE_pk _{Client} \times ECDHE_sk _{Server} $

通常使用一組預先選擇的參數:命名曲線,例如brainpoolP256r1。此處的參數已預先選擇。動態選擇EC 域參數在計算上是低效的,最好對方應該能夠確保安全地生成參數。所以 $ p $ 和 $ g $ 用於有限域 DH 的通常由表示域參數的單個標識符(例如,文本或 OID,取決於實現)替換。

曲線參數也可以使用實際值來傳達。對於素數場上的曲線,參數為:

  • 素數場 $ p $ ;
  • 係數 $ A $ 和 $ B $ ;
  • 基點 $ G $ 由座標組成 $ x $ 和 $ y $ ;
  • 主要順序 $ q $ ;
  • 輔因子 $ h $ ,通常設置為 1。

有時還會傳遞種子(用於生成參數)。


這裡的基點 G 的作用與 $ g $ 在有限域上的 Diffie-Hellman。您可以在這裡找到完整的描述,而不是重複答案。


一般來說,ECDH 是使用點乘法而不是求冪來描述的。

讓我們用以下方式描述它:

  • $ P $ 對於公鑰(所以 $ P_A $ 是的公鑰 $ A $ )
  • $ S $ 對於私鑰(所以 $ S_A $ 是私鑰 $ A $ 叫 $ a $ 在問題中)
  • $ X $ 是共享的秘密,因為我們用完了變數名
  • $ {}\times{} $ 是點乘法

計算公鑰:

  • FFDH: $ P_A = g^{S_A} $
  • ECDH: $ P_A = S_A \times G $

以及關鍵協議本身:

  • FFDH: $ X_B = P_A^{S_B} \to X_B = (g^{S_A})^{S_B} \to X_B = g^{S_AS_B} $
  • ECDH: $ X_B = S_B \times P_A \to X_B = S_B \times (S_A \times G) \to X_B = S_A \times S_B \times G $

對於兩者,您都可以看到它們依賴於模冪和點乘法的交換性質。很容易看出 $ X_A = X_B $ 使用這兩種方法。

可以簡單地寫 $ g^a $ 並說正常的冪函式表示循環群中的乘法。所以在那種情況下 $ g^a $ 將被視為 $ g \times a $ 對於橢圓曲線。 $ g $ 然而,通常用大寫寫成 $ G $ (不要與循環組混淆 $ G $ ) 因為它是一個,而不僅僅是一個數字。


儘管 EC 操作通常使用乘法和(點)加法來描述,但重要的是要不斷提醒自己正在操作的模型中。ECC中有很多方法和方法來映射變數,使得一個難以理解的領域更加難以掌握。

最後,您的 CPU 仍然必須執行模冪運算才能實現點乘。然而,模冪運算是針對較小的數字,使其更有效。

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