Saltar al contenido

Cartera HD y Derivation Path, ¿qué son?

La idea de este artículo es abordar de una manera básica, es decir para recién iniciados en Bitcoin el significado, de lo qué son Derivation Path o Rutas de Derivación? Y de paso entenderemos que es una cartera HD.

Si deseas profundizar mucho más después de leer este artículo, te recomiendo te des una vuelta por la madriguera de seguridad, donde encontrarás mucha información adicional, así que vamos a ello.

Carteras HD

Dentro del ámbito de Bitcoin y de muchas otras criptomonedas, el derivation path esta relacionado con las carteras Hierarchical Deterministic (Jerárquico Deterministas, o carteras que tienen una estructura en la organización y deterministas porque siempre dan el mismo resultado).

Las carteras HD son un diseño que se implementa en el software (carteras) para ayudarnos con dos cosas principalmente:

  • Generar un número casi infinito de direcciones (addresses).
  • Generar unas claves (mnemotécnicas) que nos permiten recuperar esas direcciones (y sus fondos) en cualquier otra cartera compatible. Esto consigue un sistema de recuperación fácil. Esas claves son conocidas como semillas (o seeds en inglés) y nos ayudan a abstraernos de aprendernos números muy largos y complejos.

Así que por ahora quedémonos con esto: Una cartera HD es un tipo de cartera en la que tienes una única frase inicial (las semillas), la cual es legible para los humanos y que te da acceso a un número ilimitado de cuentas a través de cualquier red soportada (para efectos de este artículo, Bitcoin).

Derivation Paths

Ahora, derivation path, en términos muy simples es una forma elegante de decir «este es el camino a seguir para poder acceder a todas tus direcciones a partir de tu frase mnemotécnica o semillas».

Para entender cómo funcionan las carteras HD y la importancia del derivation path es inevitable entrar en la revisión a un nivel un tanto técnico, ya que es la base que sustenta este concepto, sin embargo voy a tratar de explicarlo también desde un punto de vista más de usuario.

A día de hoy (y que haya podido saber), existen 4 especificaciones técnicas que la gran mayoría de las carteras implementan (no todas las implementan a la vez por lo que es un punto a tener en mente), estas especificaciones están sustentadas en los siguientes BIP’s:

  • BIP 32: m/0’/0/0→(la mas antigua es en si la especificación para las carteras HD)
  • BIP 44: m/44’/0’/0’/0/0→Usada para las direcciones denominadas Legacy
  • BIP 49: m/49’/0’/0’/0/0→Usada para las direcciones denominadas Segwit
  • BIP 84: m/84’/0’/0’/0/0→Usada para las direcciones denominadas Native

Con las carteras HD se tiene una única frase o semilla, por ejemplo: oro paella pan mula laico koala impulso farol eje cazo auge zumo (12 palabras que serían tu semilla) las cuales son decodificadas a través de algoritmos criptográficos y ecuaciones matemáticas para poder obtener, o más bien derivar un número infinito de pares clave.

Si cambias cualquiera de esas piezas, la llave privada que obtengas (o derives) va a ser diferente, esto es muy importante que lo tengas en consideración.

Ejemplo de las semillas de una cartera HD

Continuando con el derivation path, como ya vimos antes, hay por lo menos 4 especificaciones pero todas tienen la misma estructura y componentes, los cuales son:

m’ / purpose’ / coin_type’ / account’ / change’ / address_index

Donde:

  • m: se refiere al master key, es un carácter fijo “m”, un apostrofe (‘) se utiliza para indicar las claves de hardening, mientras que las derivaciones que no lo tienen son las normales.

El termino hardening, de forma general se refiere a proporcionar algunos medios de protección dentro de un sistema informático y en varias capas. Para efectos de las carteras HD si el derivation path va con apostrofes significa que las claves que se van a generar nacen a partir de una llave privada y no de la llave publica extendida para dotarla de mayor seguridad.

Si no se indica el apostrofe, significa que las claves que se van a derivar nacen a partir de la clave publica extendida.

La diferencia podría estar, por ejemplo, en que si vas a usar un software de terceros para generar tus direcciones, es mejor que utilices tu llave publica extendida para generarlas, así no compartes direcciones que han sido derivadas directamente de tus claves privadas.

Este tema es un tanto complicado y técnico de entender pero espero por lo menos haberte dado una guía de lo que significa y el porqué del apostrofe en la derivation path. Si quieres profundizar más en las diferentes madrigueras de Estudio Bitcoin podrás encontrar muchas más información para ir profundizando más en el tema.

  • purpose: hablando estrictamente de una cartera HD, el purpose es el número que identifica la especificación técnica a implementar. Es decir si estamos hablando de una cartera tipo segwit, por ejemplo, el purpose será /49’. Indica que el resto de la estructura del derivation path se utilizará de acuerdo con la especificación de una HD.

Un paréntesis muy rápido para entender mejor lo anterior, existe otro tipo de carteras denominadas hierarchical deterministic multi-party multi-signature (o por sus siglas en inglés HDPM) las cuales usan el purpose 45, pero de estas carteras no hablaré en este artículo.

  • coin_type: como comente antes, las carteras HD se usan en diferentes tipos de Criptomonedas pero todas se basan en el trabajo de Bitcoin. El tipo de moneda es un número único establecido para cada criptomoneda, en el caso de Bitcoin es 0 (cero).
  • account: empieza siempre con 0 (cero) y va aumentando de manera incremental. A este nivel se divide el espacio en identidades independientes, de forma que la cartera nunca mezcla los bitcoins de diferentes cuentas. Es decir es en este nivel que podrías utilizar estas cuentas para organizar tus fondos creando más de una cuenta, por ejemplo una cuenta para gastos de casa, otra para ahorro para las vacaciones, otras para los gastos del colegio, etc., así cuantas quieras y necesites. Lo veremos un poco más adelante.
  • change: solo puede tener dos valores fijos, 0 (cero), el cual es utilizado para generar direcciones publicas (la que proporcionaría para que me envíen un pago) y la constante 1, la cual dicho de manera muy simplista es la que determina dónde vas a recibir el cambio.

Aquí otro paréntesis rápido para explicar un poco más el punto anterior.

En Bitcoin, cuando haces un envío se utilizan los UTXOs (monedas) que tengas disponibles para cubrir la cantidad a enviar, algunas billeteras avanzadas te dejan seleccionar cuáles (coin control) y otras directamente hacen una sumatoria de “monedas” hasta llegar cubrir la cantidad a enviar.

Por ejemplo, si tienes 0,85 bitcoins dividido en 2 “monedas”, en una tienes 0.35 bitcoins y en la otra tienes 0.50 bitcoins y tu quieres enviar 0,60 bitcoins, lo que sucedería es que estarías enviando las 2 “monedas”, de las cuales se generaría una transacción que enviaría toda la “moneda” de 0.35 y de la de valor 0.50 tomaría 0.25 para completar los 0.60 bitcoins a enviar y además enviaría a una dirección de cambio los restantes 0.25 bitcoinis (en el change esta dirección se derivaría con un valor de 1).

dirección de cambio derivation path: m’/44’/0’/0’/1’/0

  • address_index: un numerador que sirve para indexar las direcciones, empieza partir del índice 0 y se va incrementando de forma secuencial creciente.

Como podrás observar con lo que hemos revisado hasta aquí, el derivation path tiene toda una estructura y un sentido, para permitir a las carteras HD una gran versatilidad a la hora de manejar las cuentas y las direcciones.

Veamos algunos ejemplos más. Digamos que quiero crear 3 cuentas (segwit native: 84) separadas para propósitos diferentes:

  • cuenta 1 → ahorros personales, su ruta sería: m/84’/0’/0/
  • cuenta 2 → cuenta del trabajo, su ruta sería:m/84’/0’/1’/
  • cuenta 3 → cuenta para donativos, su ruta sería: m/84’/0’/2’/

Si revisara por ejemplo la cuenta 2, vería dentro de ella una lista de direcciones en las que podría recibir fondos. La ruta de esas direcciones serían del siguiente tipo:

  • 1º dirección: m/84’/0’/1’/0’/0
  • 2º dirección: m/84’/0’/1’/0’/1
  • 3º dirección: m/84’/0’/1’/0’/2

…. y así de forma ilimitada

Recomendaciones muy importantes sobre el tema del uso de las direcciones con respecto a la privacidad:

  • Nunca reutilices direcciones, conforme vayas recibiendo fondos en tus direcciones, genera una nueva para recibir siempre en una dirección nueva.
  • Siempre etiqueta (ponle una nota) las direcciones para que puedas fácilmente identificar el origen de los fondos y/o quién es el observador de ese fondo (UTXO).

Espero que esta infografía, que representa los ejemplos comentados anteriormente te ayude a entenderlo mejor.

Algunas carteras permiten la creación de las cuentas permitiéndote cambiar el derivation path, como es el caso de Electrum, por ello revisa a la hora de elegir tu cartera y si es una característica que consideres importante, pues sumaría puntos para su elección.

Ejemplo dentro de electrum wallet para modificar el derivation path

Conclusiones

Como hemos visto, una cartera Hierarchical Deterministic es una cartera que te permite crear un sin fin de cuentas y direcciones a partir de unas claves mnemotécnicas, llamadas semilla y que nos permiten recuperar las direcciones en cualquier software compatible, ayudándonos a abstraernos de aprendernos números muy largos y complejos.

El derivation path es la forma en la que la cartera, en este caso la cartera HD, organiza las direcciones en las que almacenas tus monedas (UTXOs) y además brinda la posibilidad de hacerlo a diferentes niveles: moneda, cuenta y direcciones.

Si combinamos el derivation path junto con las semillas con las que generas la cartera HD, entenderemos que la cartera HD tiene un número infinito de pares o cuentas a las que puede acceder.

Espero que esto te haya servido para entender de manera básica qué son y cómo funcionan las carteras HD y el Derivation Path. A mi me ha servido mucho para hacerme una composición de todo.

Pero si quieres aprender más, aquí en estudio bitcoin tienes mucha más información para profundizar aún más en el tema.

Como siempre, todo lo que escribo lo hago a partir de investigaciones y revisiones propias en sitios como bitcoin.org, bitcointalk.org y bitcoin.stackexchange.com entre otros, si tienes algún comentario te agradecería me lo hicieras saber, ya que la idea es que esta información sirva también a otras personas que al igual que yo estamos buscando aprender sobre el fascinante mundo de Bitcoin.

Agradezco el tiempo que te haz tomado en leerme y espero tus comentarios!

Sobre el autor de este artículo

Desde que conocí Bitcoin me he vuelto un admirador de sus conceptos, su filosofía y de toda la tecnología que emerge a su alrededor. Mi objetivo y misión, es el tratar de facilitarle las cosas, a muchos que como yo, están buscando información que les ayude a adentrarse en este fantástico mundo.
¿Te ha sido útil esta madriguera? Puedes dejarme una propina vía Lightning network
Decentralized.b

Paynyms (Samourai Wallet)

PM8TJR2yPtx5JS8e8CuwXBZMay67mg1RKrtVptBRZQD5qCyZc1rosVCbScFmzgYYrQtVmc6cJZ2hCK2nBra3KAXxXCKPU4K4vRPjnBqGCYKYRUwimKnA
+crimsontruth10e