淺嘗 ECDHE 協議流程

前言ECDHE 我之前是聽都沒聽過, 但是新業務需要對前后端通信進行加密, 經過大佬推薦才知道有這個東西, 經過幾天的學習和踩坑, 才大致明白其流程和使用方式.過程坎坷, 好在最后還是成功運用到了業務中, 大大提高了業務的安全性. 這里記錄一下本人對 ECDHE 的理解和注意要點
ECDHE橢圓曲線迪菲-赫爾曼金鑰交換 - 維基百科,自由的百科全書 (wikipedia.org)我們先來說說 ECDH, ECDH(Elliptic Curve Diffie–Hellman key exchange) 是一種密鑰協商協議, 其精髓是通過橢圓曲線算法(ECC), 讓客戶端和服務端不傳輸私鑰(需要傳輸公鑰), 就可以計算出一樣的結果(共有加密資料), 即使協商過程被第三方(中間人)知曉和監聽, 也不會泄露密鑰.而 ECDHE(ECDH Ephemeral) 與 ECDH 無本質差別, 他們協商的流程一模一樣, 只是ECDHE代表協商出的共有加密資料是臨時的, 就算當前的加密資料泄露, 也不會影響其之前的歷史數據被解密, 這是使用方式決定的, 大白話意思就是, 我們通過 ECDH 生成的共有加密數據有實效性, 會通過邏輯在一段時間或特定事件后重新協商, 而不是只協商一次, 如果只協商一次, 如果共有加密資料被泄露, 則之前的所有數據都可以解開. 這種共有加密數據資料泄露也不會對歷史數據有影響的特性在密碼學中被稱為 前向安全性.
橢圓曲線密碼學(ECC)ECC 是 ECDH 的核心橢圓曲線密碼學 - 維基百科,自由的百科全書 (wikipedia.org)JavaScript ECDH Key Exchange Demo (stanford.edu)橢圓曲線算法(ECC) 是一種基于橢圓曲線數學的公開密鑰加密算法, ECC 相比于 RSA 來講, 有更短的密鑰長度和相同等級的安全性(ECC被廣泛認為是在給定密鑰長度的情況下,最強大的非對稱算法 , 因此在對帶寬要求十分緊的連接中會十分有用.)而且, ECC可以定義群之間的雙線性映射, 即通過兩個向量空間上的元素, 生成第三個向量空間上的元素的函數. 這使得他可以讓兩對數據通過交換和計算得出相同結果ECC 算法衍生出了一些加密協議, 常見的有 ECDHE, MQV, ECDSA 等

  • ECC 的公鑰其實對應了橢圓曲線數學的 XY 坐標, 根據種子隨機生成
  • ECC 的私鑰對應了橢圓曲線數學的 a 參數, 與公鑰對應
  • ECC 計算出的 share 也是 XY 坐標
  • ECC 的種子有公開的幾個, 例如secp128r1/secp256r1/secp192k1
橢圓曲線數學橢圓曲線的數學原理在這里橢圓曲線 - 維基百科 , 自由的百科全書 (wikipedia.org)常言道, 學好數理化, 走遍天下都不怕. 可惜我是宅男, 不愛出門這個原理在我的理解范疇之外了, 如果你對數學有興趣, 可以嘗試了解
三者關系先誕生出的橢圓曲線數學公式, 而后有的基于橢圓曲線數學公式的密碼學算法 ECC, 而ECC 又衍生出一些加密協議和協議, ECDH就是其中一種
破解概率直接引用 wiki 原文
如果攻擊者擁有大型量子計算機,那么他可以使用秀爾算法解決離散對數問題,從而破解私鑰和共享秘密 。目前的估算認為:破解256位素數域上的橢圓曲線 , 需要2330個量子比特與1260億個托佛利門 。相比之下 , 使用秀爾算法破解2048位的RSA則需要4098個量子比特與5.2萬億個托佛利門 。因此,橢圓曲線會更先遭到量子計算機的破解 。目前還不存在建造如此大型量子計算機的科學技術,因此橢圓曲線密碼學至少在未來十年(或更久)依然是安全的 。但是密碼學家已經積極展開了后量子密碼學的研究 。其中,超奇異橢圓曲線同源密鑰交換(SIDH)有望取代當前的常規橢圓曲線密鑰交換(ECDH)
ECDH 協商流程【淺嘗 ECDHE 協議流程】前面說過, ECDHE 和 ECDH 不同是協商出的密鑰有效期, 實際上協商流程是一致的, 所以這里嚴謹一點, 就叫 ECDH 協商流程ECDH 本身的協商流程如下圖所示(按照數字編號走流程):
淺嘗 ECDHE 協議流程

文章插圖
上面說過, ECDH實際上是協商共享加密數據的過程, 難點在 ECC 的本身實現, 而交換的過程很簡單, 互相發送自己生成的公鑰即可, 公鑰其實就是橢圓算法中的計算所需的 X/Y 坐標.
安全性中間人只監聽數據兩端協商密鑰的過程中, 均未傳輸自己的私鑰.這樣, 即使有中間人監聽了兩端之間的網絡數據, 也只能獲取到兩端的公鑰, 無法計算出真正的 shareX/shareY , 如圖所示:
淺嘗 ECDHE 協議流程

文章插圖
中間人監聽并偽造客戶端和服務端如果中間人能做到, 同時偽造成客戶端和服務端(對于客戶端來講是服務端, 對于服務端來講是客戶端), 那么ECDH生成的共享加密數據, 客戶端與服務端無法對應

推薦閱讀