Elliptic-Curves

在 secp256k1/r1 上進行模冪運算的更好算法

  • October 6, 2021

我知道模冪( $ r = b^e \bmod m $ ) 對 RSA 很重要,我可以找到一些算法,如果 e 以二進制形式表示(對於 exp: )——對於 n 位長 e,可以預期 ~1.5n 輪乘模運算。

我正在為像 secp256k1/r1 這樣的 ECC 制定公鑰恢復方法。secp256k1 庫中有一個非常有效的實現,但它是用 ASM 程式碼編碼的——很難理解。但至少我知道第一步——你需要恢復 $ ry $ 來自 $ rx $ (即簽名的 r)。很容易得到 $ ry^2 $ 從 $ rx $ ,但接下來我需要做平方根模——可以在現場轉換為冪模,即 $ e= (p+1)/4. $

好的,所以現在的問題是:

  1. 除了通常的模冪運算之外,還有更好的算法來計算 ( $ r = b^e \bmod m $ )?
  2. 或者,是否有任何專門針對 secp256k1 的捷徑算法,我根本不需要執行模冪運算並且仍然能夠恢復 $ ry $ 從 $ rx $ ?

問題的密碼系統中沒有模乘法的替代品。某些語言(例如 Python)使教育目的變得容易,只有.

在 RSA 和 DSA 中,以及secp256k1secp256r1上的較小程度的 ECC 加密中,需要計算 $ b^e\bmod m $ 對於大 $ e $ . 最快的算法(例如滑動視窗求冪)執行大約 $ \log_2 e $ 模平方等 $ \approx0.2,\log_2 e $ 模乘法。然而,從安全性的角度來看,還有其他算法成本稍高(例如蒙哥馬利梯子),可能更好。

每個模乘或平方模 $ m $ ,對於上述或(在 ECC 中)點加法或標量乘法,計算成本最多增長 $ (\log m)^2 $ 使用小學時學習的算法適應電腦單詞而不是數字時。這可以降低到 $ (\log m)^{\approx1.6} $ 與Karatsuba或 $ (\log m)^{\approx1.5} $ 使用Toom-3,但在 ECC 中是模數 $ m $ 不夠大,支付的費用不夠多( $ m $ 是 ECC 中的“僅”幾百位,而不是 RSA/DSA 中的幾千位)。

出於教育目的使用secp256k1secp256r1從頭開發簽名或加密時,通常有以下幾個階段:


一些關於模乘和取冪(不是 ECC)的線上參考資料:

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