Signature

secp256k1 素數模數與階數

  • November 20, 2020

對於曲線 secp256k1 素數模數是 $ 2^{256}-2^{32}-977 $ 並且 order 是較小的數字,但設置了近一半的起始位。如果我繪製數字作為私鑰,它必須小於訂單。所有欄位操作都是模素模數,這意味著它們必須小於模數,但可以> = order?(或不?)。公鑰座標可以超階嗎?一個非常有趣的案例是在簽名和驗證中:在虛擬碼中:來自 nayuki 庫的模數順序。

* if (nonce outside range [1, order-1]) return false
* p = nonce * G
* r = p.x % order
* if (r == 0) return false
* s = nonce^-1 * (msgHash + r * privateKey) % order
* if (s == 0) return false
* s = min(s, order - s)

這意味著,操作完成,第一個模數 p,下一個模數順序?

是的,現場操作可能涉及大於訂單的數字。公鑰點座標可能超出順序。

處理標量的部分協議以曲線順序為模工作,而處理橢圓曲線點的部分以素數模數工作。

有時,正如您所指出的,一些資訊在這些域之間“交叉”:主要情況是在 ECDSA 協議內部,其r值是從 X 座標獲得的,並在計算s.

所有欄位操作都是模素模數,這意味著它們必須小於模數,但可以 $ \ge $ 命令?

是的,理論上這可能會發生,但這種情況很少見。在場中操縱的所有量通常在 $ [0,p) $ 當減少模 $ p $ . 因此他們很少超過 $ n $ . 機率大約是 $ 1-n/p\approx2^{-127.65} $ . 也就是說,在實踐中從來沒有。

我看不出如何在未修改的密鑰生成器或簽名程式碼中故意觸發它,即使考慮到 base point 的特殊形式。但是,如果需要,這很容易添加到點加法/乘法測試程式碼中。它可以在某種程度上用於簽名驗證碼,儘管使用沒有已知匹配私鑰或有效簽名的公鑰。

這意味著,操作完成,首先模模 $ p $ ,下一個模數順序?

是的。點座標的算術是模 $ p $ ,場序。乘數、隨機數和簽名分量的算術是模數 $ n $ ,橢圓曲線組階。一個例外是當 X 座標在 $ [0,p) $ 減少模數 $ n $ . 如果座標在此處,存在編碼錯誤的空間 $ [n,p) $ . 下限 $ n $ 被 ECDSA 的定義排除在外,但 $ (n,p) $ 已驗證。

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