Glosario / Direcciones y claves
Clave extendida
También se conoce como xpub, xprv, Clave pública extendida o Clave privada extendida.
- ¿Qué es una clave extendida?
- Una clave extendida combina una clave de bitcoin ordinaria con un código de cadena de 32 bytes, y esa combinación es lo que permite al software derivar toda una rama de claves debajo de ella.
Se especifica en el BIP-32.
Una xpub no es una clave pública. Es una estructura de 78 bytes: versión, profundidad, huella digital de la clave padre, índice de la clave hija, el código de cadena de 32 bytes y la propia clave, envuelta en Base58Check para producir una cadena de 111 caracteres. Entregue una a un contador y este podrá leer cada dirección de esa rama y cada satoshi que esa rama haya recibido alguna vez, sin poder gastar nada.
Cómo funciona
La clave extendida existe porque una clave por sí sola no puede producir claves hijas. La derivación de BIP-32 calcula el hash del código de cadena de la clave padre junto con su material de clave y un índice, y el código de cadena aporta la entropía adicional que mantiene a las claves hermanas sin relación entre sí. Si se elimina, no queda nada a partir de lo cual derivar.
La serialización tiene una longitud fija de 78 bytes en un orden estricto: 4 bytes de versión, 1 byte de profundidad, 4 bytes de huella digital de la clave padre, 4 bytes de índice de la clave hija, 32 bytes de código de cadena y 33 bytes de datos de clave. Una clave privada extendida rellena su secreto de 32 bytes con un cero a la izquierda para que ambas formas ocupen el mismo ancho. Los bytes de versión crean el prefijo legible: 0x0488B21E produce xpub, 0x0488ADE4 produce xprv, y los equivalentes de la testnet producen tpub y tprv.
Sobre estas claves operan dos funciones de derivación. La pública calcula claves hijas no endurecidas solo a partir de una xpub, y así es como un procesador de pagos genera miles de direcciones para facturas en un servidor web que no contiene nada gastable. La privada calcula cualquier cosa, índices endurecidos incluidos, y necesita la xprv.
También se encontrará con ypub, zpub y vpub. Proceden de SLIP-0132, una convención que reutiliza la misma estructura de 78 bytes con bytes de versión distintos para indicar un tipo de script. Bitcoin Core nunca la adoptó, y los descriptores de salida de BIP-380 reemplazaron la idea como es debido al nombrar el tipo de script por extenso, como en wpkh([1a2b3c4d/84h/0h/0h]xpub.../0/*).
Por qué importa cuando compra bitcoin
Una clave pública extendida es lo más confidencial que alguna vez le solicitarán compartir sin ser técnicamente un secreto, y la solicitud suele parecer rutinaria.
Existen tres razones legítimas para exportar una. Configurar una billetera de solo lectura para que un teléfono pueda mostrar el saldo de una billetera de hardware. Entregar a un procesador de pagos autoalojado la rama de la que debe tomar las direcciones para facturas. Montar un multisig, en el que cada cofirmante aporta una xpub y todas ellas son necesarias para reconstruir la billetera más adelante, aunque sobrevivan todas las frases semilla.
Todo lo demás merece sospecha. Ningún exchange reseñado en este sitio necesita una clave extendida para enviarle un retiro; necesita una dirección. Un agente de soporte que solicita una xpub para verificar su billetera está, en el mejor de los casos, elaborando un perfil suyo. Quien solicita una xprv está solicitando las monedas, y la respuesta correcta es cortar la conversación.
La divulgación también es permanente, de un modo que la gente subestima. Una xpub revela no solo el saldo de hoy sino cada pago de esa rama, pasado y futuro, porque quien la tenga puede seguir derivando direcciones nuevas mucho después de que usted deje de hablar con él. No hay revocación. Deshacerla implica generar una semilla nueva y mover cada moneda, pagando una comisión por cada entrada que posea.
Hay una trampa que corresponde precisamente a este apartado. Si alguien tiene su clave pública extendida y además obtiene una sola clave privada hija no endurecida, puede reconstruir la clave privada extendida padre y gastar toda la rama. BIP-32 lo afirma en sus propias notas de seguridad. Por eso los niveles de cuenta están endurecidos, y por eso exportar una clave individual de una billetera moderna, algo que unas pocas herramientas todavía ofrecen, es una comodidad peligrosa y no una comodidad práctica.
Lo que un contador puede y no puede hacer con su xpub
Al entregar una clave pública extendida, la frontera queda nítida. Suponga que exporta la clave pública extendida de la cuenta para m/84'/0'/0' desde una billetera de hardware y se la envía por correo electrónico a quien prepara sus impuestos.
El contador puede derivar cada dirección de recepción y cada dirección de cambio de esa cuenta, consultar cada una en cualquier explorador de bloques y reconstruir un historial completo y fechado de los montos que entran y salen. Puede sumar su saldo actual hasta el último satoshi y seguir observando cómo cambia. Puede derivar direcciones que usted todavía no ha usado y ver el momento en que las usa.
No puede firmar nada. Las claves hijas endurecidas son inalcanzables desde el lado público, así que una cuenta hermana como m/84'/0'/1' le resulta invisible, igual que la clave maestra. No puede recuperar una clave privada a partir de nada de eso, salvo que usted le entregue por separado una de las claves individuales de debajo, que es el caso de fallo descrito más arriba.
Clave extendida frente a clave pública
Una clave pública es un punto de la curva secp256k1, de 33 bytes cuando está comprimida, y verifica firmas. Una clave pública extendida es ese mismo punto más un código de cadena de 32 bytes y cuatro campos que describen su posición, y puede producir miles de millones de claves públicas adicionales. Publicar una clave pública divulga la información de una sola salida. Publicar una clave pública extendida divulga una billetera.
Clave extendida frente a formato de importación de billetera
Una xprv y una cadena en formato de importación de billetera codifican ambas material de clave en Base58, y ahí termina el parecido. Una cadena WIF contiene una clave privada con un byte de red y una suma de comprobación, útil para trasladar una sola clave heredada (legacy), y al importarla se recuperan exactamente las monedas bloqueadas en esa clave. Una xprv contiene una clave más el código de cadena y la posición que le permiten regenerar una rama ilimitada. La asimetría es lo que confunde a la gente: barrer una clave WIF hacia una billetera moderna es una tarea de mantenimiento rutinaria, mientras que pegar una xprv en un software desconocido entrega de golpe todo lo que hay debajo de ella.