Saltar al contenido
buybitcoinsmart

Glosario / Lightning y capa 2

Clave de revocación

¿Qué es una clave de revocación?
Una clave de revocación es la clave pública cegada que bloquea las salidas con retraso y las salidas HTLC de una transacción de compromiso Lightning, y su contraparte del canal puede gastarlas en cuanto usted revela el secreto que retira ese estado.

Toda transacción de compromiso Lightning lleva una rama de revocación que nadie puede firmar hasta que uno de los lados revela un secreto por compromiso. BOLT 3 numera esos secretos desde 281.474.976.710.655 hacia abajo, y el nodo que los recibe puede guardarlos todos en una tabla de 49 posiciones. Publicar un estado que usted ya revocó permite a su par quedarse con todo el saldo del canal, y por eso una frase semilla no puede respaldar Lightning.

Cómo funciona

Una clave de revocación se construye deliberadamente para que ninguno de los dos lados de un canal pueda calcular por sí solo su mitad privada.

Cuando su nodo prepara un nuevo compromiso para su par, toma su propio punto revocation_basepoint y el punto per_commitment_point de su par, multiplica cada uno de los dos por el SHA256 de ambos puntos concatenados, con ese mismo punto escrito primero, y suma los resultados. BOLT 3 enuncia la propiedad en una línea: la construcción garantiza que ni el nodo que aporta el punto base ni el nodo que aporta el punto pueden conocer la clave privada sin el secreto del otro nodo. La clave privada no existe en ninguna parte hasta que llega la segunda mitad.

Esa llegada es un mensaje. Una vez que su par ha verificado la firma de usted en su propio nuevo compromiso, responde con el mensaje revoke_and_ack, de tipo 133, que lleva un campo per_commitment_secret de 32 bytes correspondiente al estado que acaba de retirar, más el punto de su siguiente estado. A partir de entonces, usted puede calcular la clave revocationprivkey del estado antiguo, y su par no puede dar marcha atrás.

La clave aparece en dos tipos de salida. Una salida to_local es una salida P2WSH cuyo script de testigo es OP_IF, la clave revocationpubkey, OP_ELSE, to_self_delay, OP_CHECKSEQUENCEVERIFY, OP_DROP, la clave local_delayedpubkey, OP_ENDIF, OP_CHECKSIG: el propietario tiene que esperar a que pasen to_self_delay bloques, mientras que quien tenga la clave de revocación gasta de inmediato con una pila del testigo formada por una firma y un 1. Cada salida HTLC lleva la misma clave convertida en un hash de 20 bytes con RIPEMD160 sobre SHA256, y BOLT 5 exige al nodo que penaliza barrer también con esa clave las transacciones HTLC-success y HTLC-timeout de la parte que hace trampa.

El almacenamiento es donde el diseño se vuelve ingenioso. Un canal puede consumir 281.474.976.710.655 secretos por compromiso, uno por estado, todos generados a partir de una única semilla de 256 bits imposible de adivinar, invirtiendo bits y calculando hash, con el índice contando hacia abajo y no hacia arriba. Como a partir de un secreto cuyo índice termina en ceros se derivan todos los secretos desde ahí hasta el siguiente límite de potencia de dos, el nodo que los recibe guarda solo 49 parejas de valor e índice y reconstruye el resto bajo demanda. BOLT 3 también hace que el nodo que los recibe vuelva a derivar sus secretos anteriores a partir de cada nueva llegada, como comprobación, de modo que un par que cambió de semilla discretamente queda descubierto en el acto y no en el momento del cierre.

Por qué importa cuando compra bitcoin

Las claves de revocación son la razón por la que un saldo Lightning no se comporta en absoluto como las monedas on-chain que le envía un exchange.

De las 41 billeteras reseñadas en este sitio, las que le dan acceso a Lightning abordan el problema del estado de formas visiblemente distintas, y esa división explica sus calificaciones. Phoenix ejecuta en el teléfono un auténtico nodo autónomo, con una frase semilla BIP39 estándar en una ruta BIP84, y nuestra reseña deja claro que la frase semilla es la alternativa on-chain, no el canal: si ACINQ desapareciera, usted forzaría el cierre, esperaría aproximadamente 720 bloques, alrededor de cinco días, y recuperaría los fondos on-chain con Electrum. Muun rechaza por completo la lista de palabras y le entrega un archivo Emergency Kit que contiene las dos claves multisig más los descriptores de salida, con el razonamiento publicado de que un mnemónico respalda claves, mientras que sus monedas viven en scripts de los que también hay que informar a la billetera. El modo con custodia predeterminado de Wallet of Satoshi elimina el problema dejándole a usted fuera de él: la empresa guarda todos los secretos, y por eso aquí lleva la etiqueta de precaución y una calificación de 2,7, y por eso pudo dejar de atender a los clientes de Estados Unidos el 23 de noviembre de 2023 y retirar el servicio en toda la Unión Europea con la llegada de 2026, dejando a los tenedores de la UE el modo de autocustodia en su lugar. BlueWallet es de autocustodia on-chain, y por ello tiene una calificación de 4,2, mientras que un saldo Lightning en ella está en una cuenta LNDHub que su frase semilla on-chain no cubre.

El protocolo sí le ofrece una red de seguridad, y conviene conocerla con precisión. Si usted se reconecta con un estado obsoleto, el mensaje channel_reestablish lo deja al descubierto: el mensaje de su par indica un número de revocación más alto del que usted esperaba y le devuelve el último secreto por compromiso que usted envió, lo que demuestra que la afirmación es honesta. BOLT 2 indica entonces que usted no debe difundir su propia transacción de compromiso y que, en su lugar, debería enviar un error pidiendo a su par que dé el canal por fallido. Esa es una regla que sigue el software honesto, no una garantía de consenso, y solo le protege mientras usted se abstenga de publicar por su cuenta el estado obsoleto. BOLT 5 expresa en términos claros el deber correspondiente: un nodo no debe difundir una transacción de compromiso para la que ya haya revelado el secreto por compromiso.

En la práctica, el riesgo está dentro de la billetera en la que usted recibe y en ninguna otra parte. Comprar en cualquiera de los 63 exchanges que sigue este sitio y retirar por Lightning no le expone a él, porque los canales del exchange son problema del exchange. Su exposición empieza en el momento en que las monedas llegan a un lugar donde se supone que es usted quien ejecuta el nodo.

El vector de prueba de BOLT 3, clave por clave

BOLT 3 incluye en su apéndice un ejemplo práctico de derivación, y leerlo es la forma más rápida de ver que las dos mitades de una clave de revocación son imprescindibles.

Parta de un punto revocation_basepoint con valor 036d6caac248af96f6afa7f904f550253a0f3ef3f5aa2fe6838a95b216691468e2 y de un punto per_commitment_point con valor 025f7117a78150fe2ef97db7cfc83bd57b2e2c0d0dd25eaf467a4a1c2a45ce1486. Calcular el hash con el punto base en primer lugar da efbf7ba5a074276701798376950a64a90f698997cce0dff4d24a6d2785d20963, y calcularlo con el punto en primer lugar da cbcdd70fcfad15ea8e9e5c5a12365cf00912504f08ce01593689dd426bca9ff0. Multiplique cada punto por el hash en el que ese punto va primero, sume los dos resultados y obtendrá la clave revocationpubkey 02916e326636d19c33f13e8c0c3a03dd157f332f3e99c317c141dd865eb01f8ff0.

Nada de esa clave pública filtra la privada. La clave privada solo aparece una vez que el par revela el valor per_commitment_secret correspondiente, 1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100, y en ese momento los mismos dos hash se combinan con ese secreto y con el secreto del punto base para dar la clave revocationprivkey d09ffff62ddb2297ab000cc85bcb4283fdeb6aa052affbc9dddcf33b61078110. Una actualización del canal, una divulgación, y una clave pública que un momento antes era un simple adorno se convierte en un derecho sobre toda la salida.

Clave de revocación frente a frase semilla

Tanto una clave de revocación como una frase semilla son secretos de los que depende su dinero, y solo una de ellas puede escribirse en papel.

Una frase semilla es estática. Doce o veinticuatro palabras fijan todas las claves que la billetera llegará a derivar, las copias adicionales le dan más seguridad y una copia antigua vale exactamente lo mismo que una reciente. Los secretos de revocación invierten las tres propiedades. Llegan uno por cada actualización del canal, dentro del mensaje revoke_and_ack, desde el otro lado; las copias que importan son las divulgaciones de su par, que su propia frase semilla no puede regenerar; y una copia antigua del estado del canal no es un respaldo sino un riesgo, porque actuar a partir de ella no se distingue de hacer trampa. El esquema de almacenamiento de 49 posiciones existe precisamente porque estos secretos cambian con demasiada frecuencia como para escribirlos.

La consecuencia práctica es la advertencia que repite toda billetera Lightning. Si restaura una billetera Lightning solo a partir de las palabras y empieza a gastar, habrá vuelto a publicar un estado que ya revocó, y eso es lo único que BOLT 5 prohíbe expresamente y lo único que la clave de revocación de su contraparte del canal estaba esperando.

No confundir con

Preguntas frecuentes

¿Respalda mi frase semilla mis canales Lightning?

No, una frase semilla restaura claves y direcciones, pero no los secretos por compromiso que le envió su contraparte del canal, que BOLT 3 hace guardar al nodo que los recibe a medida que llegan, así que una billetera restaurada solo a partir de las palabras tiene una visión desactualizada de cada canal. Muun evita la confusión con un respaldo en un archivo Emergency Kit que contiene ambas claves y los descriptores de salida, en lugar de una lista de palabras.

¿Qué ocurre si difundo por accidente un estado antiguo de un canal Lightning?

Su contraparte del canal puede quedarse con todo el saldo del canal, porque el secreto por compromiso que usted entregó cuando ese estado se retiró le permite firmar de una vez la rama de revocación de cada salida, sin ningún período de espera que aguardar.

¿Puede mi contraparte del canal usar una clave de revocación contra mí si no he hecho nada malo?

No, porque la clave privada de revocación de su estado actual todavía no existe. Necesita un secreto por compromiso que usted no ha revelado, y BOLT 3 construye la clave a partir de material aportado por ambos lados, de modo que ninguno de los dos puede derivarla por sí solo.

Para seguir leyendo

Términos relacionados

Más en la sección Lightning y capa 2

Leer esta página en inglés