Claves Privadas: Haciendo el Formato de Importación de Billetera
Jackson BeloveFollow
Nov 11, 2018

TL; DR Billeteras expone las claves privadas mediante un formato de importación de Billetera (WIF) fácil de usar. Después de que un amigo de Telegram envió QTUM por error a una dirección de Litecoin, observé detenidamente cómo se crean las WIF para intentar rescatar las QTUM que falta.
Hoy aprendí (TIL) cómo construir y desarmar las claves privadas WIF, que son utilizadas por las billeteras de criptomonedas porque tienen varias características que las hacen más seguras para las personas que puedan cometer un error. [Referencia 1]
Soy un investigador de blockchain, bloguero ocasional, moderador de redes sociales, y aprecio la orientación técnica del Equipo Qtum y las discusiones en la Comunidad. Si tiene algún comentario o corrección para este blog, comuníquese por las redes sociales.

Dirección incorrecta

El ejercicio en este blog es intentar rescatar algunos QTUM enviados a una dirección incorrecta. Normalmente cuando esto sucede en crypto las monedas se pierden para siempre. Pero en este caso, la dirección incorrecta provino de una billetera Litecoin (una dirección Litecoin) y la dirección simplemente funcionó para Qtum. Esto se debe a que la billetera Litecoin Core y la billetera Qtum Core son “hermanos de una madre diferente”. Ambas billeteras tienen un código y características que Satoshi creó originalmente para bitcoin, con algunos cambios y actualizaciones en el camino. El problema es que no había una clave privada en una billetera Qtum para la dirección Qtum equivocada, pero debido a que las billeteras Litecoin y Qtum son parientes cercanos, puede haber una solución. La billetera Litecoin Core crea direcciones SegWit (Testigo segregado — p2sh-segwit) de forma predeterminada; estas direcciones comienzan con una “M” y también funcionan como direcciones Qtum.
Antes de perseguir las monedas que faltan, aquí hay una revisión rápida de las claves privadas WIF. El WIF incluye tres características que lo hacen un poco más seguro para las personas que la clave privada en bruto de 64 caracteres:
Codificación Base58 para eliminar caracteres confusos
1 byte identificando el blockchain
4 bytes de checksum
Codificación base58
Las claves privadas son 64 números hexadecimales (base 16). Satoshi entendió que las personas que leen y escriben números largos y direcciones cometerían errores, especialmente al confundir a estos caracteres:

I — letra mayúscula “i”
l — letra minúscula “L”
O — letra mayúscula “o”
0 — el número cero
/ — barra inclinada
= — signo de igual
Para reducir las llamadas de servicio al cliente a la línea de soporte de bitcoin cuando las personas escribieron incorrectamente sus claves privadas, el equipo Satoshi creó la codificación base58, que simplemente omite estos 6 caracteres problemáticos. Para la codificación base58, los 64 caracteres que representan letras y números se asignan a un conjunto de datos de 58 caracteres. [Referencia 2] Ahora sabes por qué nunca ves los caracteres “I”, “l”, “O” y “0” en las direcciones criptográficas, porque afortunadamente, Satoshi los tiró a la basura en 2008.
Prefijo de identificación de blockchain
El primer byte (dos caracteres) de la WIF identifica la cadena de bloques de la siguiente manera:

Consulte [Referencia 3] para los prefijos registrados bip-0044.
Checksums
Checksum es una técnica para detectar números incorrectos o dañados. Litecoin y Qtum utilizan el algoritmo hash SHA-256 para crear la suma de comprobación para la clave privada WIF, de hecho, aplican el algoritmo SHA-256 dos veces. Para obtener los resultados correctos de la suma de comprobación, asegúrese de configurar la entrada de hash SHA-256 para datos hexadecimales, no texto ASCII.
Los detalles paso a paso para cambiar una clave privada de Litecoin a una clave privada de Qtum se dan en la referencia 7 a continuación. Si desea intentar replicar estos pasos, estas claves privadas no están ofuscadas (como en mis otros blogs), las claves privadas son completamente válidas para Litecoin y Qtum.
Creando un WIF
Con esa introducción, aquí está la sinopsis para crear un WIF de Qtum a partir de una clave privada sin formato:
- Adjunte el prefijo de blockchain (0x80 para Qtum Mainnet)
- Toma el hash SHA-256
- Toma un segundo hash SHA-256
- Agregue los primeros 8 caracteres del segundo hash SHA-256 como checksum
- base58 codifica todo
- Hemos terminado, es WIF
[Referencia 4, 5]
Ahora los resultados: después de seguir los pasos en la Referencia 7, nuestro amigo de Telegram se reunió con sus monedas errantes.
Mantenga sus claves privadas, privadas y manténgase seguro en línea.
Jackson

Referencias
- Formato de entrada de billetera https://en.bitcoin.it/wiki/Wallet_import_format
- Codificación Base58 https://en.wikipedia.org/wiki/Base58
- bip-0044 prefijos de monedas registradas https://github.com/satoshilabs/slips/blob/master/slip-0044.md
- Cálculos de la clave privada de Bitcoin http://gobittest.appspot.com/PrivateKey
- Código Python para WIF a clave privada https://bitcoin.stackexchange.com/questions/58114/convert-wif-to-private-key
- Un blog anterior sobre carteras y llaves https://medium.com/@jb395official/wallets-and-keys-july-23-2018-92abf2a2d2bf

7. Paso a paso, convirtiendo Litecoin WIF a Qtum WIF
1. Extraer la clave privada de Litecoin.
En su billetera Litecoin Core (deberá desbloquearse) use el comando dumpprivkey en la Consola (Ayuda — Ventana de depuración — Consola):
dumpprivkey MALEJA87Syy9iTm14v7A7Jo7Sfx9J6jZZr

El comando devolverá una clave privada.
Resultado:
TB85YEE8uu23cFc7wZDEPkLdT2mwoBHHU18RfkE9QhsUcPDmHxoU
Copie la clave privada en un archivo de texto y guárdela en su computadora.
Salga de la billetera Litecoin.
2. En el navegador de tu computadora de escritorio, carga estos dos sitios web:
https://incoherency.co.uk/base58/
Después de que estos sitios se hayan cargado, desconecte la computadora de Internet, los sitios seguirán funcionando.
3. base58 decodifica la clave privada del paso 1 al hex en bruto
En https://incoherency.co.uk/base58/ copie y pegue la clave privada del paso 1 en el lado derecho donde dice “Datos Base58” (no se muestra en la imagen a continuación) y presione el botón Descodificar. (Deja el botón de radio configurado para hexadecimal)

Resultado:
b0f0cf31978d2b92ca2a6f4b72de5458a944944f89cba3932bb2a6fd72eef891b501d19dc203
Elimine la “b0” inicial (para la red principal de Litecoin) y los 8 caracteres “d19dc203” (la suma de control):
f0cf31978d2b92ca2a6f4b72de5458a944944f89cba3932bb2a6fd72eef891b501
Esta es la clave privada original de 64 caracteres hexadecimales.
4.Hacer una clave privada Qtum WIF
Agregue los caracteres “80” (ocho cero — para Qtum Mainnet) al frente:
Resultado:
80f0cf31978d2b92ca2a6f4b72de5458a944944f89cba3932bb2a6fd72eef891b501
5. Haga un hash SHA256 en https://anyhash.com/sha256, asegúrese de marcar la casilla de “Hex”.
Copie y pegue el resultado del paso 4 en “Entrada”:

Resultado:
b263d8dfa27c2558e41c125e79341a81067c6b0d32d077cc58df85fe7a9c8a24
6. Haz un segundo hash SHA256
Copie el resultado del paso 5 y péguelo en el campo “Entrada” en el mismo sitio de AnyHash.
Resultado:
2e2a2aa01a55f8d928492f793d6e90b2fd24572494ac79d47a97136330b990d9
7. Tome los primeros 8 caracteres 2e2a2aa0 y añádalos como checksum al resultado del paso 4 anterior:
Resultado:
80f0cf31978d2b92ca2a6f4b72de5458a944944f89cba3932bb2a6fd72eef891b5012e2a2aa0
8. Haga una codificación base 58 en https://incoherency.co.uk/base58/
Copie y pegue el resultado del paso 7 en el lado izquierdo y presione el botón Codificar.

Resultado:
L5Hp6UvxWX3SqQyFPvGNBPoFWB8dj6GPeoEAowbbqjhK6VboC1QK
Esta es la clave privada Qtum WIF, copiar y guardar en el archivo de texto.
Salga del navegador, reinicie la computadora y luego vuelva a conectarse a Internet.
9. Importe esta clave privada en la billetera de Qtum Core.
Inicie la billetera Qtum Core, permita que sincronice la cadena de bloques y desbloquee la billetera.
Use el comando de consola importprivkey y copie y pegue la clave privada del resultado del paso 8:
importprivkey L5Hp6UvxWX3SqQyFPvGNBPoFWB8dj6GPeoEAowbbqjhK6VboC1QK


La billetera volverá a escanear durante unos minutos para leer la blockchain completa para encontrar el balance de la nueva dirección, y luego la consola mostrará el resultado “nulo”. Si observa Archivo — Recibiendo direcciones, debería ver la nueva dirección . MALEJA87Syy9iTm14v7A7Jo7Sfx9J6jZZr

Las direcciones Qtum que comienzan con una “M” son direcciones “p2sh-segwit” (Pagar 2 Hash Hash heredadas envueltas en testigos segregados). La importación de la clave privada también crea otras dos direcciones en la cartera que comienzan con una “Q” y “qc1”:
Qdkz3dRBC4YH8HjhDTE6UBN59MjhsfCFQZ — direccion “legado” no segwit
qc1qhskagsa2t763vhkqf8cq9ph07eynazxea4zml5 — “bech32” (Propuesta de mejora de Bitcoin 173) dirección nativa segwit
Los tres de estos son direcciones Qtum válidas.
10. Enviar el QTUM (barriendo la clave privada)
Debido a que la clave privada ha sido expuesta fuera de una billetera (en el archivo de texto de su computadora), una buena práctica es enviar el saldo completo de esta nueva dirección a otra dirección (que no tenga una clave privada expuesta). Esta podría ser otra dirección en la misma billetera. Para hacer esto, seleccione Enviar, y bajo Características de control de monedas, seleccione el botón ENTRADAS … y seleccione enviar desde esta nueva dirección.