HotStuff: de cero a estado del arte

Artículo 21 de 47

45%

completado al llegar aquí

Sistemas distribuidosNota de investigación14 min de lectura

Rompiendo la regla: ¿Por qué 2 cadenas en HotStuff original permite bifurcaciones?

Por qué un commit de dos cadenas en HotStuff pierde safety o responsividad sin reglas extra, y cómo Fast-HotStuff, Jolteon y HotStuff-2 lo recuperan.

Ruta HotStuff: 0/47

En 1 Minuto

Analiza qué ocurre si HotStuff básico compromete con dos QCs consecutivos: con sus locks originales se pierde safety, y si se adelanta el lock se pierde el cambio de vista lineal y responsivo. Después revisa cómo Fast-HotStuff, Jolteon y HotStuff-2 recuperan el commit de dos cadenas con mecanismos adicionales.

Prerrequisitos
  • Taxonomía de Commit (chain-commit-taxonomy-one-two-three-chain)
  • HotStuff: QC, highQC y la regla de 3 cadenas (hotstuff-qc-highqc-three-chain)
Cuándo Detenerte

Detente cuando puedas construir los dos contraejemplos (bifurcación por lock tardío y bloqueo por lock oculto) y explicar qué pieza adicional usa cada protocolo de dos cadenas para evitarlos.

Glosario Rápido de Notación

Glosario de Notación Matemática y Criptográfica

v— Vista (View / Round)

Número de vista o ronda actual. Cada vista tiene un único líder designado.

Ejemplo: view = 42
Haz clic en un símbolo para desplegar su definición formal y su aplicación en el protocolo.
Mapa conceptual

Ruta mental de la Vulnerabilidad de 2 Cadenas en HotStuff Base

  1. 1. Propuesta y Vista v1

    Formación de QC1

  2. 2. Propuesta y Vista v2

    Formación de QC2

  3. 3. Cambio de Vista v3 (Líder Bizantino)

    Ocultación de QC2

  4. 4. Bifurcación Catastrófica

    Violación de Safety

Contraejemplo de safety cuando se acorta el commit sin adelantar el lock.
Explicación Didáctica

Decodificador Didáctico de Conceptos BFT

El lock que llega tarde

En palabras simples: Un notario registra la venta, pero los demás notarios solo anotan el bloqueo de la propiedad un día después. Si en ese intervalo alguien presenta una escritura vieja, ningún registro la rechaza.

Detalle técnico: En Chained HotStuff una réplica fija lockedQC = QC1 recién al ver QC2. Si el commit también ocurre al ver QC2, las réplicas que no lo vieron siguen sin lock en A.

La Solución de la 3ra Cadena (3-Chain Rule)

En palabras simples: Exigir una firma más antes de cerrar la venta, de modo que cuando se cierra ya hay suficientes notarios con el bloqueo anotado.

Detalle técnico: QC3 prueba que n - f réplicas votaron después de ver QC2 y, por tanto, fijaron lockedQC = QC1; al menos f + 1 son correctas y bloquean cualquier rama que no extienda A.

Traducción de lenguaje formal a analogías intuitivas del mundo real.

En la taxonomía de commit y en QC, highQC y la regla de tres cadenas vimos que Chained HotStuff compromete un bloque cuando aparece una cadena de tres QCs consecutivos que lo extiende.

Un ingeniero inquieto podría preguntarse:

Si en la vista v1v_1 logramos QC1QC_1 para el bloque AA y en la vista v2v_2 logramos QC2QC_2 para su hijo BB, ¿por qué no consideramos AA finalizado ya y nos ahorramos una fase?

La pregunta es legítima, y la respuesta tiene dos caras. Si acortamos el commit y dejamos los locks como están, perdemos safety. Si además adelantamos el lock para recuperar safety, perdemos la combinación de cambio de vista lineal y responsividad que justifica HotStuff. Vamos a construir ambos contraejemplos y después ver cómo los protocolos de dos cadenas posteriores pagan esa diferencia con mecanismos adicionales.

El atajo tentador: commit al ver dos QCs

Recordemos las piezas de HotStuff básico. Cada réplica mantiene un highQC, el QC más alto que conoce, y un lockedQC, su memoria de seguridad. Antes de votar, aplica el predicado safeNode: acepta una propuesta si extiende el bloque de su lockedQC (regla de safety) o si el QC que la justifica tiene una vista mayor que la de su lockedQC (regla de liveness).

En la versión encadenada, los tres saltos de la cadena tienen funciones distintas. Cuando una réplica recibe una propuesta cuyo QC certifica a BB, y BB a su vez lleva QC1QC_1 sobre AA, la réplica actualiza su highQC y fija su lock en QC1QC_1. Solo cuando aparece un tercer QC consecutivo se compromete AA.

La regla ingenua cambia una sola línea: comprometer AA en el mismo momento en que la réplica fija su lock en QC1QC_1, es decir, al ver QC2QC_2. Parece inocente porque el lock y el commit ocurren juntos en la réplica que observa la cadena. El problema está en las réplicas que no la observan.

Usaremos un comité de n=4n = 4 réplicas, R1,R2,R3,R4R_1, R_2, R_3, R_4, con f=1f = 1. El quórum es n−f=3n - f = 3 votos, y R4R_4 es bizantina.

Primera forma de romperlo: el lock llega tarde y safety cae

El ataque explota que, en HotStuff, los votos de una vista se envían al líder de la vista siguiente, que es quien forma el QC. Un líder bizantino puede formar un QC y mostrarlo selectivamente.

Vista 1. R1R_1 propone AA. R1R_1, R2R_2 y R3R_3 votan, y el siguiente líder forma QC1QC_1.

Vista 2. R2R_2 propone BB, hijo de AA, justificado con QC1QC_1. Las tres réplicas correctas votan y envían sus votos a R4R_4, líder de la vista 3. Al votar, su highQC pasa a ser QC1QC_1, pero su lock sigue en la génesis: todavía no vieron un QC sobre BB.

Vista 3. R4R_4 forma QC2QC_2 y se lo muestra solo a R3R_3, dentro de una propuesta que no envía a nadie más. R3R_3 ve la cadena AA, BB con dos QCs consecutivos: fija su lock en QC1QC_1 y, bajo la regla ingenua, compromete AA.

El fork. R4R_4 propone ahora A′A', que extiende la génesis y no a AA, justificado con el QC de la génesis. R1R_1 y R2R_2 aplican safeNode: A′A' extiende el bloque de su lockedQC, que sigue siendo la génesis. Votan. Con el voto de R4R_4 hay tres votos y se forma un QC para A′A'. Si las vistas siguientes certifican un hijo de A′A', R1R_1 verá dos QCs consecutivos y comprometerá A′A'.

Dos réplicas correctas comprometieron bloques incompatibles. Ninguna regla local se violó; la falla es de diseño. El commit se declaró cuando solo una réplica correcta tenía el lock que debía protegerlo, y una sola réplica no alcanza para impedir un quórum de n−fn - f.

Figura 1

Secuencia de ataque y bifurcación en una regla 2-chain no protegida

Fuentes:

[1]
Secuencia de ataque y bifurcación en una regla 2-chain no protegida
Cómo leer esta figura

El diagrama de árbol muestra dos ramas derivadas de la génesis. La rama superior tiene el bloque A en la vista 1 y B en la vista 2, unidos por QC1; la regla de dos cadenas declara A comprometido. En la vista 3, un líder bizantino propone A' extendiendo la génesis. Las réplicas que nunca vieron QC2 conservan QC1 solo como highQC y su lock no cubre A, de modo que safeNode las deja votar A'. Resultado: A y A' terminan comprometidos en ramas incompatibles.

Visual original de TrautsLab. Bifurcación bajo una regla ingenua de dos cadenas. El líder de la vista 3 oculta QC2 y logra que las réplicas aprueben una rama competidora A'. Con locks tardíos, quien no vio QC2 no tiene lock sobre A y puede certificar A'.
Cuidado técnico

Commit de dos cadenas con los locks de HotStuff básico

Si una réplica compromete un bloque al ver dos QCs consecutivos, pero el lock sobre ese bloque solo se fija al ver el segundo QC, un líder bizantino puede ocultar el segundo QC y hacer que las réplicas correctas restantes certifiquen y comprometan una rama incompatible.
Bosquejo de Demostración: Las réplicas que no recibieron el segundo QC mantienen un lock anterior al bloque comprometido; safeNode acepta cualquier propuesta que extienda ese lock, y con el voto bizantino reúnen n - f votos para la rama conflictiva.

Segunda forma: bloquear antes y perder el progreso responsivo

La reparación evidente es adelantar el lock: que cada réplica se bloquee en QC1QC_1 apenas vota por un bloque que lo transporta, sin esperar a QC2QC_2. Así, cuando existe QC2QC_2, al menos n−fn - f réplicas, y entre ellas f+1f + 1 correctas, ya están bloqueadas en AA, y la rama conflictiva no reúne quórum. Es esencialmente el diseño de dos fases de Tendermint y Casper.

Safety vuelve, pero aparece otro problema: el lock oculto. Repitamos la escena con el lock adelantado.

Vista 2 con líder bizantino. R4R_4 forma QC1QC_1 para AA, pero envía la propuesta BB que lo transporta solo a R3R_3. R3R_3 vota y se bloquea en QC1QC_1. R1R_1 y R2R_2 nunca ven QC1QC_1.

Vista 3 con líder correcto. R1R_1 recoge mensajes new-view con el highQC de cada réplica. Para ser responsivo, avanza en cuanto tiene n−f=3n - f = 3 mensajes, y los primeros en llegar son los de R1R_1, R2R_2 y R4R_4. Ninguno contiene QC1QC_1. R1R_1 propone sobre la génesis.

El bloqueo. R3R_3 rechaza la propuesta: no extiende AA y su QC no supera la vista de su lock. Votan R1R_1 y R2R_2; R4R_4 se abstiene. Dos votos no forman QC. El adversario puede repetir el patrón vista tras vista retrasando el mensaje de R3R_3 dentro del límite de la red.

El paper de HotStuff explica que Tendermint y Casper evitan este estancamiento haciendo que el nuevo líder espere el retraso máximo de red conocido antes de proponer, para asegurarse de oír el lock más alto de toda réplica correcta. Funciona y mantiene la comunicación lineal, pero el progreso queda atado a ese límite de red en lugar de a la velocidad real de la red: se pierde la responsividad optimista.

La otra salida es la de PBFT: que el líder pruebe con un expediente cuál es el lock más alto. Es responsiva, pero el cambio de vista deja de ser lineal.

Qué compra exactamente la tercera cadena

HotStuff resuelve el dilema moviendo el lock un escalón hacia atrás y el commit otro escalón más. Una réplica correcta se bloquea en QC1QC_1 solo cuando ve QC2QC_2. Para que QC2QC_2 exista, n−fn - f réplicas votaron por BB, y al hacerlo guardaron QC1QC_1 como highQC.

Esa observación cierra el problema del lock oculto. Si alguna réplica correcta está bloqueada en QC1QC_1, al menos f+1f + 1 réplicas correctas tienen un highQC igual o superior. Cualquier conjunto de n−fn - f mensajes new-view intersecta a ese grupo en al menos una réplica correcta. El nuevo líder ve siempre un QC tan alto como cualquier lock correcto, y su propuesta pasa la regla de liveness de safeNode. No necesita esperar ni adjuntar expedientes.

El costo es que, al ver QC2QC_2, todavía no hay suficientes réplicas bloqueadas para comprometer AA. Hace falta QC3QC_3 sobre el hijo de BB: prueba que n−fn - f réplicas votaron después de ver QC2QC_2 y, por tanto, se bloquearon en QC1QC_1. Con eso, el primer contraejemplo desaparece, porque la rama conflictiva necesitaría el voto de alguna de esas réplicas.

commit(A)  ⟺  A←B←C  ∧  QC(A,v), QC(B,v+1), QC(C,v+2)\text{commit}(A) \iff A \leftarrow B \leftarrow C \;\wedge\; QC(A,v),\, QC(B,v+1),\, QC(C,v+2)

El paper de HotStuff resume este compromiso: la fase adicional es lo que permite tener a la vez cambio de vista lineal y responsividad optimista, mientras que una variante de dos fases debe volver a esperar el retraso máximo de red. La lectura detallada de esas propiedades está en safety, liveness y responsividad en HotStuff.

Cómo recuperan dos cadenas Fast-HotStuff, Jolteon y HotStuff-2

La tercera cadena no es una ley de la naturaleza. Es el precio de un conjunto concreto de objetivos. Los protocolos posteriores comprometen con dos cadenas, pero cada uno agrega una pieza que reemplaza la garantía perdida.

Fast-HotStuff y AggQC. Tras un cambio de vista, el nuevo líder adjunta un AggQC: la agregación de n−fn - f mensajes new-view firmados, cada uno con el highQC de su emisor. Las réplicas comprueban que la propuesta extiende el QC más alto contenido en esa prueba. El líder ya no puede ocultar un QC alto, y una réplica bloqueada puede verificar que su lock no protege un commit. El camino feliz sigue siendo lineal; el costo se concentra en verificar AggQC después de un cambio de vista. Los autores también presentan este diseño como defensa frente a ataques de bifurcación que afectan el rendimiento de HotStuff encadenado. Los detalles están en Fast-HotStuff con AggQC.

Jolteon y el cambio de vista cuadrático. Jolteon compromete con dos cadenas en el camino feliz, con comunicación lineal, y acepta un cambio de vista cuadrático cuando hay timeouts: las réplicas difunden mensajes de timeout con su highQC, y el certificado de timeout resultante permite justificar la propuesta del nuevo líder. Es una apuesta explícita: optimizar el caso común y pagar más solo en el camino infeliz. Su paso a producción se discute en DiemBFT, Jolteon y Ditto.

HotStuff-2 y la espera condicional. Malkhi y Nayak muestran que dos fases bastan para un protocolo lineal y optimistamente responsivo. La idea es no esperar siempre. Si el nuevo líder tiene el certificado de la vista inmediatamente anterior, ese certificado ya es el lock más alto posible y puede proponer de inmediato. Si no lo tiene, espera un intervalo acotado por el retraso de red para recoger los locks de las réplicas correctas antes de proponer. El análisis de esa frontera sigue en HotStuff-2 y la frontera DAG-BFT.

En los tres casos, la información que la tercera cadena garantizaba de forma implícita ahora se obtiene explícitamente: con una prueba agregada, con un certificado de timeout o con una espera condicional.

Impacto de Negocio & Finanzas

Impacto de elegir la regla de commit

Problema Comercial / Operacional

Recortar una fase de consenso sin la evidencia o la espera que la compensa expone el sistema a bifurcaciones entre réplicas correctas o a estancamientos tras un cambio de líder.

Solución del Paper (Insight Técnico)

HotStuff eligió la regla de tres cadenas porque ofrece cambio de vista lineal y responsividad con una regla uniforme; los diseños de dos cadenas reubican ese costo.

Impacto para el Producto / Negocio: La elección entre tres cadenas y dos cadenas es un compromiso de latencia, complejidad de cambio de vista y supuestos de red, no un ajuste gratuito.
Regla 2-Chain ingenuaInseguralock tardío permite el fork
Regla 3-Chain baseLineal y responsivauna fase lógica extra
Fast-HotStuffAggQCprueba en el cambio de vista
Jolteon / HotStuff-2TC / esperacosto en el camino infeliz
Two-Chain Fallacy

Checklist mental de la Regla de 3 Cadenas

4 de 4 revisados

Puntos clave sobre la seguridad de las cadenas de QCs.
Referencias

Bibliografía académica

Formato IEEENumerado para ingeniería, sistemas y protocolos.
  1. [1]

    M. Yin, D. Malkhi, M. K. Reiter, G. G. Gueta, and I. Abraham, "HotStuff: BFT Consensus in the Lens of Blockchain," PODC, 2019.

    safeNode, locks, regla de tres cadenas y la relación entre la fase adicional, el cambio de vista lineal y la responsividad.

  2. [2]

    M. M. Jalalzai, J. Niu, C. Feng, and F. Gai, "Fast-HotStuff: A Fast and Robust BFT Protocol for Blockchains," IEEE Transactions on Dependable and Secure Computing, vol. 21, no. 4, pp. 2478-2493, 2024, doi: 10.1109/TDSC.2023.3308848

    PaperID: FAST-HOTSTUFF-2020Abrir fuente (abre en otra pestaña)

    Commit de dos cadenas con AggQC en el cambio de vista.

  3. [3]

    R. Gelashvili et al., "Jolteon and Ditto: Network-Adaptive Efficient Consensus with Asynchronous Fallback," arXiv:2106.10362, 2021.

    PaperID: JOLTEON-DITTO-2021Abrir fuente (abre en otra pestaña)

    Commit de dos cadenas con camino feliz lineal y cambio de vista cuadrático.

  4. [4]

    D. Malkhi and K. Nayak, "HotStuff-2: Optimal Two-Phase Responsive BFT," IACR ePrint 2023/397, 2023.

    Protocolo de dos fases, lineal y optimistamente responsivo.

Fuentes primarias, papers seminales y especificaciones técnicas citadas en esta investigación.

Siguiente lectura

Continúa con Fast-HotStuff con AggQC y commit de dos cadenas, donde la prueba agregada del cambio de vista se analiza mensaje por mensaje.

Rutas vecinas

Si este tema te abrió hambre, sigue por aquí.

Series y labs que comparten área o dependen de esta ruta. Pocas opciones, para no convertir la curiosidad en menú infinito.

Sigue leyendo

Ideas conectadas con este artículo

Una ruta corta para continuar sin abrir veinte pestañas y perder el hilo.

Los comentarios se cargan al final de la lectura para no meter peso antes de tiempo.