Private-Key

如何從 base58 編碼的私鑰計算公鑰?

  • January 5, 2019

我關注了這篇文章並為比特幣錢包創建了一個私鑰。該文章說,在找到隨機的 256 位(32 字節)整數後,應添加版本號並添加校驗和。這會產生一個 37 字節的十六進制。現在我試圖找到與這個私鑰關聯的公鑰。我了解到公鑰是通過在私鑰上應用 ECDSA secp256k1 曲線來計算的。但是 ECDSA 算法只接受 32 個字節作為輸入。

那麼我做錯了什麼?

提前致謝。

私鑰就是你生成的 32B 熵。在錢包之間,此私鑰可以以某種格式編碼,該格式提供更多資訊,例如網路(main/test/alt)以及是否使用了壓縮或未壓縮的公鑰。這種編碼稱為錢包導入格式。

  • version(1B) (0x80 主網/0xEF 測試網)
  • privatekey(32B)
  • 0x01壓縮標記 (1B)
  • checksum(4B)

<https://teachbitcoin.io/wallets.html#/2>

校驗和是它之前的所有內容。數據最終以base58編碼。

要獲取此 WIF 數據並生成公鑰,錢包只需提取私鑰 32B) 併計算公鑰點

  • private_key * Generator_point = public_key(x,y)

得到的 x, y 公鑰點就是您的公鑰。如果壓縮市場打開,取 x 座標並根據它是偶數還是奇數在前面加上 0x02 或 0x03。

  • 壓縮公鑰:0x02/0x03 + x_coordinate(32B)
  • 未壓縮的公鑰:0x04 + x_coordinate(32B) + y_coordinate(32B)

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