Private-Key

Openssl 魔法值?Secp256k1 和 ECDSA 的相似之處?secp256k1 有何特別之處?

  • June 10, 2020

第1部分:

執行此命令似乎是從比特幣的有效私鑰生成公鑰的可靠方法。這是一個正確的假設嗎?

openssl ec -inform DER -text -noout -in <(cat <(echo -n "302e0201010420") <(echo -n "PRIVATE_KEY_HEX_STRING") <(echo -n "a00706052b8104000a") | xxd -r -p) 2>/dev/null | tail -6 | head -5 | sed 's/[ :]//g' | tr -d '\n' && echo

這些神奇的價值:

302e0201010420

a00706052b8104000a

Openssl 似乎將這些值用於 DER 編碼規則,它似乎與 secp256k1 或比特幣沒有任何關係。這是一個正確的假設嗎?


第2部分:

從上述 openssl 命令中的私鑰派生公鑰時,似乎沒有在任何地方明確使用 y^2 = x^3 + 7 公式/secp256k1。

橢圓密碼學的所有公鑰實際上都是以相同的方式派生出來的……這意味著這些 ECDSA 曲線之間有大量重疊嗎?

與另一條 ECDSA 曲線相比,似乎比特幣唯一特定的東西是FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141.. 的私鑰的最大上限,這是一個正確的假設嗎?我如何能夠在不使用公式的情況下生成私鑰和公鑰?就像中本聰騙了我們一樣,這個公式沒有任何意義!

如果有人能為我和另外兩個因此而無法入睡的人解決這個問題,這裡會有點困惑。

這些神奇的價值:

302e0201010420

a00706052b8104000a

Openssl 似乎將這些值用於 DER 編碼規則,它似乎與 secp256k1 或比特幣沒有任何關係。這是一個正確的假設嗎?

它們與比特幣無關,但我相信這些字節包含對 secp256k1 的引用(可能通過其 OID 1.3.132.0.10)。

具體來說,我認為這8104000a部分編碼了數字 132、0、10。

橢圓密碼學的所有公鑰實際上都是以相同的方式派生出來的……這意味著這些 ECDSA 曲線之間有大量重疊嗎?

不,有很多相關參數進入公鑰計算:

  • 其座標的欄位大小(secp256k1 為 2^256 - 2^32 - 977)
  • 曲線的類型(Weierstrass、Edwards、扭曲的 Edwards…)
  • 曲線方程的係數(對於較短的 Weierstrass 曲線,方程為 y^2 = x^3 + a*b + b;對於 secp256k1 a=0 和 b=7)。
  • 生成器點(對應於私鑰 1 的點,必須按約定選擇)
  • 生成器的階數(等於 secp256k1 曲線上的點數,但也可以少一點)

最後一項,生成器的順序,定義了有多少有效的私鑰。它被所有其他參數所暗示,但計算它是一個非平凡的計算,所以它通常是預先計算的。

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