HotStuff: de cero a estado del arte
Artículo 12 de 47
26%
completado al llegar aquí
Sistemas distribuidosNota de investigación11 min de lectura
El modelo de fallas de parada u omisión de DLS: El paso previo a BFT
Jerarquía de fallas en DLS 1988: parada, omisión y bizantina, y por qué bajo sincronía parcial exigen n >= 2f+1 o n >= 3f+1 réplicas, con o sin firmas.
Ruta HotStuff: 0/47
Prerequisitos recomendados
Si alguno de estos conceptos todavía está medio nebuloso, empieza por aquí. Te ahorra tropiezos y un par de cejas fruncidas.
Recorre la jerarquía de modelos de falla que usan Dwork, Lynch y Stockmeyer (parada, omisión, bizantina autenticada y bizantina sin autenticar) y las cotas de resiliencia que demuestran bajo sincronía parcial.
- Consenso BFT desde cero (bft-consensus-from-zero)
- Por qué no usar timeouts fijos (por-que-no-timeouts-fijos-delta)
Detente cuando puedas explicar por qué, bajo sincronía parcial, parada y omisión exigen n >= 2f + 1 mientras que las fallas bizantinas exigen n >= 3f + 1 incluso con firmas.
Glosario de Notación Matemática y Criptográfica
Cantidad de réplicas maliciosas o con fallas arbitrarias que tolera el sistema.
n = 3f + 1Ruta mental de la jerarquía de fallas
Parada
Silencio definitivo
Omisión
Silencio selectivo
Bizantina
Comportamiento arbitrario
Resiliencia
n >= 2f + 1 vs n >= 3f + 1
Decodificador Didáctico de Conceptos BFT
En palabras simples: Un empleado que se desmaya en mitad de la reunión: hasta ese momento habló con normalidad, después ya no dice nada.
Detalle técnico: El proceso sigue el protocolo hasta que se detiene y no envía ningún mensaje posterior.
En palabras simples: Un empleado que a veces olvida enviar un correo: lo que envía es correcto, pero algunos mensajes nunca salen.
Detalle técnico: El proceso sigue el protocolo salvo que puede omitir el envío de algunos de sus mensajes.
En palabras simples: Un participante que dice a un jefe 'voté por tu proyecto' y al otro 'voté por el tuyo'.
Detalle técnico: El proceso puede desviarse del protocolo de forma arbitraria, incluida la equivocación.
Cuando se aborda el consenso BFT en Consenso BFT desde cero, se salta directamente al adversario bizantino: réplicas que mienten, duplican votos y se coordinan para romper el registro. Ese salto es correcto para HotStuff, pero oculta un escalón intermedio que aclara de dónde salen los números.
El artículo de Dwork, Lynch y Stockmeyer de 1988 no estudia un solo tipo de falla. Recorre varios modelos con el mismo método y, para cada uno, demuestra cuántos procesos defectuosos se pueden tolerar cuando la red es parcialmente síncrona. [1] Leer esa tabla en orden es la forma más corta de entender por qué un protocolo tolerante a caídas trabaja con mayorías simples y uno bizantino con supermayorías de dos tercios.
Cuatro modelos de falla, de menor a mayor poder adversarial
DLS considera procesos con fallas por parada (fail-stop), por omisión, bizantinas con autenticación y bizantinas sin autenticación. [1] Conviene leerlos como una escalera: cada peldaño le da al proceso defectuoso todo lo que tenía el anterior y algo más.
En una falla por parada, el proceso ejecuta correctamente hasta cierto paso y luego se detiene para siempre. En una falla por omisión, el proceso no se detiene, pero puede no enviar algunos de los mensajes que el protocolo le exige; lo que sí envía es correcto. Desde fuera, la omisión es más difícil de manejar que la parada porque el proceso reaparece: unos vecinos lo escuchan y otros no.
En una falla bizantina, el proceso puede comportarse de cualquier manera. La variante autenticada añade una única restricción: existe un esquema de firmas que el proceso defectuoso no puede falsificar, de modo que no puede inventar mensajes firmados por procesos correctos. [1] Sigue pudiendo mentir sobre sus propios valores, firmar dos mensajes contradictorios o callar.
La escalera importa porque un protocolo diseñado para un peldaño funciona en los de abajo, pero no en los de arriba. Un protocolo bizantino tolera caídas; un protocolo de caídas no tolera mentiras.
Sincronía parcial: el terreno donde se miden las cotas
Las cotas de DLS no tienen sentido sin el modelo de tiempo. En un sistema totalmente asíncrono, Fischer, Lynch y Paterson demostraron que ningún protocolo determinista garantiza consenso si un solo proceso puede fallar por parada. [2] La razón de fondo es que un proceso caído y uno muy lento son indistinguibles cuando no existe ninguna cota de tiempo.
DLS propone un punto intermedio. En una versión del modelo, existen cotas sobre el retraso de los mensajes y la velocidad relativa de los procesos, pero no se conocen de antemano. En otra, las cotas se conocen, pero solo se cumplen a partir de un instante desconocido, el tiempo de estabilización global o GST. [1] Los protocolos del artículo mantienen safety siempre y garantizan terminación una vez que el sistema se comporta de forma síncrona el tiempo suficiente.
Este es el modelo que heredan PBFT y HotStuff: safety no depende de la red y liveness sí. PBFT lo dice explícitamente: no confía en la sincronía para proveer safety, pero necesita cierta sincronía para asegurar liveness. [4]
Las cotas de DLS: 2f + 1 frente a 3f + 1
Bajo sincronía parcial, DLS muestra que el consenso que tolera fallas es posible si y solo si para parada y omisión, y para fallas bizantinas. [1] La cota bizantina es la misma con autenticación y sin ella: las firmas no reducen el número de procesos necesarios en este modelo. [1]
Ese resultado contrasta con el modelo síncrono. Con mensajes firmados y sincronía, el algoritmo de Lamport, Shostak y Pease resuelve el problema de los generales bizantinos para cualquier número de generales; sin firmas, necesita más de generales para tolerar traidores. [3] En otras palabras, la autenticación compra resiliencia cuando hay cotas de tiempo conocidas, pero no cuando la red puede retrasar mensajes de forma arbitraria hasta GST.
Cotas de resiliencia bajo sincronía parcial (DLS 1988)
Cotas de resiliencia bajo sincronía parcial
Por qué con caídas basta una mayoría
Una forma intuitiva de ver la cota es pensar en lo que un proceso puede esperar. Si hasta procesos pueden haberse detenido, ningún protocolo puede exigir respuestas de más de procesos sin arriesgarse a esperar para siempre. Antes de GST, además, los procesos que no respondieron podrían estar vivos y simplemente retrasados.
Supongamos . La red podría dividir a los procesos en dos mitades de y retrasar todos los mensajes entre ellas. Cada mitad ve exactamente lo que vería si la otra se hubiera caído, así que debe decidir por su cuenta, y nada impide que decidan valores distintos. Con , dos grupos de procesos siempre comparten al menos uno, y como en este modelo nadie miente, ese proceso común transporta la información correcta. Este argumento es una lectura informal; la demostración rigurosa está en el artículo. [1]
La omisión no cambia la cuenta bajo sincronía parcial porque, mirado desde fuera, un mensaje omitido se parece a un mensaje retrasado, y el modelo ya obliga al protocolo a convivir con retrasos arbitrarios antes de GST.
Por qué con fallas bizantinas hace falta 3f + 1
En el caso bizantino, el proceso común entre dos grupos ya no basta: podría ser uno de los defectuosos y contarle una historia distinta a cada grupo. Firmar no lo evita, porque una réplica bizantina puede firmar válidamente dos mensajes contradictorios.
El protocolo sigue sin poder esperar más de respuestas. Para que dos grupos de ese tamaño compartan al menos un proceso correcto, su intersección debe superar a los que pueden mentir: , es decir, . Con , cada grupo tiene procesos y la intersección tiene al menos . Es la misma aritmética que PBFT convierte en regla de protocolo con réplicas y quórums de mensajes. [4]
Qué se paga al pasar de caídas a fallas bizantinas
Un protocolo diseñado solo para caídas asume que ningún participante emitirá un mensaje incorrecto; en un consorcio entre organizaciones esa suposición no se puede imponer.
Bajo sincronía parcial, tolerar f participantes bizantinos cuesta f réplicas más que tolerar f caídas, y las firmas no reducen esa cifra.
Checklist mental de modelos de falla
4 de 4 revisados
Bibliografía académica
- [1]
C. Dwork, N. Lynch, and L. Stockmeyer, "Consensus in the Presence of Partial Synchrony," JACM, 1988.
Modelos de falla por parada, omisión y bizantina (con y sin autenticación), sincronía parcial con GST y sus cotas de resiliencia.
- [2]
M. J. Fischer, N. A. Lynch, and M. S. Paterson, "Impossibility of Distributed Consensus with One Faulty Process," JACM, vol. 32, no. 2, pp. 374-382, 1985, doi: 10.1145/3149.214121
Imposibilidad del consenso determinista en asincronía pura con una sola falla por parada.
- [3]
L. Lamport, R. Shostak, and M. Pease, "The Byzantine Generals Problem," ACM TOPLAS, vol. 4, no. 3, pp. 382-401, 1982, doi: 10.1145/357172.357176
Contraste síncrono: más de 3m generales con mensajes orales y cualquier número con mensajes firmados.
- [4]
M. Castro and B. Liskov, "Practical Byzantine Fault Tolerance," OSDI, 1999.
Safety sin depender de la sincronía, liveness con sincronía eventual, 3f + 1 réplicas y quórums de 2f + 1.
Siguiente lectura
La intersección de quórums que aparece al final se demuestra paso a paso en Quórums en acción. Para ver cómo GST y los timeouts se combinan con esos quórums en un protocolo, continúa con Sincronía parcial y quórums.
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.
Series relacionadas
Ethereum: de historia a labs
Serie progresiva para entender Ethereum desde el whitepaper, forks y The Merge hasta EVM, Solidity, proof-of-stake, rollups, account abstraction, DeFi, observabilidad y laboratorios reproducibles.
Substrate: del runtime al consenso propio
Serie de 20 capítulos, de neófito a experto, sobre Substrate (Polkadot SDK): runtime en Wasm, FRAME, extrinsics, estado, pesos, actualizaciones sin fork, Aura, BABE, GRANDPA, sincronización, parachains, XCM, Sassafras, BEEFY y cómo conectar un consenso BFT propio a un nodo.
Ruta práctica: activos digitales en la operación
Nueve módulos, de menor a mayor dependencia, para decidir cómo usar custodia, wallets, llaves, firmas multifirma y MPC, AML/KYT y stablecoins con Fireblocks, BitGo, Kaleido, Circle y Tether.
Labs para convertir lectura en práctica
Prueba de trabajo y reajuste de dificultad
Laboratorio determinista para medir el costo de la prueba de trabajo y ver cómo el reajuste por altura de bloque estabiliza el tiempo entre bloques.
Consensus benchmark
Banco reproducible para comparar consenso BFT y documentar los trade-offs de HotStuff-2.
Ethereum local: Anvil, wallet y primera transacción
Laboratorio base para levantar una red local, crear cuentas, firmar transacciones y observar receipts sin gastar ETH real.
RPC y Cast: leer Ethereum con lupa
Ejercicios con JSON-RPC y Cast para consultar bloques, nonces, gas, receipts, logs y errores reproducibles.
Sigue leyendo
Ideas conectadas con este artículo
Una ruta corta para continuar sin abrir veinte pestañas y perder el hilo.
El concepto de GST: El momento mágico en el que la tormenta de red cesa
Qué es GST en el modelo DLS de 1988: safety en toda ejecución, liveness tras la estabilización y las dos variantes, con Δ desconocida o válida tras GST.
Por qué las firmas criptográficas (autenticación) reducen los nodos necesarios para el consenso
Mensajes orales frente a firmados: por qué las firmas eliminan la cota 3f+1 en el modelo síncrono de Lamport, pero no bajo la sincronía parcial de DLS.
Consenso BFT desde cero: réplicas, quórums y fallas bizantinas
Primer paso de la serie HotStuff: qué problema resuelve BFT, por qué aparece n >= 3f + 1 y cómo separar safety de liveness sin drama matemático.
Firmas en BFT: threshold, aggregate y por qué AggQC no es un QC normal
Puente entre QC/highQC y Fast-HotStuff: firmas de réplicas, threshold signatures, aggregate signatures y la evidencia que transporta AggQC.