Hoy el tema es un poco denso. Primero te pondré en antecedentes. Si nadie pone ningún comentario es que lo hemos entendido todos: 100% éxito 😁.
Seed/Semilla:
Espero que todos aquí ya estemos al tanto de la relevancia de la Seed/Semilla. Hicimos un post que ha gustado mucho (aprovecha para leerlo si no lo has hecho ya) sobre cómo Generar una Seed/Semilla de forma segura. Aprovecho para recordarte que tenemos una cantidad enorme de sistemas para proteger tu semilla.
Que la Seed/Semilla es una simplificación de algo mucho más complicado de almacenar también lo hemos comentado de pasada. Esto es gracias a BIP39.
De forma sencilla va a pasar de esto:
063679ca1b28b5cfda9c186b367e271e
Que es relativamente difícil de almacenar. A esto:
alert record income curve mercy tree heavy loan hen recycle mean devote
Los pasos para hacerlo son bastante sencillos y puedes verlos en este enlace.
HD Wallet / Hierarchical Deterministic wallet
Si lo anterior es gracias a BIP39, una HD Wallet es gracias a BIP32, que fue una implementación previa. Este BIP32 más complicado de entender que BIP39 así que te diré que permite a la wallet generar, a partir de la semilla, una estructura jerárquica de claves privadas en forma de árbol. Quédate con esta imagen:
A modo resumen te diré que tu wallet gracias a BIP32 hace las cosas siempre igual para que siempre se deriven las mismas direcciones de la misma semilla. Además BIP32 evita una cosa: Antes de su existencia cada vez que generabas una nueva dirección había que hacer una nueva copia de seguridad 🤯.
Para para para….¿Generar nuevas direcciones? Si, en Bitcoin y Cardano, por decir dos ejemplos, cada vez que haces una transacción todos tus fondos - por simplificar - saldrán de una dirección e irán a dos direcciones diferentes. Una de ellas será a la que tu querías enviar los fondos y la otra será -siempre- otra bajo tu control, dónde se envía la cantidad restante, diferencia entre el 100% de lo que tenias y la cantidad que querias enviar a la primera dirección.
Una forma muy descriptiva de explicar esto es:
Tengo un billete de 10$ en el bolsillo (bolsillo izquierdo).
Compro el pan y pago 1$ al panadero que lo guarda en su bolsillo.
Los restantes 9$ los guardo en otro bolsillo (bolsillo derecho).
Pues antes cada vez que cambiabas el dinero de bolsillo te tocaba hacer una copia de seguridad. Y ahora no. Demos gracias al Señor: Te alabamos Señor.
Entonces:
Ya tenemos la Seed/Semilla y sabemos que hay muchas direcciones diferentes por multiples razones (privacidad, seguridad). Y sabemos que gracias a BIP32 todo se deriva igual. Y eso es gracias al Derivation Path.
Derivation Path y su importancia
Siempre hemos comentado que si pierdes tu Seed/Semilla con importarla en una wallet compatible con BIP39 tienes acceso a tus fondos. Es casi verdad. Lo siento.
Va a depender del Derivation Path. El Derivation Path es la formula que permite pasar de una master key a una private key. Y esa private key genera una public key que a su vez generará una dirección. Mejor en una imagen:
Y si te das cuenta hacia abajo se puede ir, pero hacia arriba no, y eso garantiza que puedas dar tu dirección y esto no es un riesgo ya que tu Seed/Semilla es imposible de inferir a partir de la información hacia abajo.
Un Derivation Path es algo así:
m/49’/0’/0’/0/0
Y si cambias eso en tu wallet obtienes una Public key diferente y abajo del todo, pues si, una dirección diferente 🤯. ¿Riesgo? No has perdido nada, todo sigue saliendo de la misma Seed/Semilla, pero digamos que estás en otro número de la misma calle en la misma ciudad. Cerca pero no.
¿Cómo solucionamos esto?
Es interesante que sepamos cual es el Derivation Path que usamos en la primera wallet que sobre la que empezamos a usar la nuestra semilla. Si importaras esa semilla en otra wallet debes confirmar que usa el mismo Derivation Path . Por ejemplo Metamask:
Metamask usa el Derivation Path (m/44'/60'/0'/0), que viene del BIP44. Otro BIP!
Que Metamask use m/44'/60'/0'/0 y no m/49’/0’/0’/0/0 implica que las direcciones que obtienes de la misma Seed/Semilla son completamente diferentes y sin relación alguna entre ellas. Ese 60 que ves, hace referencia a Ethereum. Por ejemplo el Derivation Path m/44'/0'/0'/0 hace referencia a Bitcoin. Lista completa aquí.
BIP32 vs BIP44:
BIP32 es el formato general para los HD wallet. "Así es como se definen los Hierarchical Deterministic Wallet".
BIP44 es una implementación específica de un BIP32 que define el tipo de moneda y el soporte para múltiples cuentas además de tener direcciones de recepción y direcciones de cambio en su propio árbol.
Básicamente BIP44 es una mejora de BIP32. Y es el que se usa en casi todo.
¿Cual es la utilidad de esto?
Hay un punto donde tenemos una Public Key, que genera Direcciones. Gracias al Derivation Path una empresa, o tu mismo, podría tener un generador de direcciones públicas de Ethereum on-line sin comprometer su clave privada, de manera que cada pago fuera a una nueva dirección de Ethereum, todas bajo su control.
También es útil evidentemente para que los wallets tengan un estándar de cómo generar direcciones cada vez que necesitamos una y que al restaurar nuestra semilla en una nueva wallet tengamos acceso a los mismos fondos.
Exportando nuestra extended public key , xpub a un tercero podríamos darle la lista de todas nuestras direcciones, lo cual es un riesgo, pero podríamos darle la posibilidad de que cada vez que nos hiciera un pago lo hiciera a una dirección diferente.
¿Qué hemos aprendido aquí?
La importancia de la semilla, que espero que ya lo supieras.
Algunos conceptos básicos en BIP32, BIP39 y BIP44 que no son necesarios para el 99% de los poseedores de criptomonedas. Sin embargo saber que tienes a tu disposición infinitas direcciones de Bitcoin, Ethereum y demás y que su generación está plenamente estructurada es algo que es mejor saber.
Que podría darse el caso, muy raro, de que importemos nuestra Seed/Semilla a una wallet y no tengamos acceso a nuestros fondos.
Y ahora te voy a dar un resumen que vas a decir “Joder Jota, haber puesto esto al principio y me habia ahorrado un buen dolor de cabeza”.
BIP32 - es un método para generar un árbol de claves privadas a partir de una clave privada maestra. Nos evita copias de seguridad por cada dirección generada.
BIP39 - es un método para codificar 128-256 bits de datos aleatorios en frases de 12-24 palabras de una lista de palabras intercambiables 2018, y luego convertir esas frases en un hash de 64 bytes.
BIP44 - es un método para estructurar un árbol de claves privadas de una manera específica que facilitará el uso/restauración/descubrimiento de múltiples cuentas para múltiples propósitos.
Suélteme el brazo señora!