Bip32-Hd-Wallets
在創建創建非強化 HD 錢包子密鑰的 Python 函式時遇到問題
我正在編寫自己的密鑰(不用於生產,嚴格用於學習)。我成功地從助記片語創建了 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:]