La tolerancia a fallos bizantinos es una medida de la capacidad de un sistema distribuido para continuar operando incluso si uno o más de sus componentes fallan.
La tolerancia a fallos bizantinos es una medida de la capacidad de un sistema distribuido para continuar operando incluso si uno o más de sus componentes fallan.
Una característica definitoria de las cadenas de bloques como Bitcoin o Ethereum es que son ejecutadas por redes abiertas de nodos, a las que cualquiera puede unirse de forma seudónima sin permiso, siempre que tenga el hardware y software necesarios. Son descentralizadas, por lo que no hay una entidad central que coordine las actividades. En su lugar, las reglas y protocolos de comunicación gobiernan la operación de la red y los métodos por los cuales los nodos alcanzan el consenso.
Pero, ¿qué pasa si un nodo, o grupo de nodos, decide atacar la red transmitiendo información sobre transacciones falsas en un intento de robar fondos? La capacidad de la red para resistir tal ataque y continuar operando sin interrupciones se conoce como tolerancia a fallos bizantinos.
Historia de la tolerancia a fallos bizantinos
El término tolerancia a fallos bizantinos se origina con el problema de los generales bizantinos, un problema de teoría de juegos que plantea el dilema al que se enfrenta un grupo hipotético de generales bizantinos estacionados fuera de una ciudad enemiga que desean coordinar un ataque. Para hacerlo, necesitan un medio de comunicación seguro que les permita identificar si otros generales están transmitiendo información poco fiable, posiblemente en un intento de sabotear el ataque. Es una analogía simple, pero resume muy bien los desafíos que enfrentan los desarrolladores de sistemas distribuidos.
El problema de los generales bizantinos fue descrito por primera vez en un artículo de 1982 por tres científicos de la computación, Leslie Lamport, Robert Shostak y Marshall Pease. El término "fallo" ya era común para describir el tipo de falla descrita por el problema de los generales bizantinos; por lo tanto, la tolerancia a fallos bizantinos se convirtió en el término para describir la resistencia a tales fallos.
En la década de 1990, los investigadores desarrollaron un algoritmo llamado "Tolerancia a Fallos Bizantinos Práctica" (pBFT) que permitía a los nodos de una red alcanzar el consenso sin depender de una entidad central para coordinar. Sin embargo, tenía aplicaciones prácticas limitadas ya que el tiempo necesario para alcanzar el consenso aumentaba exponencialmente en comparación con la tasa de crecimiento de la red.
En 2008, Satoshi Nakamoto publicó el libro blanco de Bitcoin, que proponía un nuevo método de consenso tolerante a fallos bizantinos basado en el protocolo de prueba de trabajo (PoW). Desde el lanzamiento de Bitcoin, los investigadores de blockchain han avanzado estos esfuerzos mediante el desarrollo de otros métodos de consenso blockchain, como la prueba de participación (PoS) que también buscan lograr la tolerancia a fallos bizantinos.
Cómo los protocolos de consenso blockchain logran la tolerancia a fallos bizantinos
En cualquier red blockchain, independientemente del método de consenso utilizado, los mineros o validadores deben alcanzar un consenso sobre la validez de cada transacción antes de que se añada al libro mayor de la blockchain. Para comprobar si una transacción es válida, se compara con los datos históricos del libro mayor y se descarta si parece que la acción será inconsistente – por ejemplo, si alguien está intentando enviar fondos que no tiene en su cuenta. Sin embargo, las transacciones validadas se incluyen como un registro permanente e inalterable en el libro mayor, que se comparte con todos los participantes. Por lo tanto, todos los participantes tienen puntos de verdad compartidos contra los cuales validar futuras transacciones entrantes.
Los protocolos de consenso se basan en el principio de teoría de juegos para proporcionar incentivos suficientes a los participantes de la red para actuar en interés de la red en lugar de lanzar un ataque. Grandes redes como Bitcoin y Ethereum han permanecido seguras durante muchos años gracias al poder de incentivo de sus estructuras de recompensa.
Comprendiendo la tolerancia a fallos bizantinos en blockchains
Un fallo bizantino se define como cualquier fallo del sistema distribuido que se manifiesta con diferentes síntomas para diferentes observadores. Dado que las redes blockchain tienen como objetivo lograr el consenso sobre el estado del libro mayor, los fallos bizantinos típicamente toman la forma de información conflictiva con respecto a los datos de transacciones, lo que puede implicar que un minero o validador proponga un bloque inválido o intente validar una transacción inválida.
En algunos casos, los operadores de nodos detrás de tales fallos pueden estar intentando lanzar un ataque malicioso, pero los nodos también pueden sufrir de hardware o software defectuoso que puede hacer que presenten inadvertidamente información falsa. Cuanto más grande se vuelve una red, más probabilidades hay de que ocurran tales fallos.
Por lo tanto, el propósito de los protocolos de consenso no es eliminar tales fallos y lograr una tolerancia a fallos bizantinos del 100%, sino asegurar que el sistema pueda continuar operando independientemente del hecho de que inevitablemente ocurrirán fallos bizantinos. El protocolo de consenso solo necesita asegurar que la mayoría de los nodos puedan alcanzar un consenso mientras actúan en interés de la red, y la blockchain continuará operando con el libro mayor de transacciones intacto.
Aunque la tolerancia a fallos bizantinos es una característica de las blockchains, también es una característica de otros tipos de sistemas distribuidos utilizados en aplicaciones, incluyendo plantas de energía nuclear, sistemas de control de vuelo y viajes espaciales.
Aspectos esenciales de la tolerancia a fallos bizantinos
- La tolerancia a fallos bizantinos se refiere a la resistencia de los sistemas distribuidos contra el fallo de uno o más componentes
- Las blockchains logran la tolerancia a fallos bizantinos mediante la aplicación de protocolos de consenso que permiten a los nodos de la red validar transacciones
- El objetivo de los protocolos de consenso no es eliminar los fallos bizantinos, sino asegurar que el sistema sea suficientemente tolerante a los fallos, siempre que la mayoría de los participantes actúen en su interés