Tolerancia a las fallas bizantinas, una guía rápida

¿Recuerdas la típica escena de matrimonio entre la protagonista y su pareja en una telenovela o película, donde, de la nada, el público dice “me opongo” y luego el curso de la historia cambia por completo? Las fallas bizantinas funcionan de manera muy similar.

Aunque claro, en esos casos, el protagonista decidió con quién quedarse, a pesar de los defectos que tenía cada uno, llegando finalmente a un acuerdo con ambas partes para terminar en un final propio de una producción cinematográfica de Disney. Es en este punto, donde nos centraremos y comenzaremos a hablar de la tolerancia a las fallas bizantinas, un sistema informático que, si bien no es tan romántico y fantástico como una película de amor, es una solución ideal y muy utilizada en la tecnología blockchain de criptomonedas.

La tolerancia a fallas bizantinas, o BFT, es uno de los conceptos más importantes en blockchain y quizás uno de los menos conocidos. Sin ella, la tecnología blockchain tal como la conocemos no sería posible.

En este artículo tienes todo lo que debes saber sobre la tolerancia a fallas bizantinas, qué es, cómo funciona, ventajas, desventajas y casos de uso.

Pero antes de que podamos entender qué es la tolerancia a fallas bizantinas, debemos dar un paso atrás y averiguar qué significan los pares, los nodos y el consenso y qué tácticas tienen que ver con todo esto.

¿Qué son los pares y los nodos?

La mayoría de las cadenas de bloques o criptomonedas funcionan como redes en las que todas las computadoras de la red tienen el mismo acceso y derechos, y se comunican directamente entre sí. Cada computadora individual en esta red se conoce como un par o un nodo. En un sistema verdaderamente descentralizado, ningún par o nodo tiene más autoridad o poder que el siguiente. Esto significa que no hay gerentes, coordinadores o directores para hacer cumplir las reglas, determinar lo que es cierto o castigar el mal comportamiento. En cambio, el sistema se basa en el hecho de que todos los nodos deben seguir las mismas reglas o protocolo para llegar a un acuerdo.

¿Qué es el consenso?

Consenso significa simplemente un acuerdo general. En un sistema descentralizado donde no hay autoridades, lograr el consenso es una de las cosas más importantes y más difíciles de hacer. Para que el sistema o red funcione correctamente, la mayoría de los nodos deben estar de acuerdo en lo que es verdad, llegando a un consenso a intervalos regulares. El problema es que algunos nodos inevitablemente fallarán, se comportarán mal o simplemente no estarán de acuerdo con el consenso de los otros nodos, por lo que el sistema debe diseñarse de tal manera que se ocupe de esta inevitabilidad.

¿Qué es la tolerancia a fallas bizantinas (BFT)?

Podemos definirlo como la capacidad de un sistema informático distribuido para llegar a un consenso suficiente y funcionar correctamente, a pesar de los componentes maliciosos o errores (nodos) en el sistema que fallan y difunden información incorrecta. En otras palabras, es un protocolo de consenso apropiado para evitar fallas catastróficas del sistema. Un ejemplo práctico sería evitar creer en los rumores de nuestros vecinos y tratar de mantener un punto de vista objetivo sobre la información de una u otra persona.

Actualmente, podemos encontrar diferentes proyectos que utilizan la práctica de la tolerancia a fallas bizantinas: Hyperledger Fabric de la Fundación Linux y Zilliqa, un proyecto asiático reconocido por su cripto ZIL.

De hecho, el término «falla bizantina» y «tolerancia a la falla bizantina» se deriva del problema de los generales bizantinos, que, dentro de la tecnología y la informática, es un dilema complejo y bien investigado, a pesar de su historia que suena fácil.

El dilema de los generales bizantinos

Durante la guerra, los generales deben decidir si atacar o retirarse frente al enemigo. En tal situación, no faltan generales que prefieren atacar y dar su corazón hasta el final, mientras que prefieren otros retirarse. Evidentemente, lo importante es llegar a un acuerdo común, ya que un ataque desorganizado acaba en derrota.

El problema radica en la presencia de espías o traidores, como en Among Us, que velarán por sus propios intereses. Para esto, imaginémonos en esta situación: somos nueve generales de las fuerzas armadas españolas y la preocupación por nuestros enemigos es cada vez más latente, por lo que tuvieron que convocar una asamblea para votar qué haremos: atacar o defendernos.

De los nueve de nosotros, cuatro acordamos retirarnos y cuatro acordamos atacar. La decisión recae en ese noveno general, que puede ser un traidor. Ahí es donde radica el problema, ya que él tiene la decisión absoluta: atacamos o nos retiramos.

Ahora bien, a esto le podemos agregar otro problema de comunicación y es que pensamos que no estaban juntos, pero enviaron cartas con nuestra decisión, las cuales pueden ser falsificadas o no entregadas por los mensajeros. En estas circunstancias, como posible solución, es donde actúa la tolerancia a fallos bizantinos. Pero profundicemos en esto en el siguiente punto.

La Tolerancia a fallas bizantinas es la capacidad de un sistema informático distribuido para soportar fallas bizantinas.

Estos fallos pueden ser:

  • Fallos de validación.
  • Fracasos del consenso.
  • Fallos en la verificación de datos.
  • Fallos en el protocolo de respuesta ante situaciones de red.

Esta tolerancia está ligada a la capacidad de la red, en su conjunto, de crear un mecanismo de consentimiento . El propósito de esto es dar una respuesta coherente a la falla del sistema.

Tolerancia práctica a fallas bizantinas (PBFT)

En un intento por superar los problemas bizantinos, Barbara Liskov y Miguel Castro introdujeron un algoritmo de consenso de Tolerancia práctica a fallas bizantinas (pBFT) en 1999. Su objetivo es garantizar una replicación práctica de la máquina de estado bizantino para tolerar nodos maliciosos o bizantinos.

El pBFT sigue un enfoque asíncrono. Los siguientes son aspectos esenciales del algoritmo de consenso pBFT:

  • Todos los nodos se ensamblan en una secuencia.
  • Un nodo de red sirve como nodo líder y el resto son nodos de respaldo.
  • El nodo principal o líder atiende la solicitud del cliente. Funciona como moderador entre el cliente y los nodos de respaldo.
  • Todos los nodos son capaces de comunicarse con otros nodos para verificar los nodos honestos.
  • Los nodos honestos deberían poder llegar a un consenso para el próximo cambio global en la red basado en la regla de la mayoría.
  • Identifica la fuente del mensaje para asegurarse de que sea enviado por el remitente correcto.
  • Garantiza que el mensaje no se haya modificado ni dañado en el medio.

¿Cómo funciona?

Volviendo al ejemplo anterior, ante el problema de los traidores y mensajeros que pueden retener o distorsionar la información (es decir, una falla bizantina), la tolerancia a las fallas bizantinas establecería un sistema con mecanismos de consenso que aseguren que los traidores no pueden inducir una falla.

Así, asegura que los generales leales pueden tener un acuerdo mayoritario y evita que, en el caso del matrimonio digno de un Oscar, la protagonista y su apuesto pretendiente se separen. Ciertamente, para ello, las reglas deben ser definidas por el sistema.

Conozcamos las reglas más comunes dentro de la tolerancia a las fallas bizantinas. Imagina que estamos en un proceso de minería y queremos realizar una transacción en una cadena de bloques, utilizando un método de tolerancia a fallos bizantino. En esa circunstancia, observaremos cuatro fases :

  • Como usuarios que estamos realizando las transacciones, enviamos nuestra solicitud de confirmación al nodo principal de la red. Sin embargo, considerando que la primera regla es iniciar en un estado indeciso, la transacción en la cadena de bloques no se confirmará por el momento.
  • El nodo principal transmitirá nuestra petición a todos los nodos secundarios o de respaldo, para que cada uno pueda verificarla e incluirla. En este instante, recordando el ejemplo, el sistema está garantizando un medio seguro de comunicación de la información.
  • Luego de que la información ha sido difundida y verificada, los nodos comienzan a evaluar si la transacción es válida o no, pasando así a un estado de decisión.
  • Finalmente, los nodos, en base a su evaluación y verificación de que cada decisión fue la emitida por cada nodo, realiza el servicio que originalmente se solicitó (confirmación de las transacciones), culminando el proceso con la autorización de los nodos sobre la vigencia de las transacciones.

Los requisitos para los nodos son que sean deterministas y comiencen en el mismo estado. El resultado final es que todos los nodos honestos se ponen de acuerdo sobre el orden del registro y lo aceptan o lo rechazan.

El nodo líder se cambia en un formato de tipo round robin durante cada vista e incluso se puede reemplazar con un protocolo llamado cambio de vista si ha pasado una cantidad de tiempo específico sin que el nodo líder multidifunda la solicitud.

Una gran mayoría de nodos honestos también puede decidir si un líder es defectuoso y eliminarlo con el siguiente líder en línea como reemplazo.

¿Cómo se relaciona la tolerancia a fallas bizantinas con blockchain?

La tecnología Blockchain es la forma en que las criptomonedas validan, procesan y registran transacciones. Para que se realice una transacción, un grupo de nodos debe aceptar que es válida. Cada red blockchain tiene un algoritmo de consenso, que son las reglas específicas que siguen sus nodos para llegar a un acuerdo sobre las transacciones.

El algoritmo de consenso es cómo una cadena de bloques logra la tolerancia a fallas bizantinas. Dado que las criptomonedas están descentralizadas, cada una enfrenta una versión a gran escala del problema de los generales bizantinos. La cadena de bloques debe poder funcionar incluso si tiene nodos que no funcionan correctamente o proporcionan información falsa.

Bitcoin (CRYPTO:BTC) primero tuvo como objetivo resolver este problema con una prueba de trabajo. En este algoritmo de consenso, los mineros deben resolver ecuaciones complejas utilizando equipos informáticos especializados. El primer minero en resolver una ecuación correctamente gana el derecho de agregar un bloque de transacciones y ganar recompensas. Si no produce los datos correctos, habrá gastado tiempo y energía en vano.

El otro tipo popular de algoritmo de consenso es la prueba de participación. Se trata de validadores que apuestan su criptomoneda, lo que significa que la guardan en una billetera por el derecho de verificar las transacciones. Si el protocolo lo elige para agregar un bloque a la cadena de bloques, entonces puede ganar recompensas criptográficas. Pero, si intenta aprobar transacciones no válidas, perderá parte o la totalidad de su criptografía apostada.

Ambos algoritmos de consenso tienen tolerancia a fallas bizantinas hasta cierto punto porque pueden funcionar correctamente incluso si algunos nodos proporcionan datos incorrectos.

Ventajas y desventajas

Hay algunos beneficios valiosos de la tolerancia a fallas bizantinas:

  • No requiere un poder de cómputo significativo o un uso de energía porque no hay mineros que resuelvan ecuaciones complejas para cada bloque de transacciones. Esto lo hace mucho más ecológico que la prueba de trabajo.
  • Las transacciones no requieren múltiples confirmaciones. Si los nodos están de acuerdo sobre un bloque de transacciones, se confirma inmediatamente.
  • Dado que todos los nodos pueden participar en la acción, todos pueden compartir las recompensas. No hay tanta variación entre los nodos que obtienen recompensas como puede haber en la prueba de trabajo y la prueba de participación.

Ninguna solución es perfecta, y la Tolerancia a fallas bizantinas también tiene algunos inconvenientes notables:

  • Es vulnerable a los ataques de Sybil (llamado así por un libro sobre una mujer con un trastorno de personalidad múltiple), donde una de las partes puede controlar una gran parte de los nodos. Cuantos más nodos haya, más difícil será lanzar un ataque Sybil.
  • Requiere comunicación entre nodos en cada paso del proceso. Esto lleva tiempo, lo que puede ser un problema desde el punto de vista de la escalabilidad.
  • Es posible que una cadena de bloques no tenga todos los nodos funcionando correctamente a veces, y siempre habrá malos actores que intenten manipular las transacciones. Cada criptomoneda tiene un algoritmo de consenso diseñado para ayudarla a lograr al menos cierto grado de tolerancia a fallas bizantinas. Como regla general, estos algoritmos permiten que la criptomoneda funcione normalmente siempre que al menos dos tercios de sus nodos funcionen correctamente.

Casos de uso

Hoy en día, hay un puñado de plataformas de cadena de bloques que utilizan versiones optimizadas o híbridas del algoritmo pBFT como modelo de consenso o al menos parte de él, en combinación con otro mecanismo de consenso.

Zilliqa

Zilliqa emplea una versión altamente optimizada de pBFT clásica en combinación con una ronda de consenso PoW cada ~100 bloques. Usan firmas múltiples para reducir la sobrecarga de comunicación de pBFT clásico y en sus propios entornos de prueba, han alcanzado un TPS de unos pocos kilómetros con la esperanza de escalar aún más a medida que se agregan más nodos.

Esto también es un resultado directo de su implementación de pBFT dentro de su arquitectura de fragmentación para que los grupos de consenso de pBFT permanezcan más pequeños dentro de fragmentos específicos, conservando así la naturaleza de alto rendimiento del mecanismo y limitando el tamaño del grupo de consenso.

Hyperledger

Hyperledger Fabric es un entorno colaborativo de código abierto para proyectos y tecnologías de cadena de bloques alojados por la Fundación Linux y utiliza una versión autorizada del algoritmo pBFT para su plataforma.

Dado que las cadenas autorizadas utilizan grupos pequeños de consenso y no necesitan lograr la descentralización de cadenas de bloques abiertos y públicos como Ethereum, pBFT es un protocolo de consenso efectivo para proporcionar transacciones de alto rendimiento sin necesidad de preocuparse por optimizar la plataforma para escalar a grandes grupos de consenso.

Además, las cadenas de bloques autorizadas son privadas y se invitan con identidades conocidas, por lo que ya existe confianza entre las partes, lo que mitiga la necesidad inherente de un entorno sin confianza, ya que se supone que menos de ⅓ de las partes conocidas dañarían el sistema de manera intencional.

¿Por qué es importante BFT?

Para el profano, los tecnicismos de BFT pueden parecer de interés principalmente para los informáticos y los entusiastas de las criptomonedas. Lo son, hasta cierto punto. Además, las fallas bizantinas ya no deberían ser una preocupación para los consumidores después de que se establezca una cadena de bloques segura.

Mientras tanto, aquellos que estén interesados ​​en usar cadenas de bloques para fines distintos a las transacciones financieras pueden educarse con BFT, que todavía se encuentra en las etapas iniciales de planificación en muchos lugares. Para ciertas aplicaciones de blockchain, la solución de Bitcoin al problema de la falla bizantina puede no ser efectiva.

BFT es un componente crítico de una cadena de bloques exitosa y se puede aplicar en varios métodos. Elegir un método significa considerar el tipo de ecosistema de cadena de bloques que una organización busca construir, así como los objetivos que tiene la comunidad.

Conclusión

La Tolerancia a fallas bizantinas es un concepto bien estudiado en sistemas distribuidos y su integración a través del algoritmo de Tolerancia a fallas bizantinas prácticas en sistemas y plataformas del mundo real, ya sea a través de una versión optimizada o una forma híbrida, sigue siendo un componente clave de la infraestructura de las criptomonedas en la actualidad.

A medida que las plataformas dependen desarrollándose e innovando en el campo de los modelos de consenso para sistemas públicos de cadena de bloques a gran escala, proporcionar mecanismos avanzados de tolerancia a fallas bizantinas será crucial para mantener la integridad de varios sistemas y su naturaleza sin confianza.

A la luz de esto, es fundamental ver a BFT como una herramienta esencial para garantizar que el sistema continúe funcionando correctamente a pesar de la presencia de actores maliciosos. Debido a que la cadena de bloques es abierta y transparente, podría atraer partes poco éticas. Por lo tanto, es vital tener una comprensión sólida de los procesos de consenso, incluido BFT.