Curve25519 over Ed25519 用於密鑰交換?為什麼?
我一直在閱讀信號協議(在此PDF中),它似乎將Curve25519用於 ECDH 和EdDSA(帶有 Ed25519)用於簽名。
我的問題是為什麼不只使用 Ed25519?
此實現支持 Ed25519 和密鑰交換,那麼 Curve25519 需要什麼?
是否有任何優於 Ed25519 密鑰交換的安全注意事項?
CryptoSE 的這個問題回答了為什麼要使用 Ed25519 而不是 Curve25519 進行簽名,但為什麼不使用 Ed25519 進行密鑰交換?
這裡有幾個不同的相關部分,您引用的庫的命名有點令人困惑。
- Curve25519是有限域上的橢圓曲線 $ \mathbb F_p $ , 在哪裡 $ p = 2^{255} - 19 $ , 名稱的 25519 部分由此而來。具體來說,就是蒙哥馬利曲線 $ y^2 = x^3 + 486662 x^2 + x $ ,但你不需要知道除了它被設計為允許快速計算之外的細節 $ x([n]P) $ 給定 $ n $ 和 $ x(P) $ 這對於 Diffie-Hellman 密鑰協議很有用。
(旁注:有時蒙哥馬利表格是用字母寫的 $ u $ 和 $ v $ 如在 $ v^2 = u^3 + 486662 u^2 + u $ ,尤其是在與 Weierstrass 或 Edwards 等另一種形式形成對比時。)
- X25519是基於 Curve25519 建構的 Diffie-Hellman 函式。X25519 公鑰是 $ x $ Curve25519 上一個點的座標,因此得名 X25519。
(歷史註釋:X25519 最初被稱為 Curve25519,但現在 Curve25519 僅表示橢圓曲線,X25519 表示密碼系統。)
- Edwards25519是同一場上的橢圓曲線,具有不同的形狀,扭曲的 Edwards 形狀 $ -x^2 + y^2 = 1 - (121665/121666) x^2 y^2 $ ,它允許快速計算 $ P + Q $ 鑑於 $ x $ 和 $ y $ 座標 $ P $ 和 $ Q $ . 它通過雙有理圖與Curve25519相關,因此Curve25519上的大多數點都可以映射到edwards25519,反之亦然。
- Ed25519是由 edwards25519 建構的公鑰簽名方案,使用 EdDSA 結構。Ed25519 公鑰是 $ x $ 和 $ y $ edwards25519 上一個點的座標。
Curve25519和X25519最先開發;然後 Harold Edwards 出現並通過發明可以計算的 Edwards 曲線讓 Dan Bernstein 和 Tanja Lange 震驚 $ P + Q $ 在恆定時間內比任何其他曲線形狀都快,並且與其他曲線形狀的可變時間(即洩漏)公式競爭。幸運的是,結果證明 Curve25519 雙有理等效於(扭曲的)愛德華茲曲線,導致 Ed25519。 在 Curve25519 和 edwards25519 的雙有理等價下,每個 X25519 公鑰對應兩個可能的 Ed25519 公鑰。 正如 Ruggero 所解釋的,Curve25519 承認更快的可變基標量乘法,而 edwards25519 承認更快的定基標量乘法和雙基標量乘法。
那麼,如果您想使用相同的密鑰材料進行密鑰協商和簽名,您會怎麼做呢?有幾個選項:
- 您引用的庫使用 edwards25519 點作為公鑰,並將它們即時轉換為 Curve25519 $ x $ 關鍵協議的座標。如果您完全控制公鑰格式並且可以選擇使用 edwards25519 點,這很簡單並且有效。 呼叫函式很混亂
ed25519_key_exchange
,但這就是生活。- Signal 使用的 XEd25519 使用 Curve25519 $ x $ 座標作為公鑰,對於簽名,總是選擇 edwards25519 上的“正”點作為對應的 Ed25519 公鑰。如果您已經部署了很多公鑰,並且您真的不想重新部署它們只是為了確定哪些是正數,哪些是負數,這很有用。
- 簽名方案 qDSA 遵循 Mike Hamburg 的 Strobe 中使用的想法,使用 Curve25519 $ x $ 座標作為公鑰,並使用 EdDSA 簽名方程的變體來利用蒙哥馬利階梯並完全避免 Edwards 形狀和點加法。如果您想要非常小的程式碼(例如在微控制器上),這很有用,在這種情況下,擁有幾個不同的標量乘法常式成本很高,例如固定基數與雙基數。