Elliptic-Curves

為什麼 Curve25519 用於加密,而 Ed25519 用於簽名?

  • February 7, 2022

NaCl 和 libsodium 庫使用 Curve25519 進行身份驗證加密(實際上用於共享用於加密的密鑰)和 Ed25519 進行簽名。對這些操作使用不同的原語的目的是什麼?為什麼不對密鑰共享和簽名使用相同的原語?

是否有一些安全或性能方面的考慮?但是密鑰共享和簽名都依賴於曲線點乘以標量,所以我想你不能通過使用不同的曲線在這裡獲得任何東西。如果其中一條曲線更快,則在兩種情況下都應該更快。

雖然橢圓曲線 Diffie Hellman (ECDH)、橢圓曲線簽名生成 (ECDSA) 和橢圓曲線簽名驗證確實依賴於標量乘法,但出於安全和效率的原因,它們通常被實現為不同類型的標量乘法。

事實上,這些方案在實踐中使用了三種類型的標量乘法:

  • Fixed-Base:當標量乘法的輸入點在設計時已知時
  • Variable-Base:當標量乘法的輸入點事先不知道時
  • 雙基:當協議實際需要計算兩個標量乘法然後將兩個結果相加時。(例如 $ kP+rB $ )

可變基是 ECDH 中通常需要的,因為您從另一個對等方接收標量乘法的輸入點。

Fixed-Base用於密鑰生成和簽名生成。這裡的固定基始終是“生成點”,它是生成與曲線方程一起提供的素數階子群的點。

雙基用於簽名驗證(ECDSA 和 EdDSA 和 Schnorr)需要計算一些形式 $ kP+rB $ . 請注意,與 ECDH 或簽名生成不同,簽名驗證不使用任何秘密值,因此不需要恆定時間執行。

X25519 提供了一種非常簡單的、恆定時間的、快速的可變基標量乘法算法。這對 ECDH 非常有用,這就是它專門用於 ECDH 的原因。

Ed25519 提供了非常快速的固定基數雙基數標量乘法,這要歸功於快速且完整的扭曲 Edwards 加法定律。事實上,Ed25519 的定基算法在大多數平台上都比 X25519 的變基算法快。

並且使用 X25519 進行簽名驗證只是一個壞主意,因為您需要執行兩次(計算 $ kP $ 和 $ rB $ ) 然後添加一個新函式來執行兩個結果點的完全相加。此外,您正在使用不需要的恆定時間計算。相反,您可以使用交錯的 NAF 方法和扭曲的 Edwards 加法定律實現更快的實現。

注意:出於此答案的目的,我沒有區分不同的橢圓曲線簽名算法,例如 ECDSA 和 EdDSA。

舊術語令人困惑,所以他們重新命名了一點。

  • X25519 是 Curve25519 上的橢圓曲線 Diffie-Hellman (ECDH)
  • Ed25519 是 Curve25519 上的 Edwards 曲線數字簽名算法 (EdDSA)

Libsodium 的 ref10 curve25519 程式碼實際上被crypto_scalarmult()/crypto_box()crypto_sign().

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