Ich versuche, den erweiterten privaten BIP32-Masterschlüssel aus seinem erweiterten öffentlichen BIP32-Schlüssel (den ich bereits kenne) und einem privaten WIF-Schlüssel (den ich durch Entschlüsseln eines BIP38-Seeds mit einer Passphrase erhalten habe) wiederherzustellen.
Ich habe die in diesem Artikel von Vitalik Buterin beschriebenen Schritte befolgt , aber um die crack_bip32_privkey
Funktion in verwenden zu pybitcointools
können, benötige ich einen privaten Schlüssel im BIP32-Format (nicht WIF). Ich kann sehen, wie man einen privaten BIP32-Hauptschlüssel von einem BIP32-Seed (mit bip32_master_key
) erhält, aber nicht, wie man dasselbe von einem privaten Schlüssel im WIF-Format macht.
Wie kann ich den privaten WIF-Schlüssel in einen privaten BIP 32-Schlüssel konvertieren (mit Python, .NET oder Javascript)?
Du kannst nicht. Das erweiterte private Schlüsselformat BIP 32 enthält Informationen, die im privaten WIF-Schlüssel nicht vorhanden sind. Das erweiterte private Schlüsselformat enthält den Kettencode des privaten Schlüssels, den Index und den übergeordneten Fingerabdruck. Diese Informationen stammen aus der Ableitung des privaten Schlüssels selbst und können nirgendwo anders gefunden werden.
Um den übergeordneten öffentlichen Schlüssel zu erhalten, ist die einzige Information, die Sie aus dem erweiterten öffentlichen Schlüssel benötigen, der Index des untergeordneten Schlüssels. Dies kann trivial gefunden werden, indem einfach alle möglichen untergeordneten Indizes (2 ^ 31 - 1 Indizes) brutal erzwungen werden, bis Sie einen privaten Hauptschlüssel erhalten, der einen öffentlichen Schlüssel hat, der mit dem übergeordneten öffentlichen Schlüssel übereinstimmt, oder bis Sie den korrekten untergeordneten öffentlichen Schlüssel abgeleitet haben Schlüssel aus dem übergeordneten öffentlichen Schlüssel.
Hier ist der Code, mit dem Sie den übergeordneten privaten Schlüssel finden. Dies führt die erste Technik des zyklischen Durchlaufens möglicher privater Elternschlüssel durch, bis einer gefunden wird, der einen öffentlichen Schlüssel hat, der mit dem öffentlichen Elternschlüssel übereinstimmt. Beachten Sie, dass dies möglicherweise völlig ineffizient ist und lange dauern kann, um einen Schlüssel zu finden. Beachten Sie auch, dass dies nur funktioniert, wenn der untergeordnete Schlüssel direkt vom übergeordneten Schlüssel abgeleitet wird, nicht etwas weiter unten im Ableitungsbaum.
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
m/14
.m/14
, der der Adresse entspricht, für die ich den Besitz nachweisen muss, (3) einen privaten Schlüssel in WIF Format (bereitgestellt von Coinbase beim Generieren des Tresors, ich weiß nicht, ob es gehärtet ist, noch die Tiefe).priv = (b'\x04\x88\xAD\xE4', 1, 0, i, b'', wif_key)
geändert werden müssen, um den privaten BIP32-Schlüssel zu erhalten, der dieselbe Adresse wie der abgeleitete Pubkey hat.
Pieter Wuille
Andreas Chow