Ecdsa

secp256k1 曲線上的素數選擇 2^256-2^32-977 背後的原因是什麼?

  • March 18, 2019

在比特幣的橢圓曲線(secp256k1)中,

素數

p = 2^256 - 2^32 - 2^9 -2^8 - 2^7 - 2^6 - 2^4 - 1

生成點

Gx = 
0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

Gy = 
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8

以及 G 生成的組的順序

n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

是預定義的。

這背後的原因是什麼?為什麼這些值比其他任何值都更安全或更有效?

Secp256k1 被設計為一個 256 位大小的橢圓曲線,沒有輔因子,並且為了優化目的而承認有效的內同態。相關參數的選擇來源於這些標準。

選擇 P 允許在通用電腦上更有效地實現。請參閱Solinas 關於廣義梅森數的論文。我們不知道 Certicom 用於選擇 P 的確切搜尋過程,但它是您搜尋 2^256 - 2^32 - (1024 - x) 時得到的第一個素數。

然而,我們知道,這可能不是他們需要的確切程序,因為內生現象的存在需要單位的立方根。請參閱有關加密堆棧交換的此答案。但他們本可以通過這種方式搜尋並獲得幸運。

生成器可以只是曲線上的任何點,證明生成器的選擇與任何不涉及將值強制轉換為曲線點的方案的安全性無關,並且在其他方​​面的相關性非常狹窄,這是微不足道的。

我們無法揭示 G 是如何選擇的,但我確實發現它可能是通過將具有非常小的(166 位)x 座標的點加倍獲得的值。在其他幾個 ECC 標準中使用了相同的值。(如果它是某人的名字的雜湊值,我不會感到驚訝,但似乎這個瑣事可能會跟隨 Scott Vanstone 進入他的墳墓)。

由於曲線階數是素數,因此 G 的階數與其說是參數,不如說是場選擇和曲線方程的結果。曲線方程中的“b”為 7 幾乎可以肯定只是因為它是第一個給出安全曲線的值。‘a’ 為 0 是自同態的必要條件。

您可能還會發現bitcointalk 上的這個舊執行緒很有趣。

引用自:https://bitcoin.stackexchange.com/questions/85387