Desde el inicio de Bitcoin en 2008 como sistema financiero electrónico peer-to-peer, se han creado muchas monedas digitales, cada una de ellas operando con un mecanismo especial. Pero lo único que todas las monedas digitales tienen en común es la cadena de bloques como elemento básico de su estructura.
Todas las cadenas de bloques están diseñadas intencionalmente para ser descentralizadas y, con pocas excepciones, actúan como un libro de contabilidad digital mantenido por una red distribuida de nodos informáticos. Por esta razón, la tecnología blockchain ha permitido la creación de sistemas económicos confiables donde se pueden realizar transacciones financieras de manera transparente y confiable sin necesidad de intermediarios.
Actualmente, el uso de monedas digitales se está adoptando como una alternativa viable a los sistemas bancarios y métodos de pago tradicionales que dependen en gran medida de la confianza.
Como es el caso en la mayoría de los sistemas informáticos distribuidos, los participantes en una red de criptomonedas deben ponerse de acuerdo periódicamente sobre el estado actual en el que opera la cadena de bloques. Esto es lo que llamamos un logro de consenso. Sin embargo, llegar a un consenso sobre redes distribuidas de forma segura es una tarea muy difícil.
Entonces, ¿cómo puede una red distribuida de nodos informáticos ponerse de acuerdo sobre si es probable que algunos nodos fallen o actúen ilegalmente? Ésta es la cuestión fundamental del llamado Problema de los Generales Bizantinos del que surgió el concepto de Tolerancia a Fallos Bizantinos.
¿Cuál es el problema de los generales bizantinos?
En resumen, el problema de los generales bizantinos de 1982 se concibió como un dilema lógico que ilustraba cómo un grupo de generales bizantinos podría tener problemas para comunicarse entre sí al intentar ponerse de acuerdo sobre el siguiente paso de su plan.
El dilema supone que cada general tiene su propio ejército, que cada grupo está ubicado en diferentes lugares alrededor de la ciudad que pretende atacar y que cada general debe aceptar atacar o retirarse. No importa si atacan o se retiran siempre que todos los generales lleguen a un consenso, es decir, acuerden una decisión conjunta para implementarla de forma coordinada.
Por lo tanto, podemos considerar los siguientes objetivos:
Cada general debe decidir: atacar o retirarse (sí o no).
Una vez que se toma una decisión, no se puede cambiar.
Todos los generales deben acordar la misma decisión e implementarla de manera sincronizada.
Los problemas de comunicación anteriores están relacionados con el hecho de que cada general sólo puede comunicarse con otro general a través de mensajes enviados por el transportista/mensajero. Por tanto, el principal desafío para los generales bizantinos era que los mensajes podían retrasarse, dañarse o perderse.
Además, incluso si el mensaje se entrega con éxito, uno o más generales pueden (por cualquier motivo) optar por actuar maliciosamente y enviar un mensaje falso para confundir a los demás generales, lo que provocará el fracaso total de la misión.
Si aplicamos este dilema en el contexto de blockchain, cada generación representa un nodo de la red y los nodos deben llegar a un consenso sobre el estado actual del sistema. Dicho de otra manera, la mayoría de los participantes en una red distribuida tienen que aceptar y realizar la misma acción para evitar un fracaso total.
Por tanto, la única forma de llegar a un consenso en este tipo de sistemas distribuidos es teniendo ⅔ (dos tercios) o más de nodos honestos. Esto significa que si la mayoría de la red decide actuar de manera maliciosa, el sistema será vulnerable a fallas y ataques (por ejemplo, ataque del 51%).
Tolerancia a fallas bizantinas - BFT
En definitiva, la tolerancia a fallos bizantinos (BFT) es propiedad de un sistema capaz de resistir el tipo de fallo derivado del Problema de los Generales Bizantinos. Esto significa que el sistema BFT puede continuar funcionando incluso si algunos nodos fallan o se comportan de manera maliciosa.
Hay más de una solución posible al problema de los generales bizantinos, lo que significa que existen múltiples formas de construir un sistema BFT. Del mismo modo, existen múltiples enfoques diferentes para que las cadenas de bloques logren la tolerancia a fallas bizantinas y esto nos lleva a los llamados algoritmos de consenso.
Algoritmos de consenso de blockchain
Podemos definir un algoritmo de consenso como el mecanismo a través del cual una red blockchain llega a un consenso. Las aplicaciones más comunes son Prueba de trabajo (PoW) y Prueba de participación (PoS). Pero tomemos como ejemplo el caso de Bitcoin.
Si bien el protocolo Bitcoin estipula las reglas básicas del sistema, es el algoritmo de consenso conocido como Prueba de trabajo (PoW) el que define cómo se siguen estas reglas para llegar a un consenso (por ejemplo, durante la verificación de transacciones).
Aunque el concepto de Prueba de Trabajo es más antiguo que las criptomonedas, Satoshi Nakamoto desarrolló una versión modificada como un algoritmo que permitió la creación de Bitcoin como un sistema BFT.
Tenga en cuenta que el algoritmo de prueba de trabajo (PoW) no es 100% tolerante a fallas bizantinas, pero debido al costoso proceso de minería y las técnicas criptográficas, PoW ha demostrado ser una de las implementaciones más seguras y confiables de las redes blockchain.
Por lo tanto, el algoritmo de prueba de trabajo diseñado por Satoshi Nakamoto es utilizado por muchos como una de las soluciones más ingeniosas a los errores bizantinos.
Conclusión
El problema de los generales bizantinos es un dilema interesante que finalmente dio lugar a los sistemas BFT que se aplican ampliamente en diferentes escenarios. Incluso fuera de la industria blockchain, algunos casos de uso de BFT incluyen las industrias de la aviación, el espacio y la energía nuclear.
En el contexto de las monedas digitales, contar con una red de comunicación eficiente junto con un mecanismo de consenso es vital para cualquier sistema blockchain. Proteger estos sistemas es un esfuerzo continuo y los algoritmos de consenso existentes todavía están trabajando para superar algunas limitaciones (como la escalabilidad). Sin embargo, la Prueba de trabajo (PoW) y la Prueba de participación (PoS) son dos enfoques muy interesantes para los sistemas BFT y las aplicaciones potenciales son sin duda una fuente de inspiración generalizada.
