Private-Key

子密鑰派生技巧

  • May 11, 2020

我正在嘗試使用 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>破解。我試圖保持最小。

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