HotStuff: de cero a estado del arte
Artículo 3 de 47
6%
completado al llegar aquí
Sistemas distribuidosNota de investigación11 min de lectura
¿Por qué mienten las computadoras? Del error de hardware al boicot
Por qué una réplica puede detenerse, callar o contradecirse, y por qué BFT asume fallas arbitrarias: bugs y ataques producen el mismo síntoma ante el protocolo.
Ruta HotStuff: 0/47
Distingue las tres grandes formas en que una réplica se aparta del protocolo (detenerse, omitir mensajes, comportarse de forma arbitraria) y entiende por qué los protocolos BFT diseñan contra la peor de ellas.
- El dilema del libro contable
- El ataque del doble gasto
- La metáfora del banco sin cajero central
Detente cuando puedas explicar por qué, bajo sincronía parcial, tolerar f réplicas caídas exige n >= 2f + 1 y tolerar f réplicas bizantinas exige n >= 3f + 1, con o sin firmas.
Ruta mental: del silencio a la contradicción
Ejecución correcta
La réplica sigue el algoritmo al pie de la letra.
Un reloj que marca la hora exacta
Falla por parada
La réplica se detiene y no vuelve a enviar nada.
Un coche que se queda sin gasolina
Falla por omisión
La réplica sigue viva, pero algunos de sus mensajes nunca salen.
Cartas que a veces no llegan al buzón
Falla bizantina
La réplica puede hacer cualquier cosa, incluido contradecirse.
Un testigo que cuenta dos versiones
Tendemos a pensar en las computadoras como máquinas que no se equivocan. Si le pides a un procesador sano calcular , la respuesta será . El problema aparece cuando una réplica deja de ser sana o cuando lo que ejecuta no es exactamente lo que el diseñador del protocolo creía que ejecutaba.
"Mentir" es una palabra fuerte, pero útil. En un sistema replicado, una réplica miente cuando sus mensajes no corresponden a una ejecución correcta del protocolo: dice que votó algo que no votó, reporta un estado que no tiene o le cuenta una historia distinta a cada vecino. No hace falta malicia para eso. Basta un bug, un disco corrupto o una clave robada.
Tres formas de apartarse del protocolo
La literatura clásica de consenso ordena las fallas según cuánta libertad le dan a la réplica defectuosa. Dwork, Lynch y Stockmeyer analizan varios modelos en el mismo marco: procesos que se detienen (fail-stop), procesos que omiten enviar mensajes y procesos bizantinos, con o sin autenticación. [3] Conviene verlos como capas: cada modelo permite todo lo que permite el anterior y algo más.
Parada. La réplica funciona bien hasta un instante y después no hace nada más. Un corte de energía o un proceso que termina por una excepción no manejada encajan aquí. Lo importante es que nunca envía información falsa: si algo llegó de ella, era correcto.
Omisión. La réplica sigue ejecutando, pero algunos de sus mensajes no salen o se pierden. Un búfer lleno que descarta paquetes o un proceso que pierde un mensaje por un error de manejo son ejemplos razonables. Lo que sí envía sigue siendo correcto; el daño es el silencio intermitente, que para los demás se parece mucho a una red lenta.
Bizantina. La réplica puede hacer cualquier cosa: enviar valores inventados, contradecirse, coordinarse con otras réplicas defectuosas o callar en el peor momento. En el artículo de los generales bizantinos, los traidores no tienen ninguna restricción de comportamiento, y el objetivo del algoritmo es que los leales acuerden a pesar de ellos. [1]
Qué ve el resto del sistema en cada modelo
Bugs y ataques producen el mismo síntoma
Es tentador asociar "bizantino" con "hacker". Pero el modelo no pregunta por la intención, solo por el comportamiento observable. Lamport, Shostak y Pease presentan el problema precisamente como una cuestión de sistemas confiables: componentes que funcionan mal y entregan información contradictoria a distintas partes del sistema. [1] Un chip defectuoso que corrompe un bit antes de enviar un mensaje no tiene malicia, pero para el receptor es indistinguible de un adversario.
Castro y Liskov motivan PBFT con el mismo diagnóstico desde la práctica: los ataques maliciosos y los errores de software son cada vez más comunes, y pueden hacer que un nodo defectuoso exhiba un comportamiento arbitrario. [2] Por eso su algoritmo no intenta clasificar qué tipo de error ocurrió: asume que hasta réplicas pueden comportarse de cualquier manera y garantiza el servicio mientras no se supere ese número. [2]
Hay una razón de ingeniería detrás de esta elección. Si el protocolo asume solo caídas, su corrección depende de que ninguna réplica emita jamás un mensaje incorrecto. Esa suposición se rompe con una actualización con errores, una configuración divergente entre nodos o una clave filtrada. Asumir fallas arbitrarias cuesta más réplicas y más mensajes, pero convierte la corrección en una propiedad que no depende de adivinar cómo va a fallar el sistema.
Decodificador Didáctico de Conceptos BFT
En palabras simples: Un miembro del equipo que se queda dormido y no vuelve a contestar durante la reunión.
Detalle técnico: La réplica sigue el protocolo correctamente hasta que se detiene; después no emite ningún mensaje.
En palabras simples: Un participante que dice 'sí' a un grupo y 'no' al otro, sea por confusión o a propósito.
Detalle técnico: Comportamiento arbitrario: la réplica puede desviarse del protocolo de cualquier forma, incluida la equivocación.
Tres generales: por qué la contradicción cuesta réplicas
El ejemplo más pequeño del artículo de 1982 muestra el costo de la contradicción. Hay un comandante y dos tenientes, y uno de los tres puede ser traidor. Los mensajes son "orales": el receptor sabe quién le habla, pero no puede probarle a nadie qué le dijeron. [1]
Primer escenario: el comandante es leal y ordena "atacar", pero el segundo teniente es traidor y le cuenta al primero que recibió "retirarse". Segundo escenario: el comandante es traidor, le dice "atacar" al primer teniente y "retirarse" al segundo, y el segundo teniente, leal, repite fielmente "retirarse". Desde el punto de vista del primer teniente, ambos escenarios son idénticos: escuchó "atacar" del comandante y "retirarse" del otro teniente.
En el primer escenario debe obedecer al comandante leal y atacar; como no distingue un caso del otro, también ataca en el segundo. Pero el mismo razonamiento, aplicado al segundo teniente del segundo escenario, lo lleva a retirarse. Los dos tenientes leales terminan en desacuerdo. Lamport, Shostak y Pease usan esta indistinguibilidad para mostrar que, con mensajes orales, tres generales no bastan para tolerar un traidor, y generalizan el resultado: hacen falta más de generales para tolerar traidores. [1]
Con caídas, este dilema no aparece. Una réplica caída no dice "retirarse" a nadie; simplemente calla. El problema de las fallas bizantinas no es el silencio sino la presencia de dos versiones plausibles de la misma historia, y descartar una de ellas exige suficientes testigos correctos para superar a los que mienten.
Cuántas réplicas cuesta cada modelo
La pregunta "¿cuántas réplicas necesito?" no tiene una única respuesta: depende del modelo de fallas y del modelo de tiempo. Bajo sincronía parcial, que es el modelo de los protocolos de la familia HotStuff, Dwork, Lynch y Stockmeyer muestran que el consenso que tolera fallas por parada u omisión es posible si y solo si , y que para fallas bizantinas la cota es , tanto con autenticación como sin ella. [3]
Ese último matiz importa. Las firmas digitales impiden que una réplica falsifique mensajes de otra, pero no impiden que una réplica bizantina firme dos votos contradictorios ni que la red retrase a las réplicas correctas. En el modelo síncrono la historia es distinta: con mensajes firmados, el algoritmo de Lamport, Shostak y Pease funciona con cualquier número de generales. [1] Ese contraste se desarrolla en detalle más adelante en la serie.
PBFT es el ejemplo práctico del extremo bizantino: usa réplicas, que es el mínimo para tolerar fallas arbitrarias en su modelo, y avanza cada fase cuando reúne mensajes coincidentes. [2] Con , eso significa cuatro réplicas, frente a las tres que bastarían si solo hubiera que tolerar una caída. La diferencia no es un margen de seguridad arbitrario: son las réplicas extra que permiten que cualquier par de quórums comparta una réplica correcta.
Elegir el modelo de fallas es elegir qué riesgo se acepta
Un sistema diseñado solo para caídas asume que ninguna réplica emitirá jamás un mensaje incorrecto; un bug, una configuración divergente o una clave comprometida rompen esa suposición.
Un protocolo BFT no necesita saber por qué falla una réplica: tolera hasta f réplicas con comportamiento arbitrario a cambio de f réplicas adicionales y quórums de 2f + 1.
Criterios clave
Criterios clave
4 de 4 revisados
Bibliografía académica
- [1]
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
Traidores sin restricciones de comportamiento, el caso de tres generales y la cota de más de 3m generales con mensajes orales.
- [2]
M. Castro and B. Liskov, "Practical Byzantine Fault Tolerance," OSDI, 1999.
Ataques y errores de software como motivación del modelo bizantino; n = 3f + 1 réplicas y quórums de 2f + 1.
- [3]
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, y sus cotas de resiliencia bajo sincronía parcial.
Siguiente lectura
Para ver cómo esas cotas se convierten en quórums concretos, sigue con Consenso BFT desde cero y luego con Quórums en acción, donde se demuestra por qué dos quórums de votos siempre comparten una réplica correcta.
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 ataque del doble gasto: Cómo los estafadores digitales copian el dinero como si fuera un PDF
Por qué un saldo digital se puede gastar dos veces si las réplicas no acuerdan un único orden de transacciones, y cómo los quórums 2f+1 lo impiden.
La metáfora del banco sin cajero central: ¿Quién valida las transacciones?
Cómo varias réplicas validan transacciones sin un servidor central: mismo estado inicial, mismo orden y ejecución determinista, la intuición de SMR.
Replicación de Máquina de Estados (SMR) con manzanas y peras
Un inventario de manzanas y peras muestra por qué réplicas deterministas que aplican el mismo log ordenado llegan siempre al mismo estado en SMR.
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.