子密鑰派生技巧
我正在嘗試使用 BIP32 文件(<https://en.bitcoin.it/wiki/BIP_0032>)的擴展密鑰進行子密鑰派生。假設擴展密鑰只是某些數據的 base58 編碼序列化,我已經解碼了在“測試向量 1”中找到的擴展密鑰:
bx-windows-x64-icu.exe base58-decode xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw 0488b21e013442193e8000000047fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56b8b9c580 bx-windows-x64-icu.exe base58-decode xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7 0488ade4013442193e8000000047fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae623614100edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea0a794dec
我解碼為私鑰獲得的結果:
0488ade4 is "magic" field for xprv 01 is "depth" 3442193e is "parentfingerprint" 80000000 is "key index" 47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141 is chain code" 00 edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea is "key"
最後一個字節是什麼?(0a794dec)
在接下來的操作(HMAC-SHA512)中,我使用了獲得的鏈碼、密鑰和下一個深度(80000002),但我不確定。
HMAC-SHA512( 47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141, 00edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea0a794dec80000002 )
我得到一個 64 字節的結果:右邊的 32 字節成為孩子的鏈碼。我將左側的 32 個字節“添加”到了父密鑰中。
3bf125923e89743b3414e76f30c662aae014e1cbd4f8251fea0d556758d66227+ edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea = 29a406e1dd70f16211a89c5c1eaf341af96ed2f9c11c5cef315099b39a40d0d0
要從父母那裡獲取指紋,我需要知道公鑰。由於它是私鑰的形式,我們將不得不乘以生成點。
有人知道如何推薦 Bx 命令或工具來執行此步驟嗎?
最後一個字節是什麼?(0a794dec)
校驗和。
在接下來的操作(HMAC-SHA512)中,我使用了獲得的鏈碼、密鑰和下一個深度(80000002),但我不確定。
是的,就是這樣:我可以看到您還預先準備了 0x00(因為序列化的私鑰是 32 字節,而序列化的壓縮公鑰是 33 字節)。
我得到一個 64 字節的結果:右邊的 32 字節成為孩子的鏈碼。我將左側的 32 個字節“添加”到了父密鑰中。
您需要一個適當的工具來執行此加法:您需要以曲線階數為模計算此加法。
既然你使用
bx
,你可能想ec-add-secrets
看看。有人知道如何推薦 Bx 命令或工具來執行此步驟嗎?
您可以
ec-multiply-secrets
通過傳遞 G (生成點)作為point
參數來使用。G = 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
編輯:作為另一種工具,如果您了解一點 Python,您可能想用<https://github.com/darosior/python-bip32>破解。我試圖保持最小。