¿Qué es Tolerancia a Fallas Bizantinas?

Entre los conceptos más comunmente vistos en blockchain tenemos el de Tolerancia a Fallas Bizantinas o BFT por sus siglas en inglés. Sin embargo, muchos de los que están llegando al mundo de la blockchain, desconocen el termino y su utilidad en la tecnología. Es por ello, que este artículo tratará de explicar de forma amena que es la Tolerancia a Fallas Bizantinas y su importancia.

¿Qué es Tolerancia a Fallas Bizantinas?

Una forma fácil de explicar lo que es Tolerancia a Fallas Bizantinas sería el siguiente texto:

La Tolerancia a Fallas Bizantinas, es la capacidad de un sistema informático distribuido, de soportar fallas bizantinas. Las fallas bizantinas, son aquellas fallas provenientes de dispositivos de dicho sistema informático que son fundamentales para su correcto funcionamiento. Generalmente, estas fallas pueden ser fallas de consenso, de validación o verificación de datos. Puede ser incluso fallas en el protocolo de respuesta frente a situaciones que presenta el sistema informático. Este tipo de  tolerancia está ligada a la capacidad del sistema de generar un consenso frente a toda situación. Esto con el fin de dar una respuesta coherente a la falla del sistema y seguir funcionando en los parametros establecidos.

Suena complejo de realizar y lo es. El término de falla bizantina, se deriva del Problema de los Generales Bizantinos. Este problema lógico en pocas palabras indica que, los actores deben acordar una estrategia concertada para evitar una falla catastrófica del sistema. Pero dentro del sistema algunos actores pueden no ser confiables. Ante este hecho, el sistema debe crear mecanismos que garanticen que esos actores maliciosos no puedan conducir a la falla sin más remedio. La creación de esos mecanismos, son los que precisamente otorgan la tolerancia a las fallas bizantinas.

Puede sonar algo sencillo, pero la realidad es muy distinta. Alcanzar la Tolerancia a Fallas Bizantinas, es uno de los desafíos más difíciles de la informática. Hasta el punto, que el primer diseño en resolverlo de forma satisfactoria fue el Bitcoin, de Satoshi Nakamoto. Con ello marcó un hito, uno que ha acompañado a la tecnología blockchain hasta ahora.

El Problema de los Generales Bizantinos (PGB)

El Problema de los Generales Bizantinos, fue descrito por Leslie Lamport, Robert Shostak y Marshall Pease, en su artículo de 1982, “El problema de los generales bizantinos”. El problema es el siguiente:

Un grupo de generales comanda una parte del ejército bizantino rodeando una ciudad. Estos generales desean formular un plan para atacar la ciudad. En su forma más simple, los generales solo deben decidir si atacar o retirarse. Algunos generales prefieren atacar, mientras que otros prefieren retirarse. Lo importante es que cada general acuerde una decisión común. Ya que un ataque poco entusiasta de unos pocos generales se convertiría en una derrota y sería peor que un ataque coordinado o una retirada coordinada.

El problema se complica por la presencia de generales traidores que no solo votan por una estrategia subóptima, sino que pueden hacerlo selectivamente. Por ejemplo, si nueve generales votan, cuatro de los cuales apoyan el ataque mientras que otros cuatro están a favor de la retirada, el noveno general puede enviar un voto de retirada a esos generales a favor de la retirada, y un voto de ataque al resto. Aquellos que recibieron un voto de retiro del noveno general se retirarán, mientras que el resto atacará (lo que puede no ser bueno para los atacantes). El problema se complica aún más por el hecho de que los generales están físicamente separados y tienen que enviar sus votos a través de mensajeros que pueden no entregar votos o pueden falsificar votos.

Esto es esencia un problema de comunicación distribuida. Una situación bastante común en sistemas informáticos distribuidos, por lo que su resolución, ayuda a mejorar estos sistemas.

¿Cómo funciona la Tolerancia a Fallas Bizantinas?

Para generar sistemas que cumplan con Tolerancia a Fallas Bizantinas, se necesita que el sistema defina un conjunto de reglas comunes que deben cumplirse. Es precisamente este conjunto de reglas, el que permite resolver el Problema de los Generales Bizantinos de forma satisfactoria. El conjunto de reglas más común para llegar a este tipo de soluciones es el siguiente:

  1. Se inicia cada proceso en un estado de indecisión (ni ATACAR, ni RETIRARSE).
  2. Se garantiza un medio de comunicación para las parte de la red. Esto con el fin de desplegar mensajes de forma segura. El medio, también servirá para comunicar e identificar las partes de forma inequívoca.
  3. Las partes comienzan a pasar a un estado de decisión (ATACAR o RETIRARSE). Llegar a este punto en sistemas informáticos, conlleva un proceso determinista. De esta forma, se trata evitar la manipulación externa en el valor de las decisiones.
  4. Una vez decididas las partes, se envian las comunicaciones y se totalizan las decisiones. Gana el estado con mayor cantidad de decisiones a favor.

¿Alguna forma más sencilla de explicar?

Ciertamente el caso anterior puede ser un poco complejo. Por ello, una explicación más sencilla y aplicando lo anterior sería:

Cuando realizamos una transacción en la blockchain esta transacción comienza en un estado no decidido (TX no confirmada). La confirmación de esta transacción pasa porque cada nodo en la red comience a calcular su validez y sea incluida en un bloque. Este proceso de confirmación es dado por la minería, y la minería es un acto puramente deterministico. Calcular un hash y su veracidad dentro del conjunto de transacciones depende de operaciones matemáticas dificilmente manipulables. Cuando la transacción es confirmada, empieza a tener el consenso de que la transacción es valida. Y con con cada nueva confirmación podemos estar seguro de que seguirá siendo valida.

Relación entre BFT y los protocolos de consenso

Los protocolos de consenso que se usan en la tecnología blockchain en su mayoría son tolerantes a fallos bizantinos. Esto empezo a ser así, cuando Satoshi Nakamoto diseño al Bitcoin. Nakamoto tomó en consideración que el Bitcoin como sistema distribuido debía contar con esta característica. De lo contrario, el sistema era susceptibles a fallos y sería muy inseguro. Para lograr que Bitcoin fuera tolerante a este tipo de fallas, aplicó el protocolo de consenso PoW.

Desde entonces, con toda la evolución de la tecnología blockchain los nuevos protocolos de consenso han tomado en consideración este punto. Incluso el protocolo de consenso más osado, el DPoS toma en cuenta este tipo de fallas en su programación. Todo ello con el mismo objetivo: mantener segura las redes blockchain donde se aplica. 

Deja un comentario