¿Qué significa xpub, ypub y zpub? en el ámbito de Bitcoin

XPub_ZPub_YPub

¿Porqué a veces leemos o nos hablan de estas claves y cuales son sus diferencias?

 

En las carteras jerárquico deterministas (HD) y que son la gran mayoría de las carteras modernas de Bitcoin, se habla de términos como Master Extended Public Keys o lo que es lo mismo, de xpub, ypub y zpub.

¿Pero qué son? y ¿qué función tienen?. En este artículo vamos a descubrirlo.

 

Las carteras HD pueden generar un número casi infinito de claves privadas a partir de una única semilla mnemónica, y nos permiten recuperar esas direcciones en cualquier otra cartera compatible a partir de esa semilla.

 

Una única semilla mnemónica genera Claves Privadas Maestras Extendidas (Master Extended Private Key) y Claves Públicas Maestras Extendidas (Master Extended Public Key), las cuales pueden ser usadas para derivar nuevas claves dentro de la cartera.

Cada Master Extended Private Key, a su vez, da lugar a un número casi infinito de Claves «hijo», llamados Child Private Keys, los cuales tienen su contra parte publica llamadas Child Public Keys. y sus direcciones asociadas.

 

Por lo tanto, puedes tener una única Master Extended Private Key, y utilizarla como fuente para todas las claves privadas y públicas hijas de tu cartera. Además, una Master Extended Public Key correspondiente generará las mismas claves públicas hijas (Child Public Keys).

En esta ilustración podemos ver el porque se denomina jerárquica a la generación de llaves de una cartera HD, y como por cada llave privada hija, se tiene una contra parte pública y ambas tienen acceso a la dirección correspondiente

 

De lo anterior, debemos entender que la Master Extended Public Key es útil para la creación de carteras de vigilancia o watch- only wallet, ya que nos permite tener acceso a las direcciones de la cartera sin que a su vez se tenga acceso a las claves privadas, y por ende sin poder operar sobre ellas, solo «verlas».

 

Vale, pero sigo sin saber ¿qué es xpub, ypub y zpub?. Pues habiendo repasado lo anterior, ahora puedo decirte que son el nombre que se le da a las claves Públicas Extendidas en diferentes tipos de carteras y/o scripts, vamos a ver.

 

xpub

Literalmente es como se denomina a una Clave Pública Extendida – eXtended Public, la verdad no he encontrado algún documento que indique porque xpub y no expub (por ejemplo), pero bueno, eso es lo de menos.

 

El xpub nace en el estándar de bitcoin BIP32 y como vimos anteriormente sirve para dar acceso de solo lectura a una cartera. La xpub permite tener una visión completa de todas las transacciones, direcciones y saldos de una cartera en específico, pero no permite ningún tipo de gasto. Para gastar, se requieren claves privadas, y el xpub no tiene ninguna clave privada. Son las claves de nomenclatura inicial y se usan en las carteras tipo Legacy, las cuales tienen direcciones que empiezan por 1.

 

ypub

Es exactamente lo mismo que un xpub, excepto que la «y» nos indica que la clave pública extendida pertenece a una cartera que sigue el estándar de bitcoin BIP49,  el cual detalla un esquema de direccionamiento compatible con versiones anteriores a SegWit. Una clave ypub tiene un tipo de dirección P2SH-P2WPKH.

 

zpub

Y resulta que zpub es exactamente igual que ypub en el sentido de que nos indica que la clave pública extendida es la de una cartera que sigue el BIP84, sin embargo también nos indica que esa cartera en particular no sigue el esquema de direccionamiento compatible hacia atrás, en su lugar sigue el tipo de dirección P2WPKH, es decir zpub es para carteras nativas compatibles con SegWit.

 

Con esta tabla puede que quede más clara la relación de las claves Privadas/Públicas:

Tipo de dirección

Tipo de script

Public Key

Private Key

BIP32 Derivation Path

Legacy

P2PKH o P2SH

0x0488b21e – xpub

0x0488ade4 – xprv

m/44’/0′

Segwit compatible

P2WPKH en P2SH

0x049d7cb2 – ypub

0x049d7878 – yprv

m/49’/0′

Segwit native

P2WPKH

0x04b24746 – zpub

0x04b2430c – zprv

m/84’/0′

Multifirma Segwit compatible

P2WSH en P2SH

0x0295b43f – Ypub

0x0295b005 – Yprv

Multifirma Segwit native

P2WSH

0x02aa7ed3 – Zpub

0x02aa7a99 – Zprv

Testnet Legacy

P2PKH o P2SH

0x043587cf – tpub

0x04358394 – tprv

m/44’/1′

Testnet Segwit compatible

P2WPKH in P2SH

0x044a5262 – upub

0x044a4e28 – uprv

m/49’/1′

Testnet Segwit native

P2WPKH

0x045f1cf6 – vpub

0x045f18bc – vprv

m/84’/1′

Testnet Multifirma Segwit compatible

Multi-signature P2WSH in P2SH

0x024289ef – Upub

0x024285b5 – Uprv

Testnet Multifirma Segwit native

Multi-signature P2WSH

0x02575483 – Vpub

0x02575048 – Vprv

Consideraciones:

Todas las master public keys pueden llegar a codificarse como xpub. La codificación es la misma que se describe para xpub en el BIP 32 pero con un byte de prefijo diferente.

Las rutas para derivar ypub, zpub, etc han sido implementaciones creadas por Electrum y SatoshiLabs. Estas rutas tienen una codificación específica, la cual esta descrita en el SLIP 132 y se complementan con el SLIP 032

 

 

NOTA sobre Taproot: Con TapRoot se implementará un nuevo tipo de script para direcciones en Bitcoin (P2TR), el cual generá direcciones bc1p, sin embargo, al momento de escribir este artículo no encontré información que me ayudara a conocer claramente que clave de codificación va a usarse para identificar las claves públicas y privadas de Taproot.

 

Actualización sobre Taproot. Para Taproot no es necesario representar el script bajo ningún tipo de Public Key, ya que Taproot no utiliza el hash de clave pública. Las salidas almacenan una clave pública directamente. La recomendación que dan los desarrolladores de Bitcoin es usar un descriptor que indique que la salida (la dirección a usar es de tipo Taproot, usar como descriptor tr(). Si quieres saber que son los descriptores, te invito a leer este artículo que escribí en Estudio Bitcoin.

 

 

Consideraciones de privacidad

Como podrás entender después de leer el artículo, con tu clave pública maestra es posible acceder a tus direcciones y con ello obtener el balance total de los mismos, por eso, no es recomendable ni seguro compartirlas. Este es el principal motivo por el que recomiendo tener un nodo de Bitcoin propio, ya que con ello eliminas de raíz qué se pueda tener acceso a esa información.

Recuerda que con Bitcoin, ahora tú eres el responsable de cuidar tus finanzas y de la misma forma que en el mundo Fiat tradicional no vas mostrando ni publicando el saldo y los movimientos de tus cuentas, debes cuidar de no hacerlo, evitando compartir las claves.

 

Como siempre, si llegaste hasta aquí, te agradezco mucho tu tiempo para leerme, espero que este artículo te haya sido de ayuda y si fue así, por favor házmelo saber, lo mismo que si tienes alguna observación, duda o comentario.

 

También si quieres apoyarme para continuar con esta labor déjame una propina, y además me ayuda a mantener el sitio y el dominio libre para todos, y porque no, incluso podría tomarme un café mientras investigo y escribo para ti!.

Muchas gracias de antemano.

5/5

Puedes dejar una propina con el botón «Invítame un café».

O mediante Lightning network:

⚡[email protected]

También puedes hacerlo onchain, vía Paynyms de Samourai Wallet:

PayNym: +decentralized

6 comentarios

  1. Marcoin

    Gracias por tan claro artículo. Una pregunta me surge. Imaginemos que tengo una cartera que admite los tres tipos de transacciones y que yo, por error e ignorancia, tengo hechas transacciones de todos esos tipos. Si quisiera crearme una cartera de solo mirar, por ejemplo en Sentinel, podría usar solo el zpub y reconocería todas las transacciones de mi carrera? O tendría que crearme una para el club, otra para el ypub y otra para el zpub? Muchas gracias

  2. decentralizedb

    Tendrías que importar en tu watch-only wallet el xpub para ver las tx de esa Child Public Key, la ypub para las de esa y la zpub para sus respectivas

  3. Marcoin

    Muchas gracias por tu respuesta. Quisiera hacer otra pregunta. Si pensamos en una cartera moderna compatible con segwit, la clave maestra pública principal es una zpub? Esa cartera tendrá también una xpub y una ypub? Y si las tienen como se relacionan jerárquicamente entre ellas? Es decir, de la clave privada maestra que se deriva, todas o solo la zpub? Mil gracias.

  4. decentralizedb

    No se si estoy entendiendo bien la pregunta, pero siempre tendrás un tipo de clave publica para cada tipo de dirección, o por lo menos es lo que yo conozco, por lo tanto siempre tendrás una relación de una public key con el tipo de script que estas usando, es lo que trato de explicar en la imagen del artículo
    master keys

  5. Javier

    Buen artículo pero tengo una duda..
    Yo quiero entrar en hold para hacer ingresos en mi blue wallet de forma mensual y mantenerlos sin hacer pagos..
    La verdad es que estoy perdido por qué hace muy poco tiempo que estoy tocando criptos..
    Poniendo la clave pública podrían saber mi saldo,verdad??
    Cómo podría hacerlo de forma más segura y privada?

    Saludos

  6. decentralizedb

    Hola, gracias por tu comentario.
    No sé si estoy entendiendo bien tu duda. Si compartes tu clave pública, quién la conoce efectivamente puede llegar a conocer tu balance.
    La mejor forma es no compartir tu clave pública y solo ir dando una dirección, diferente a la vez, remarco lo de que sea siempre una dirección diferente.

    Samourai wallet tiene una opción llamada Paynym que te genera una dirección que si que puede ser compartida y no hay forma de conocer el balance de la misma, ni las direcciones que hay por detrás, pero el problema que tiene a día de hoy es que solo es valida de Samourai Wallet a Samourai wallet, ya que otras wallets no lo han implementado.
    Bluewallet tiene en su road-map el implementarlo pero no creo que llegue antes de finales de año si bien nos va.

    Espero haberte ayudado y si no es así, por favor házmelo saber y revisamos que se quedo pendiente. Saludos!

Los comentarios están cerrados