Private-Key

如何將 WIF 私鑰轉換為 BIP32 擴展私鑰

  • July 26, 2017

我正在嘗試從擴展的 BIP32 公鑰(我已經知道)和 WIF 私鑰(我通過使用密碼解密 BIP38 種子獲得)恢復擴展的 BIP32 主私鑰。

我按照Vitalik Buterin的這篇文章crack_bip32_privkey中描述的步驟進行操作,但是要使用 中的功能pybitcointools,我需要一個 BIP32 格式的私鑰(不是 WIF)。我可以看到如何從 BIP32 種子(帶有bip32_master_key)中獲取 BIP32 私鑰主密鑰,但看不到如何從 WIF 格式的私鑰中獲取相同的私鑰。

如何將 WIF 私鑰轉換為 BIP 32 私鑰(使用 Python、.NET 或 Javascript)?

你不能。BIP 32 擴展私鑰格式包含 WIF 私鑰中不存在的資訊。擴展私鑰格式包含私鑰的鏈碼、索引和父指紋。這些資訊來自私鑰本身的推導,無法在其他地方找到。


為了獲得父公鑰,您需要從擴展公鑰中獲取的唯一資訊是子公鑰的索引。這可以通過簡單地暴力破解所有可能的子索引(2^31 - 1 個索引)來輕鬆找到,直到您獲得具有與父公鑰匹配的公鑰的主私鑰,或者直到您導出正確的子公鑰來自父公鑰的密鑰。

這是可以找到父私鑰的程式碼。這是第一種循環遍歷可能的父私鑰的技術,直到找到一個具有與父公鑰匹配的公鑰。請注意,這可能完全沒有效率,並且可能需要很長時間才能找到密鑰。另請注意,這僅在子密鑰直接從父密鑰派生時才有效,而不是在派生樹中的某個深度。

from pybitcointools.deterministic import raw_crack_bip32_privkey, bip32_deserialize, bip32_serialize, bip32_privtopub
from pybitcointools.main import decode_privkey, encode_privkey

parent_pub = 'xpub661MyMwAqRbcEnKbXcCqD2GT1di5zQxVqoHPAgHNe8dv5JP8gWmDproS6kFHJnLZd23tWevhdn4urGJ6b264DfTGKr8zjmYDjyDTi9U7iyT'
wif_key = encode_privkey(decode_privkey('KyqcQVzcp7cHEMEDHQaz5eaE5azsRHaE4ukkeqwM2vdiQwBYtxeb'), 'bin_compressed')
for i in xrange(2**31 -1):
   priv = (b'\x04\x88\xAD\xE4', 1, 0, i, b'', wif_key)
   pkey =  raw_crack_bip32_privkey(bip32_deserialize(parent_pub), priv)
   final_key = bip32_serialize(pkey)
   if bip32_privtopub(final_key) == parent_pub:
       print final_key
       break

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