Address

簽名並不能證明私鑰的所有者產生了給定的消息

  • September 16, 2021

假設我是比特幣錢包的開發者。

如果我在private key沒有實現seed phrase方法(不使用 BIP32 和 BIP39 的原則)的情況下創建 a ,是否至少有一點機會通過生成 apublic keyaddress基於該公鑰,我將無法花費我的比特幣 - 因為signature沒有’不能證明私鑰的所有者產生了給定的消息?

多虧了上述資訊,我得出了一個結論——我可以使用一些約束來生成我自己的私鑰(以確保我的手工私鑰不會失敗)。

為了生成“正確”的私鑰,我必須執行以下操作:

  1. 我必須生成一個從 1 到 2^256 的隨機數
  2. 使用 SHA256 將二進制數轉換為十六進制形式(我們稱之為number
  3. 將轉換後的數字與允許的上限進行比較:
0 < number < (2^256 - 432,420,386,565,659,656,852,420,866,394,968,145,600)

我們如何獲得上述減法的十進制操作數?

有限域Fp與 a 相關聯secp256k1,由六元組 T = ( p, a, b, G, n, h)指定

Fp由第一個十六進制p值(或 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1)定義。

G的順序n是第二個十六進制值。

0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F // Hex p
- 
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 // Hex n
= 
432,420,386,565,659,656,852,420,866,394,968,145,600                // Decimal
  1. 在比特幣主網中,所有私鑰都以5
I must add 80 in Hex in the beginning of private key
  1. 然後我生成一個密鑰的校驗和,再應用一次 SHA256
  2. 我複制8校驗和的前導十六進製字元並將它們粘貼到我的私鑰的末尾
  3. 最後,我將我的十六進制私鑰轉換為base58
Base 58 excludes:
    0 – (zero)
    I – (capital i)
    l – (lower case L)
    O – (capital o)

Base 58 includes:
    25 lower case characters
    24 capital characters
    numbers 1 to 9

我的手工私鑰已經準備好了。

如果您正確創建了公鑰和地址,則從私鑰創建的簽名不會失敗。

在 BIP32 和 BIP39 之前也是如此。它仍然是真實的。

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