Explicación del problema de los generales bizantinos

Un sistema informático confiable debe poder funcionar incluso si uno o más de sus componentes fallan. Un componente defectuoso puede mostrar un comportamiento frecuentemente pasado por alto: entregar datos contradictorios a diferentes secciones del sistema. Entonces, ¿cuál es el problema de los generales bizantinos? El problema de los generales bizantinos es una expresión abstracta del problema de lidiar con este tipo de falla.

El problema de los generales bizantinos es un problema de teoría de juegos que describe lo difícil que es para partes dispersas llegar a un consenso sin la ayuda de una parte central de confianza. ¿Cómo pueden los miembros de una red ponerse de acuerdo sobre una realidad específica cuando nadie puede verificar las identidades de los demás miembros?

La teoría de juegos es un marco para pensar en eventos sociales con actores que compiten. En un entorno estratégico, la teoría de juegos concibe circunstancias sociales entre participantes competidores y produce una toma de decisiones óptima de agentes autónomos y competidores.

Los generales bizantinos se basan en una analogía de teoría de juegos. El problema es que varios generales asedian Bizancio. Han rodeado la ciudad, pero deben decidir cuándo asaltar como grupo. Ganarán si todos los generales asaltan simultáneamente; sin embargo, perderán si atacan.

Debido a que cualquier carta que transmitan o reciban podría haber sido interceptada o enviada de manera engañosa por los defensores de Bizancio, los generales no tienen canales de comunicación seguros entre ellos. ¿Cómo pueden coordinar ataques simultáneos los generales?

Este artículo tiene como objetivo explicar qué es una falla bizantina en la cadena de bloques y cómo resolver el problema de los generales bizantinos.

El artículo de investigación

"El Problema de los Generales Bizantinos," un artículo de investigación escrito por Leslie Lamport, Robert Shostak y Marshall Pease, fue publicado en 1982. La importancia de este problema es evidente desde la primera página, que señala que la Administración Nacional de Aeronáutica y del Espacio (NASA), el Comando de Sistemas de Defensa de Misiles Balísticos y la Oficina de Investigación del Ejército financiaron su investigación. 

Aunque el problema de los generales bizantinos ya se había estudiado en la informática antes de 1982, este fue uno de los primeros intentos de traducirlo en soluciones paralelas. La siguiente analogía ilustra el problema de los generales bizantinos. Varias divisiones del ejército bizantino están estacionadas justo fuera de una ciudad enemiga, preparadas para la guerra. La única forma de que varios generales se comuniquen es a través de un mensajero. Deben ponerse de acuerdo sobre un curso de acción. 

Sin embargo, debemos suponer que ciertos generales, con la intención de evitar que los generales leales decidan sobre un único curso de acción, son traidores. Para asegurar que un pequeño grupo de traidores no pueda interrumpir las comunicaciones, se requiere un algoritmo. 

Para abordar el problema de los generales bizantinos, los generales leales necesitan un medio seguro para ponerse de acuerdo en un plan (conocido como consenso) y llevarlo a cabo (conocido como coordinación). Aunque resolver el problema de los generales bizantinos es una tarea difícil, ahora entendemos mejor el problema fundamental. Es crucial destacar que, como sugiere el ejemplo, el concepto se puede aplicar a las comunicaciones militares. 

No obstante, este problema afecta a todo tipo de sistemas informáticos, no solo a los utilizados en aplicaciones militares. El problema de los generales bizantinos debe resolverse si un grupo disperso de nodos (por ejemplo, computadoras u otros dispositivos físicos) necesita lograr comunicaciones confiables.

Comprensión de la tolerancia a fallas bizantinas (BFT)

Existen varias razones por las cuales un sistema informático distribuido podría fallar. En el escenario militar mencionado anteriormente, las fallas bizantinas son esencialmente traidores que intentan interrumpir las comunicaciones entre generales leales.

Esto podría ser un defecto de software, un mal funcionamiento del hardware o un ataque malicioso cuando se aplica a sistemas informáticos del mundo real. Dicho de otra manera, las fallas bizantinas no siempre tienen que ser el resultado de un esfuerzo bien coordinado por parte de un actor malintencionado. Pueden existir dificultades que impidan que los nodos lleguen a un consenso en redes distribuidas.

Cualquier falla del sistema que muestre síntomas diversos a diferentes observadores se denomina falla bizantina. No contiene restricciones y suposiciones sobre el tipo de comportamiento que un nodo puede exhibir (por ejemplo, un nodo puede generar datos arbitrarios mientras se hace pasar por un actor honesto).

En prácticamente cualquier sistema informático distribuido, las fallas bizantinas son prácticamente inevitables.

Imaginemos que hay un corte de energía y todos los nodos se desconectan simultáneamente. Ahora, surge la pregunta de si la red sigue siendo operativa y capaz de mantener una comunicación confiable. ¿O el sistema en su conjunto deja de funcionar o se vuelve vulnerable a ataques de repente?

En una red razonablemente segura, algo tan simple como algunos nodos sin conexión no tiene un efecto discernible en la red. La tolerancia a fallas bizantinas es la capacidad de defenderse contra estas condiciones. Las redes que pueden soportar más fallas bizantinas se dice que tienen una mayor tolerancia, lo que implica que son más seguras que aquellas que no pueden.

Capturar la incidencia y la taxonomía real de fallas bizantinas en varios sistemas es un tema vasto y desafiante. Sin embargo, se puede especificar de tal manera que surja una definición formal de tolerancia a fallas bizantinas.

Vale la pena señalar que las fallas bizantinas son las más graves y difíciles de corregir. La tolerancia a fallas bizantinas es necesaria en plantas nucleares, sistemas de motores de aviación y prácticamente cualquier sistema cuyas acciones dependan de los resultados de una gran cantidad de sensores.

Problema de los generales bizantinos en un sistema distribuido

Solo los sistemas descentralizados son susceptibles al problema de los generales bizantinos, ya que carecen de una fuente confiable de información y no tienen forma de confirmar la información que obtienen de otros usuarios de la red. En sistemas centralizados, se confía en una autoridad para difundir información precisa mientras evita la propagación de información errónea o fraudulenta en toda la red.

Por ejemplo, en el sistema financiero tradicional, se confía en que los bancos proporcionen a los clientes saldos precisos e historiales de transacciones. Si un banco intenta engañar o desorientar a sus clientes, el banco central o el gobierno está autorizado para restaurar la confianza.

El dilema de los generales bizantinos, que requiere inconsistentemente el establecimiento de la verdad, no se resuelve mediante sistemas centralizados. En cambio, eligen no enfrentar el problema en absoluto, optando por la eficiencia sobre la confiabilidad. Sin embargo, los sistemas centralizados son propensos a la corrupción de la autoridad central.

Ejemplo del problema de los generales bizantinos

El problema de los generales bizantinos se ejemplifica con el dinero. ¿Cómo podría una sociedad construir un sistema monetario en el que todos los miembros puedan confiar y estar de acuerdo? A lo largo de la historia, las sociedades han utilizado metales preciosos u otros elementos raros, como conchas o cuentas de vidrio, como moneda. El oro abordó el problema de los generales bizantinos porque era confiable y reconocido en sistemas descentralizados como el comercio internacional.

El peso y la pureza del oro, sin embargo, siguieron siendo poco confiables hasta ahora. El fracaso del oro para abordar completamente el problema de los generales bizantinos llevó a que el establecimiento y la emisión de dinero fueran asumidos por organismos centrales de confianza, principalmente gobiernos. Los gobiernos monopolizaron las casas de moneda para infundir confianza en el peso y la pureza de la moneda. Por lo tanto, el fallo bizantino no se resolvió mediante sistemas centralizados.

Además, las autoridades centrales de confianza para el dinero, los gobiernos, han traicionado esa confianza al incautar, degradar o modificar la moneda. Para resolver el problema de los generales bizantinos, una moneda debe ser verificable, resistente a la falsificación y desconfiada. Este logro no se logró hasta la llegada de Bitcoin (BTC).

Cómo se resuelve el problema de los generales bizantinos

El problema puede resolverse implementando un protocolo que emplee mecanismos tolerantes a fallas. Ante la incertidumbre, adoptar un procedimiento entre los generales es la mejor manera de tomar decisiones. 

Como resultado, se vuelve probabilístico en lugar de determinista porque nada puede garantizarse. Este es precisamente el caso cuando hay menos comunicación directa entre pares, y cada uno es autosuficiente. Debido a que cada general está en un lugar diferente, hay una separación física entre ellos.

Soluciones para lograr tolerancia a fallas bizantinas

Blockchain: La solución para el problema de los generales bizantinos

El problema de los generales bizantinos puede resolverse con la ayuda de un blockchain. Se trata de brindar a las personas una forma de comunicarse de manera segura en un mundo impredecible. En el mundo real, la mayoría de las transacciones ocurren entre desconocidos que no se conocen ni confían entre sí. 

Cada individuo es como un general, esperando órdenes para atacar o defender su posición. No hay intermediarios para arbitrar el ataque en su nombre; está completamente solo en la toma de decisiones.

Un blockchain crea una capa que puede confiarse sin necesidad de confiar en cada individuo. Esto se logra mediante una red de nodos que se unen para ponerse de acuerdo sobre la verdad antes de que se registre. Si el general tiene dudas sobre el contenido de la comunicación, los otros generales pueden verificarlo usando lo que saben que es cierto.

Una vez que un nodo lo ha registrado, se envía una copia a todos los demás nodos de la red, haciendo redundante la información. El algoritmo de consenso de Prueba de Trabajo (PoW) está diseñado para lograr este objetivo. Los actores maliciosos seguirán intentando manipular el sistema porque la información no siempre es precisa. 

Dado que el sistema fue diseñado para ser utilizado por el público en general, se implementan mecanismos tolerantes a fallas y seguridad en un blockchain. En este escenario, fue necesaria la criptografía para asegurar que los mensajes no pudieran ser alterados. 

El sistema proporciona pares de claves para firmar digitalmente una comunicación y verificar la identidad como prueba de que proviene de las personas que supuestamente la enviaron. Una vez que los mensajes han sido autenticados, se registran para obtener transparencia y prueba histórica de responsabilidad.

Cómo resuelve Bitcoin el problema de los generales bizantinos

En lo que respecta al dinero, Bitcoin fue la primera solución real al problema de los generales bizantinos. Muchos planes y proyectos anteriores a Bitcoin intentaron crear dinero independiente del gobierno, pero todos fallaron de alguna manera.

Bitcoin necesita los medios para manejar la propiedad y evitar el doble gasto como sistema monetario. Bitcoin emplea un blockchain o un libro de contabilidad distribuido público, que almacena un historial de todas las transacciones para lograr esto de manera confiable. La blockchain, en la analogía de los generales bizantinos, es la verdad en la que todas las partes deben estar de acuerdo.

Si todos los nodos en la red de Bitcoin pudieran ponerse de acuerdo sobre qué transacciones ocurrieron, cuándo y en qué orden, podrían verificar la propiedad de Bitcoin y crear un sistema monetario funcional y confiable sin necesidad de una autoridad central.

Prueba de trabajo (PoW) y el problema de los generales bizantinos

Satoshi Nakamoto lanzó el primer Bitcoin whitepaper en octubre de 2008. Aunque el nombre "problema de los generales bizantinos" no se utiliza en este documento, Nakamoto proporcionó efectivamente una solución que se implementaría en enero de 2009 con la introducción de la red Bitcoin.

Satoshi ideó un medio para utilizar seguridad criptográfica y cifrado de clave pública para responder al problema de los generales bizantinos en una red electrónica digital. Para evitar la manipulación de datos, la seguridad criptográfica utiliza el hashing, un proceso de codificación. La identidad de un usuario de la red se verifica mediante el cifrado de clave pública.

Una transacción se asegura en un bloque que está conectado a otros bloques por su valor hash en la seguridad criptográfica. Todos los hashes se pueden rastrear hasta la raíz de todos los hashes, que es un bloque inicial. La blockchain es un sistema que utiliza un árbol de Merkle para verificar hashes que provienen de un bloque génesis. 

Cada bloque en la red que proviene del primer bloque, también conocido como bloque génesis, es válido. Los mineros validan bloques, compitiendo con otros mineros para resolver acertijos criptográficos y producir bloques como parte de un método de consenso PoW.

Al emplear un mecanismo de consenso de prueba de trabajo, Bitcoin superó el problema de los generales bizantinos y estableció un conjunto claro y objetivo de reglas para la blockchain. Para agregar información al blockchain, llamados bloques, un miembro de la red debe publicar pruebas de que puso mucho esfuerzo en hacer el bloque. Este trabajo tiene un alto costo para el creador, incentivándolo a compartir información precisa.

Porque las reglas son objetivas, no puede haber desacuerdo o manipulación de la información en la red de Bitcoin. El sistema para seleccionar quién puede acuñar nuevos Bitcoin y las leyes que regulan qué transacciones son válidas o inválidas son objetivas. Además, es imposible eliminar un bloque de la blockchain después de haber sido agregado, haciendo que la historia de Bitcoin sea inalterable.

Por lo tanto, el problema de los generales bizantinos es resuelto por los mineros que son similares a los generales en la versión de Satoshi de la blockchain. Cada nodo es responsable de validar transacciones, que son similares a mensajes entregados a los generales. Los actores malintencionados (por ejemplo, hackers) que intentan robar mensajes o dañar la red pueden considerarse el enemigo.

Los hackers (es decir, el hombre en el medio) no pueden atacar fácilmente la blockchain porque los mensajes utilizan seguridad criptográfica. Para evitar la manipulación, los mensajes o transacciones se agrupan en bloques y se cifran para una protección adicional. Satoshi hace las cosas más probabilísticas al poner a los mineros en competencia para validar los bloques. Esto lo descentraliza más porque ningún minero individual puede recibir todas las recompensas monopolizando la validación. 

En cambio, los mineros deben competir para resolver un acertijo utilizando su poder computacional, conocido como la tasa de hash. Cuanto mayor sea la tasa de hash de un minero, más probabilidades tendrá de resolver el acertijo. Cuando el minero que ha resuelto el acertijo transmite la solución a la red, todos los demás mineros deben validar o negar el valor si es erróneo. Un objetivo de dificultad es un valor que debe ser igual o menor que el valor correcto.

Los miembros de la red de Bitcoin pueden estar de acuerdo sobre el estado de la blockchain y todas las transacciones en la blockchain en cualquier momento. Cada nodo verifica si los bloques son válidos según el criterio de prueba de trabajo y si las transacciones son válidas según criterios adicionales.

Si un miembro de la red intenta transmitir información engañosa, todos los nodos en la red lo detectarán como objetivamente inválido y lo ignorarán. No es necesario confiar en otros miembros de la red de Bitcoin porque cada nodo puede verificar toda la información en la red, haciéndolo un sistema sin confianza.

La blockchain también es descentralizado, lo que significa que el sistema no debe tener un único punto de falla. Los bloques se guardan en una base de datos distribuida, que se replica en toda la red. Esta redundancia también ayuda a la tolerancia a fallas, asegurando que ninguna computadora defectuosa pueda derribar todo el sistema. Esto es equivalente a tener muchos mensajeros en caso de que uno sea emboscado por el enemigo. El mensaje no se perderá porque será copiado por otros mensajeros.

Soluciones innovadoras: Prueba de participación (PoS) y Prueba de participación delegada (DPoS)

PoS es otro mecanismo de consenso de blockchain que busca abordar el problema de los generales bizantinos. Se implementó por primera vez en 2012. Las redes basadas en PoS, a diferencia de las redes basadas en PoW, no dependen de la minería de criptomonedas. En cambio, se realiza una técnica llamada participación.

Los usuarios (llamados validadores) apuestan fondos en este sistema. Los validadores que poseen más monedas en una cadena de bloques pueden validar más bloques y obtener mayores recompensas. Los usuarios que intentan validar transacciones incorrectas arriesgan perder su dinero apostado.

Los usuarios pueden apostar monedas utilizando computadoras domésticas normales en lugar de necesitar máquinas especializadas para la minería en una red basada en PoW. Varias redes basadas en PoS han creado formas de evitar ataques de doble gasto y otras posibles vulnerabilidades de seguridad causadas por fallas bizantinas. Por ejemplo, Ethereum 2.0 (Serenity) utilizará el algoritmo Casper PoS, que requiere que dos tercios de los nodos estén de acuerdo en un bloque antes de que pueda crearse.

La Prueba de participación delegada es una técnica de consenso de blockchain que funciona de manera similar a la prueba de participación y se desarrolló por primera vez en 2014. Ambas requieren que los usuarios pongan dinero en juego. Solo algunos usuarios (llamados delegados) pueden validar transacciones y generar bloques en redes basadas en DPoS.

En general, cualquier usuario puede apostar las monedas de una cadena de bloques para emitir un voto a favor de un candidato a delegado. Las recompensas en bloque se distribuyen por lo general en proporción a la cantidad de monedas apostadas en elecciones de delegados por nodos elegidos a sus votantes.

Los nodos pueden llegar a un consenso considerablemente más rápido usando DPoS de lo que pueden hacerlo con PoW o PoS. A gran escala, esto significa que las transacciones pueden manejarse significativamente más rápido. Mantener un alto nivel de tolerancia a fallas bizantinas con DPoS puede volverse problemático en algunos casos debido al compromiso.

Debido a que menos nodos son responsables de mantener segura la red, potencialmente es más fácil que los nodos conspiran contra los intereses de la mayoría. Sin embargo, las redes basadas en DPoS tratan de evitar este escenario celebrando elecciones de delegados regularmente para asegurarse de que los delegados sean responsables de sus decisiones.