Address
簽名並不能證明私鑰的所有者產生了給定的消息
假設我是比特幣錢包的開發者。
如果我在
private key
沒有實現seed phrase
方法(不使用 BIP32 和 BIP39 的原則)的情況下創建 a ,是否至少有一點機會通過生成 apublic key
和address
基於該公鑰,我將無法花費我的比特幣 - 因為signature
沒有’不能證明私鑰的所有者產生了給定的消息?
多虧了上述資訊,我得出了一個結論——我可以使用一些約束來生成我自己的私鑰(以確保我的手工私鑰不會失敗)。
為了生成“正確”的私鑰,我必須執行以下操作:
- 我必須生成一個從 1 到 2^256 的隨機數
- 使用 SHA256 將二進制數轉換為十六進制形式(我們稱之為
number
)- 將轉換後的數字與允許的上限進行比較:
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
- 在比特幣主網中,所有私鑰都以
5
I must add 80 in Hex in the beginning of private key
- 然後我生成一個密鑰的校驗和,再應用一次 SHA256
- 我複制
8
校驗和的前導十六進製字元並將它們粘貼到我的私鑰的末尾- 最後,我將我的十六進制私鑰轉換為
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 之前也是如此。它仍然是真實的。