Estoy tratando de recuperar la clave privada maestra BIP32 extendida de su clave pública BIP32 extendida (que ya conozco) y una clave privada WIF (que obtuve al descifrar una semilla BIP38 con una frase de contraseña).
Seguí los pasos descritos en este artículo de Vitalik Buterin, pero para usar la crack_bip32_privkey
función en pybitcointools
, necesito tener una clave privada en formato BIP32 (no WIF). Puedo ver cómo obtener una clave maestra privada BIP32 de una semilla BIP32 (con bip32_master_key
), pero no cómo hacer lo mismo desde una clave privada en formato WIF.
¿Cómo puedo convertir la clave privada WIF en una clave privada BIP 32 (con Python, .NET o Javascript)?
no puedes El formato de clave privada extendida BIP 32 contiene información que no está presente en la clave privada WIF. El formato de clave privada extendida contiene el código de cadena de la clave privada, el índice y la huella digital principal. Esa información proviene de la derivación de la clave privada en sí y no se puede encontrar en ningún otro lugar.
Para obtener la clave pública principal, la única información que necesita de la clave pública extendida es el índice del elemento secundario. Esto se puede encontrar de manera trivial simplemente aplicando fuerza bruta a través de todos los índices secundarios posibles (2 ^ 31 - 1 índices) hasta que obtenga una clave privada maestra que tenga una clave pública que coincida con la clave pública principal, o hasta que haya obtenido la clave pública secundaria correcta. clave de la clave pública principal.
Aquí hay un código que le encontrará la clave privada principal. Esto hace la primera técnica de recorrer las posibles claves privadas principales hasta encontrar una que tenga una clave pública que coincida con la clave pública principal. Tenga en cuenta que esto puede ser completamente ineficiente y puede llevar mucho tiempo encontrar una clave. También tenga en cuenta que esto solo funciona si la clave secundaria se deriva directamente de la clave principal, no a cierta profundidad en el árbol de derivación.
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
que corresponde a la dirección para la que necesito probar la propiedad, (3) una clave privada en WIF formato (proporcionado por Coinbase al generar la bóveda, desconozco si está endurecido, ni la profundidad).priv = (b'\x04\x88\xAD\xE4', 1, 0, i, b'', wif_key)
para obtener la clave privada BIP32 que tendrá la misma dirección que la clave pública derivada.
pieter wuille
andres chow