跳到主要內容

ECDH 橢圓曲線金鑰交換原理解析:以更短金鑰實現高強度安全通訊

在現代加密通訊中,ECDH(橢圓曲線 Diffie-Hellman)已成為 TLS 1.3、SSH 等協議的核心金鑰交換機制。它讓雙方能在完全公開的通道上,安全協商出一把只有彼此知道的共享金鑰。

橢圓曲線數學:為什麼比傳統 DH 更高效?

傳統 DH 的安全性建立在整數離散對數問題上,需要 2048 位元金鑰才能達到足夠強度。ECDH 改用橢圓曲線上的點群運算,其核心難題是橢圓曲線離散對數問題(ECDLP)——已知點 P 與 Q = kP,無法有效反推出純量 k。由於 ECDLP 比整數版本困難得多,256 位元的 ECC 金鑰即可匹敵 RSA/DH 的 3072 位元強度,大幅降低計算成本與頻寬消耗,特別適合物聯網與行動裝置等資源受限環境。

ECDH 金鑰交換流程:四步驟建立共享秘密

ECDH 的運作流程極為優雅。首先,雙方約定同一條橢圓曲線與基點 G(如 Curve25519 或 P-256)。接著,Alice 隨機選取私鑰 a,計算公鑰 A = aG;Bob 同樣產生私鑰 b 與公鑰 B = bG。雙方交換公鑰後,Alice 計算 S = aB = abG,Bob 計算 S = bA = abG,兩者得到相同的共享秘密點 S。攻擊者即便截獲 A、B,也無法在合理時間內還原 ab,這正是 ECDLP 的保障。最後,S 的 x 座標會通過 KDF(金鑰衍生函數)轉換為對稱加密金鑰。

from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey

alice_priv = X25519PrivateKey.generate()
bob_priv   = X25519PrivateKey.generate()

alice_shared = alice_priv.exchange(bob_priv.public_key())
bob_shared   = bob_priv.exchange(alice_priv.public_key())

assert alice_shared == bob_shared  # 雙方取得相同共享秘密

💡 重點整理

  • 金鑰效率:256 位元 ECC ≈ 3072 位元 RSA/DH 的安全強度。
  • 安全基礎:ECDLP 目前無已知多項式時間演算法可破解。
  • 曲線選擇:優先使用 Curve25519(X25519)或 NIST P-256,避免自訂曲線。
  • 前向保密:每次連線使用臨時金鑰對(Ephemeral ECDH),確保 PFS。

ECDH 以數學優雅性解決了「短金鑰、高安全」的核心矛盾。理解其原理,是掌握現代加密協議設計的重要基石。

留言