文章目錄
- 一、什么是ECDH?
- 二、為什么需要 ECDH?要解決什么問題?
- 三、原理與圖示
- 四、核心比喻:混合顏料
- 五、技術實現步驟
- 1. 約定公共參數
- 2. 生成密鑰對
- 3. 交換公鑰
- 4. 計算共享密鑰
- 5. 密鑰派生
- 六、注意事項
- 七、安全性基礎
- 八、優勢特點
- 九、典型應用場景
- 十、相關標準
ECDH是一個非常重要且廣泛應用的密碼學協議,用于在不安全的通信通道上安全地生成一個共享的密鑰。
一、什么是ECDH?
ECDH (Elliptic Curve Diffie-Hellman) 是一種基于橢圓曲線密碼學(ECC)的密鑰協商協議。它允許兩個通信方在不安全的信道上,通過交換公開信息,獨立地推導出一個相同的共享秘密(Shared Secret)。
該共享秘密通常作為對稱加密算法(如AES)的密鑰,用于加密后續的通信內容。
其安全性依賴于橢圓曲線離散對數問題(ECDLP) 的計算困難性:已知橢圓曲線上的點 G
和 k * G
,計算私鑰 k
在計算上是不可行的。
二、為什么需要 ECDH?要解決什么問題?
想象一下,Alice 和 Bob 想在網上安全地聊天,但他們之間只有一個公開的、可能被竊聽的網絡(比如公共Wi-Fi)。
-
問題:
他們需要同一個密鑰來用 AES 加密和解密消息。但如何把這個密鑰通過不安全的網絡傳給對方?如果直接發送密鑰,竊聽者 Eve 也會得到它。 -
解決方案:
使用 ECDH。他們不需要直接傳遞密鑰本身,而是通過交換一些公開的信息,并結合自己私密的信息,各自獨立地計算出同一個共享密鑰。即使 Eve 聽到了所有公開信息,她也無法計算出這個密鑰。
這解決了密鑰分發的難題。
三、原理與圖示
ECDH的核心過程可以用下圖清晰地展示。它完美地演繹了如何從公開的交換中產生一個私有的共享密鑰。
數學原理:
結合律確保了雙方計算的最終結果一致。
a * B = a * (b * G) = (a * b) * G = (b * a) * G = b * (a * G) = b * A
攻擊者即使截獲了公鑰 A 和 B,由于無法解決ECDLP問題(從 A 求 a 或從 B 求 b),因此也無法計算出共享秘密 a * b * G
。
四、核心比喻:混合顏料
- 公共參數:雙方使用相同的"黃色"顏料(橢圓曲線參數)
- 私密信息:Alice 選擇"紅色",Bob 選擇"藍色"(各自的私鑰)
- 公開交換:
- Alice 發送"黃+紅=橙紅"(她的公鑰)
- Bob 發送"黃+藍=綠藍"(他的公鑰)
- 最終共享:
- Alice 計算"綠藍+紅=黃褐"(共享密鑰)
- Bob 計算"橙紅+藍=黃褐"(共享密鑰)
- 安全性:竊聽者無法從公開的混合顏色中分離出原始私密顏色
五、技術實現步驟
1. 約定公共參數
- 選擇相同的橢圓曲線(如 secp256k1、P-256)
- 確定曲線上的公共基點 G
2. 生成密鑰對
Alice 端:
- 生成隨機私鑰
a
(大整數) - 計算公鑰
A = a * G
(橢圓曲線標量乘法)
Bob 端:
- 生成隨機私鑰
b
(大整數) - 計算公鑰
B = b * G
3. 交換公鑰
- Alice 將公鑰 A 發送給 Bob
- Bob 將公鑰 B 發送給 Alice
4. 計算共享密鑰
Alice 計算: S = a * B
Bob 計算: S = b * A
由于橢圓曲線乘法滿足結合律:
a * B = a * (b * G) = b * (a * G) = b * A
5. 密鑰派生
通常對共享點 S 的 x 坐標進行哈希處理,得到最終會話密鑰(Session key)。
六、注意事項
事項 | 說明與建議 |
---|---|
曲線選擇 (Curve Selection) | 使用標準化、廣泛審計的曲線: ? NIST 曲線: prime256v1 (P-256), secp384r1 (P-384)? 其他安全曲線: curve25519 (常用于現代協議如 Signal)避免使用冷門、未經驗證或可能包含后門的曲線。 |
密鑰派生函數 (KDF - Key Derivation Function) | 絕對不要直接使用原始共享秘密。 原始ECDH輸出的字節串可能缺乏均勻熵分布。必須使用 HKDF 等密碼學安全的KDF對其進行加工,以生成長度固定、隨機性均勻的加密密鑰材料。這是生產環境中的必須步驟。 |
前向保密 (Forward Secrecy) | 基礎ECDH不天然具備前向保密。為實現FS(推薦),應使用 ECDHE (Ephemeral,短暫地),即每次會話都生成臨時的密鑰對。這樣,即使攻擊者獲取了某一方的長期私鑰,也無法解密過去的通信會話。 |
身份驗證 (Authentication) | 基礎ECDH易受中間人攻擊 (MITM)。協議本身不驗證公鑰所屬者的身份。 解決方案:必須結合數字簽名(如ECDSA)或數字證書來對交換的公鑰進行認證,確保你正在與預期的通信方而非攻擊者建立密鑰。 |
側信道攻擊 (Side-Channel Attacks) | 軟件實現必須能夠抵抗時序攻擊(Timing Attacks)等側信道攻擊。使用像 OpenSSL、Libsodium 這樣的成熟密碼學庫,而不是自己實現底層算法,這些庫通常已經包含了針對此類攻擊的防護。 |
隨機數生成 (Random Number Generation) | 私鑰 a 和 b 必須是密碼學安全的真隨機數。使用安全的隨機數生成器(如 /dev/urandom 、CryptGenRandom、BCryptGenRandom)。弱的隨機數生成會導致私鑰被預測,整個協議安全形同虛設。 |
七、安全性基礎
基于橢圓曲線離散對數問題(ECDLP) 的計算困難性:
- 已知公鑰 A 和基點 G,計算私鑰 a 在計算上不可行
- 即使攻擊者截獲所有公開參數(A, B, G),也無法計算出共享密鑰 S
八、優勢特點
特性 | 描述 |
---|---|
前向保密 | 每次會話使用臨時密鑰對,長期私鑰泄露不影響歷史會話安全 |
高效性 | 較短的密鑰長度(256位)即可提供足夠安全性,計算資源需求低 |
帶寬友好 | 公鑰尺寸小,適合帶寬受限環境 |
九、典型應用場景
- TLS/SSL:保護 HTTPS 連接安全
- SSH:安全遠程訪問
- 加密消息:Signal、WhatsApp 等端到端加密
- 區塊鏈:比特幣/以太坊地址生成和交易簽名
- VPN:WireGuard 等現代VPN協議
- 物聯網:設備間安全通信
十、相關標準
- NIST 曲線系列:P-256、P-384、P-521
- 比特幣曲線:secp256k1
- 國家標準:SM2(中國商用密碼算法)
注意:實際應用中需要結合適當的哈希函數和密鑰派生函數(如 HKDF)來從共享密鑰派生出實際使用的加密密鑰。