Bip32-Hd-Wallets

在創建創建非強化 HD 錢包子密鑰的 Python 函式時遇到問題

  • February 15, 2022

我正在編寫自己的密鑰(不用於生產,嚴格用於學習)。我成功地從助記片語創建了 512 位種子,但是我在從這些種子派生子密鑰的步驟中失敗了。作為參考,我正在使用以下文章進行測試:

<https://learnmeabitcoin.com/technical/hd-wallets>

我要做的是使用該站點為我生成助記符,然後使用種子我嘗試匹配子**密鑰(基本)**部分中的子密鑰,但無濟於事。例如,我有以下片語:

lash afraid any alter object topic pony deer helmet favorite chuckle carpet

與文章中的種子和密鑰匹配:

Extended key: e8448e8e6ac4ce400951f6d630a0963c40b263208dacee0c53b3a3ccf8be9a1540434b626e34b82f28e4fb60842d5a5470e2f8cc2777a559a3c68ac4e9f2559d
Private key: e8448e8e6ac4ce400951f6d630a0963c40b263208dacee0c53b3a3ccf8be9a15
Chain code: 40434b626e34b82f28e4fb60842d5a5470e2f8cc2777a559a3c68ac4e9f2559d
Public key: 03cf895293b95a0ce2457593b82cc6fd646c757a1e2d393932b70dafddc2d9553b

這是我被絆倒的地方。我粗略的 python 函式如下所示:

def create_child_keys(chain_code, public_key, children):
   for n in range(children):
       hex_child_index = hex(n)[2:].zfill(8)
       print(hmac.new(bytes.fromhex(chain_code), msg=bytes.fromhex(public_key + hex_child_index), digestmod=hashlib.sha512).hexdigest())

create_child_keys(extended_key, 3)

這將返回與上面發布的連結不同的前 3 個孩子的雜湊值。例如,根據learnmeabitcoin,第一個孩子應該有一個私鑰:

d547eda1f3d7da655cafec4506d3e333f1add4415968b1994f30bd64b023e2d3

但我的是:

c9dd74741e44fbd9e763f47829f37d1b2165a5ad6e90697c719d95489c409326

希望對那些更熟悉這個過程的人來說,一些明顯的東西能脫穎而出。

我想出了我的問題。我不知道我是否遺漏了 learnmeabitcoin 中的結果,但我開始使用來自比特幣 wiki 的測試向量:

<https://en.bitcoin.it/wiki/BIP_0032_TestVectors>

上面我的 python 函式的結果與該連結中未經強化的測試相匹配。我忘記做的一件事是添加主私鑰和子雜湊的左 256 位以生成子私鑰。我可以通過將上述函式儲存在變數中來實現這一點child_hash,然後執行以下命令:

child_left_hash = child_hash[:64]
child_chain_code = child_hash[64:]
child_private_key = hex(int(child_left_hash, 16) + int(master_private_key, 16))[2:]

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