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

En 1 Minuto

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.

Prerrequisitos
  • El dilema del libro contable
  • El ataque del doble gasto
  • La metáfora del banco sin cajero central
Cuándo Detenerte

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.

Mapa conceptual

Ruta mental: del silencio a la contradicción

  1. Ejecución correcta

    La réplica sigue el algoritmo al pie de la letra.

  2. Falla por parada

    La réplica se detiene y no vuelve a enviar nada.

  3. Falla por omisión

    La réplica sigue viva, pero algunos de sus mensajes nunca salen.

  4. Falla bizantina

    La réplica puede hacer cualquier cosa, incluido contradecirse.

Cuatro escalones de un mismo eje: cuánta libertad tiene una réplica defectuosa para desviarse del protocolo.

Tendemos a pensar en las computadoras como máquinas que no se equivocan. Si le pides a un procesador sano calcular 2+22 + 2, la respuesta será 44. 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. 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.

Análisis de Escenario de Ejecución

Qué ve el resto del sistema en cada modelo

✓ Ruta Feliz (Normal Path)
Condición Inicial

Comportamiento del Protocolo

Invariante de Seguridad Preservado

Tiempo / Latencia de Resolución

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. 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. Por eso su algoritmo no intenta clasificar qué tipo de error ocurrió: asume que hasta ff réplicas pueden comportarse de cualquier manera y garantiza el servicio mientras no se supere ese número.

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.

Explicación Didáctica

Decodificador Didáctico de Conceptos BFT

Falla por parada (crash)

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.

Falla bizantina

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.

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

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.

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 3m3m generales para tolerar mm traidores.

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 ff fallas por parada u omisión es posible si y solo si n≥2f+1n \ge 2f + 1, y que para fallas bizantinas la cota es n≥3f+1n \ge 3f + 1, tanto con autenticación como sin ella.

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. Ese contraste se desarrolla en detalle más adelante en la serie.

PBFT es el ejemplo práctico del extremo bizantino: usa n=3f+1n = 3f + 1 réplicas, que es el mínimo para tolerar ff fallas arbitrarias en su modelo, y avanza cada fase cuando reúne 2f+12f + 1 mensajes coincidentes. Con f=1f = 1, 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 ff réplicas extra que permiten que cualquier par de quórums comparta una réplica correcta.

Impacto de Negocio & Finanzas

Elegir el modelo de fallas es elegir qué riesgo se acepta

Problema Comercial / Operacional

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.

Solución del Paper (Insight Técnico)

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.

Impacto para el Producto / Negocio: La corrección del registro deja de depender de que cada operador y cada versión del software se comporten bien.
Caídas u omisionesn >= 2f+1bajo sincronía parcial
Fallas bizantinasn >= 3f+1con o sin firmas
Quórum bizantino2f+1mensajes coincidentes
Con f = 14 réplicasen lugar de 3

Criterios clave

Checklist didáctico

Criterios clave

4 de 4 revisados

Repasa estas ideas antes de pasar al problema de los generales bizantinos.
Referencias

Bibliografía académica

Formato IEEENumerado para ingeniería, sistemas y protocolos.
  1. [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

    PaperID: LAMPORT-BYZANTINE-1982Abrir fuente (abre en otra pestaña)

    Traidores sin restricciones de comportamiento, el caso de tres generales y la cota de más de 3m generales con mensajes orales.

  2. [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. [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.

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

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 2f+12f + 1 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.

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.