Elliptic-Curves

所有可能的 EC 私鑰都有效嗎?

  • September 6, 2021

我通常使用 OpenSSL 或 Bouncy Castle 生成密鑰對。

我正在使用曲線secp256k1

256 位私鑰看起來相當隨機。

“私鑰”的所有值是否都有對應的公鑰?

如果是這樣,當將它們視為私鑰時,是否可以找到所有任意 256 位值的公鑰?

如果不是,有沒有辦法判斷 256 位值是否可以是私鑰?

我認為您使用的是每個 ANS X9.62:2005 的 256 位曲線。

並非所有 256 位位串都是正式有效的私鑰;當使用 big-endian 約定時,這些必須表示一個嚴格的正整數,小於 $ n $ ,最大素數階子群的階數。引用標準中的規範性 A.4.1 前言:

給定橢圓曲線域參數的橢圓曲線密鑰對是一對 $ (d, Q) $ , 在哪裡 $ d $ 是一個整數 $ [1, n – 1] $ , Q 是曲線上的一個點,使得 $ Q = d,G $ .

對於SEC 2的Koblitz 曲線secp256k1

$ n=2^{256}-\mathtt{14551231950b75fc4402da1732fc9bebf}_{16} $ .

For P-256 (also known as secp256r1),

$ n=2^{256}-2^{224}+2^{192}-\mathtt{4319055258e8617b0c46353d039cdaaf}_{16} $ .

The all-zero bitstring, and the bitstrings representing $ n $ or more in big-endian convention, have no corresponding public key per the standard. They are in a proportion about $ 2^{-128} $ for secp256k1, $ 2^{-32} $ for P-256.

Note: we could reduce modulo $ n $ bitstrings representing more than $ n $ , but that would be non-standard, and would still leave two bitstring (corresponding to $ 0 $ and $ n $ ) without a public key. $ k\gets((k+n-2)\bmod(n-1))+1 $ would do better, but the distribution would not be uniform unless $ k $ is drawn at random from an interval much larger than $ n $ .

Note: This answer disregards the ASN.1 representation of a private key.

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