¿Qué significa xpub, ypub y zpub? en el ámbito de Bitcoin
¿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.
Puedes dejar una propina con el botón «Invítame un café».
O mediante Lightning network:
También puedes hacerlo onchain, vía Paynyms de Samourai Wallet:
PayNym: +decentralized