Glosario / Direcciones y claves
Derivación BIP-86
- ¿Qué es la derivación BIP-86?
- La derivación BIP-86 coloca las cuentas Taproot de una sola clave en m/86'/0'/0' y luego ajusta (tweak) cada clave derivada con su propio hash, para que la dirección fije una ruta de script imposible de gastar.
Se especifica en el BIP-86.
BIP-86 abarca las billeteras que guardan salidas Taproot para un solo firmante, y reutiliza la estructura de cuentas de BIP-44 con 86' en el nivel de propósito. BIP-49 y BIP-84 también definen un segundo paso para la dirección, pero solo BIP-86 cambia la propia clave: el valor de 32 bytes de su dirección es la clave que usted derivó, ajustada con un hash de sí misma. Restaure sus palabras en un software que solo escanee BIP-84 y su saldo en bc1p marcará cero.
Cómo funciona
La derivación BIP-86 ocurre en dos pasos, y solo el primero es el conocido recorrido hacia abajo por un árbol de claves.
El paso uno es la ruta. La plantilla es m / purpose' / coin_type' / account' / change / address_index, con 86' en la posición de propósito y cada nivel inferior usado sin cambios, así que una primera cuenta de bitcoin está en m/86'/0'/0' y su primera clave de recepción, en m/86'/0'/0'/0/0.
El paso dos es donde BIP-86 se separa de sus predecesores. BIP-49 y BIP-84 también definen un segundo paso, pero el suyo envuelve la clave derivada en un script, y el testigo sigue revelando la clave que produjo la ruta. BIP-86 reemplaza la clave. Cita BIP-341 sobre la regla que debe cumplir: "If the spending conditions do not require a script path, the output key should commit to an unspendable script path instead of having no script path." Así, la clave derivada se lee como clave interna mediante lift_x, y lo que llega a la cadena es esa clave interna más int(HashTapTweak(bytes(internal_key)))G. El resultado es una única inserción de datos de 32 bytes tras OP_1, escrita 0x5120 seguida de la clave ajustada, y gastarlo solo requiere una firma en el testigo con un campo scriptSig vacío.
Los vectores de prueba publicados muestran la diferencia. En m/86'/0'/0'/0/0, la clave interna derivada de la semilla es cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115, mientras que la clave que ve la red es a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c, codificada como bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr. Una implementación que se salta el paso dos publica en su lugar el primer valor, así que le entrega direcciones de apariencia plausible que una billetera conforme al estándar, al restaurar la misma semilla, nunca encontrará.
Ava Chow escribió el documento, que se asignó el 22 de junio de 2021 y hoy tiene el estado Deployed (desplegado).
Dónde aparece
La derivación BIP-86 está detrás de la mayoría de las billeteras de una sola firma que le entregan una dirección bc1p sin preguntarle qué formato quiere. Bitcoin Core hizo de las billeteras de descriptores la opción predeterminada en la versión 23.0, y las notas de esa versión dicen que una billetera de descriptores recién creada contiene un descriptor tr() generado automáticamente "which allows for creating single key Taproot receiving addresses".
El hardware se puso al día a velocidades muy distintas. Nuestra reseña de KeepKey fecha la compatibilidad de ese dispositivo con salidas Taproot en el firmware 7.10.0, de febrero de 2025, así que un firmante barato puede guardar una semilla cuya rama 86' no le mostrará, mientras que otro software que lea las mismas palabras gasta esas monedas con normalidad.
La especificación es inusualmente franca sobre por qué sigue haciendo falta una ruta fija. Su sección de motivación reconoce que "there are now solutions which obviate the need for fixed derivation paths for specific script types", en referencia a los descriptores, y luego explica por qué no zanjan la cuestión: muchas billeteras de software y firmantes de hardware siguen respaldando solo una semilla, sin ningún registro de la ruta ni del tipo de script junto a ella. Un descriptor lleva esa información; una lista de palabras no, así que la lleva en su lugar el número 86.
Derivación BIP-86 frente a P2TR
La derivación BIP-86 es una receta para llenar una salida P2TR, no la definición de una. P2TR es la versión de testigo 1 y acepta cualquier clave de salida de 32 bytes, incluida una clave agregada de varios firmantes con MuSig2 y una clave que fija un árbol de scripts que de verdad se pueden usar. BIP-86 abarca el caso más estrecho de ese espacio: un firmante, una semilla y una ruta de script dejada a propósito imposible de gastar, para que nada se esconda detrás de la clave. Toda dirección que produce BIP-86 es una salida P2TR, y la mayor parte de lo que P2TR puede expresar queda por completo fuera de su alcance, así que una billetera que anuncia compatibilidad con Taproot puede aun así rechazar una rama multisig o con bloqueo temporal (timelock) que lleve el mismo formato de dirección.