Recuperar una wallet no HD de blockchain.info – Tutorial (3)

3
8470

Recuperar una wallet no HD de blockchain.info

 

En este tutorial explicaré como recuperar la clave privada de una copia de seguridad de las primeras versiones de la wallet de Blockchain.info.

En las primeras versiones de Blockchain.info la wallet online se podía guardar una copia de seguridad de vuestra clave privada. Esta copia era la clave privada cifrada con vuestra contraseña en formate AES.

Si tenéis una copia de seguridad de las primeras carteras online de Blockchain.info en un fichero cifrado wallet.aes.json, una de las opciones era recuperar la clave privada a partir de la página oficial del mismo proveedor en el siguiente enlace: https://blockchain.info/DecryptWallet.html

Lamentablemente este servicio ha dejado de existir desde hace unos años y sus carteras actualmente son en formato HD (Hierarchical Deterministic) donde Blockchain.info nos dará la semilla de la cartera en formato mnemotécnico con sus 12 palabras.

Sin embargo, esta misma página se puede recuperar desde el proyecto Archive.org. Archive es un proyecto con la idea de almacenar el historial de webs estáticas de la páginas más importantes. En él podremos encontrar el estilo y los textos de las primeras webs de Amazon, Google y Yahoo.

Gracias a Archive Web podemos encontrar copias de la antigua página de descifrado: https://web.archive.org/web/20121129071316/https://blockchain.info/DecryptWallet.html

Archive solo almacena la página estática, lo que el navegador llega a ver. Ya que el software de descrifrado está escrito en Javascript y se ejecuta en el propio navegadordel cliente es posible utilizarlo para descifrar el contenido del fichero.

 

Para ver el contenido poder abrirlo con un bloc de nota (si estamos en windows recomiendo utilizar Notepad++). Si estamos en Mac o GNU/Linux recomiendo escribir en un terminal el siguiente comando:

$ cat wallet.aes.json

Copiamos el texto de la salida, el cual se encuentra en forma Base64.

Nos vamos a un navegador y abrimo el enlace anterior. Podeis cerrar el diálogo del margen superior de Archive en la x del lado derecho. En el formulario, en el área de texto Paste Encrypted JSON Backup pegamos el contenido del fichero y en la entrada de texto Password introducimos nuestra contraseña. La contraseña es la que usábamos para acceder al monedero del servicio de Blockchain.info.

Pulsamos en Decode y si todos los datos son correctos en Raw aparecerá un json con los datos de la cartera.

En el atributo addr está la dirección de Bitcoin y en priv la clave privada descifrada. Copiamos la clave privada.

El formato en el que está la clave privada es Base58. Para que funcione es necesario decodificarla a formato hexadecimal o convertirla al formato WIF siglas en inglés de Wallet Import Format.

Para ello vamos a la siguiente dirección web: http://lenschulwitz.com/base58

En el cuadro de texto Bitcoin Address Base58 Decoder introducir la clave privada y pulsar en Decode address to hex. Copiamos la clave privada decodificada en hexadecimal de la parte inferior.

Abrimos nuestra wallet de Electrum y en el menú de Archivo pulsamos en Nueva/Restaurar. Introducimos el nombre de nuestra nueva cartera. En el asistente seleccionamos Restaura una billetera o importa llaves y en tipo de cartera escogemos Cartera estándar.

Pulsamos siguiente y en el cuadro de texto pegamos la clave privada en formato hexadecimal.

Pulsamos en Siguiente y a continuación escribimos una nueva contraseña para proteger la cartera importada.Pulsamos en Aceptar. Electrum generará las direcciones a partir de la clave privada importada y a continuación se mostrarán las transacciones asociadas y el saldo de la cartera en la parte inferior de Electrum.

Además, si esta teníais bitcoins en esta cartera anteriores a los últimos hardfork con nuevas alternativas tendréis las mismas cantidades disponibles en estar versiones.

Recordar hacer una copia de seguridad del fichero de la wallet o almacenar la clave privada en un lugar seguro.

Por último, una vez importada la cartera en Electrum, se recomienda mover los bitcoins a una nueva dirección de una cartera HD, HDM o a una hardware wallet.

Contenido extra:

Creamos un wallet en blokchain.info – Tutorial (1)

 

Asegurar tu wallet de Blockchain.info – Tutorial (2)

Advertencia "La inversión en criptoactivos no está regulada, puede no ser adecuada para inversores minoristas y perderse la totalidad del importe invertido"

3 COMENTARIOS

  1. En el caso que estoy intentando resolver para un amigo, se complica un poco más. Resulta que ha olvidado por completo la contraseña para desencriptar el archivo wallet.aes.json, aunque está seguro de que es una contraseña debil. ¿Sería posible extraer del aes.json el hash de la private Key? de esa manera podría importar ese hash en un programa de fuerza bruta como HashSuite para conseguir la clave en Base58 y a partir de ahí seguir tu tutorial. ¿Podrías explicar como obtener el hash de la private key? Muchas gracias por tu excelente tutorial.

    • Hola Ricardo, me temo que HashSuite no sirve para tu propósito, ya que la clave privada no es un hash aplicado a una contraseña.

      Decir que clave y contraseña son dos cosas distintas. El contenido del fichero «wallet.aes.json» es un json con la información como la «address», el uuid de la wallet en Blockhain.info y la clave privada de tu amigo. Este json está cifrado en AES 256 bits y codificado en BASE64 (dado que el contenido cifrado puede contener bytes que no son representables en forma de caracteres y como se suele representar un mensaje cifrado).

      Por tanto, lo que necesitará tu amigo es una herramienta que le permita probar a descifrar con la contraseña que cree que es usando el algoritmo AES, la cantidad de bits de la clave (256 bits), el mismo modo de bloque (Blockchain.info usaba CBC o 0FB), el padding (iso10126, iso7816, NoPadding o ZeroPadding) y la iteración (entre 10 y 19). Estos modos de bloque deberían requerir un IV pero como no se especifica en la web de descifrado usará el que la librería coge por defecto (16 ceros para 256 bits). Recordar que en Blockchain.info estaban usando AES 256 bits con modo de bloque CBC y diferentes paddings en función de la fecha de creación de la wallet de tu amigo: «Changed padding to CBC iso10126 9th March 2012»

      Podrías intentar crear una aplicación con librerías como Bouncy Castle para Java o Crypto para Javascript que usara los mismo algoritmos y probase con diferentes claves. De hecho, en la misma página web de blockchain.info «DecryptWallet» podrías modificar la función javascript «do_decrypt» con el inspector de tu navegador y añadir una lista de las contraseñas que crees que serían las válidas para probar.

      En resumen, necesitas un programa que intente romper por fuerza bruta con un diccionario de las posibles contraseñas usando la misma especificación del algoritmo (modos de bloque, padding e iteración) para el contenido cifrado de tu amigo.

      Espero que te haya dado alguna pista. Si tienes cualquier problema coméntame por aquí. ¡Un saludo y suerte!.

      PD: Te indico la función que utiliza la web para descifrar el contenido de la clave: https://pastebin.com/PQ6rSRM5

    • Hay una opción más sencilla en un entorno GNU/Linux o Mac. La herramienta wallet-key-tool del usuario prof7bit. Descarga el último binario, para multiplatormas usad el fichero de Java jar.

      La herramienta tiene una interfaz gráfica, pero también puede ser utilizada en escritorio indicando como primer argumento de entrada la wallet cifrada. Por ejemplo:

      printf 'LA POSIBLE CONTRASEÑA' | java -jar wallet-key-tool-1.4.2.jar wallet.aes.json

      Con este truco estamos enviando el texto ‘LA POSIBLE CONTRASEÑA’ al programa. De esta forma podrás pasarle una lista de posibles contraseñas almacenadas en un ficheros de texto. Con un terminal de `bash` es algo tan sencillo como esto:

      while read p; do
      printf ${p} | java -jar wallet-key-tool-1.4.2.jar wallet.aes.json
      done < posibles_passphrases.txt

      Donde `posibles_passphrases.txt` es un fichero de texto donde tienes tus posibles contraseñas separadas por un salto de línea y ${p} es la variable que contendrá cada línea del fichero en el bucle `while`. Entre todos los intentos que hace, y si hay alguna contraseña válida, verás un mensaje «BlockchainInfoHandler succeeded!» y la dirección y la clave privada a continuación.

      Recuerda que necesitarás tener instalado el Java en el sistema para ejecutar la aplicación.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.