Tolerancia a Fallas Bizantinas, o bien BFT por sus iniciales en inglés, es uno de los conceptos más esenciales de la blockchain y tal vez uno de los menos conocidos. Sin ella, no sería posible la tecnología blockchain como la conocemos.

El término de falla bizantina, se deriva del Problema de los Generales Bizantinos (PGB). Este inconveniente lógico supone, en resumen, que los actores deben convenir una estrategia concertada para eludir una falla aciaga del sistema. Mas existe la posibilidad de que en el sistema haya actores que pueden no ser fiables. Dado este hecho, el sistema debe crear mecanismos que garanticen que esos actores maliciosos no puedan conducir a la falla sin más ni más antídoto. La creación de esos mecanismos son los que exactamente dan la tolerancia a las fallas bizantinas.

Puede sonar algo fácil, mas la realidad es muy diferente. Alcanzar la Tolerancia a Fallas Bizantinas, es uno de los retos más bastante 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 esto marcó un jalón, uno que ha acompañado a la tecnología blockchain hasta el momento.

La Tolerancia a Fallas Bizantinas, es la capacidad de un sistema informático distribuido, de aguantar faltas bizantinas.

Estas fallas pueden ser:

  • Fallas de acuerdo.
  • Fallas de validación.
  • Fallas de verificación de datos.
  • Fallas en el protocolo de contestación en frente de situaciones de la red.

Esta tolerancia está ligada a la capacidad de que la red, como un todo, pueda crear un mecanismo de consenso. La finalidad de este es dar una contestación congruente a la falla del sistema.

¿De qué forma marcha la Tolerancia a Fallas Bizantinas?

La Tolerancia a Fallas Bizantinas marcha definiendo un conjunto de reglas que deja solucionar el Inconveniente de los Generales Bizantinos de forma satisfactoria. Lograr esto es complejo, puesto que estas clases de fallos no implica limitaciones. Esta situación hace al inconveniente más complejo y bastante difícil de tratar. No obstante, en muchos sistemas informáticos esta tolerancia es un requisito. Por esta razón, para poder lograr esta meta, un sistema tolerante a fallos bizantinos debe cumplir por lo menos lo siguiente:

  1. Se debe empezar cada proceso con un estado no decidido (ni SI, ni NO). En este punto, la red plantea una serie de valores determinísticos aplicables al proceso.
  2. Para compartir los valores, se debe asegurar un medio. Esto con la intención de desplegar mensajes con seguridad. El medio, asimismo servirá para comunicar y también identificar las unas partes de forma indudable.
  3. Llegados a este punto, los nodos computan los valores y pasan a un estado decidido (SI o bien NO). Cada nodo debe producir su estado, el que es una parte de un proceso puramente determinístico.
  4. Una vez decididos, totalizan y gana el estado con mayor cantidad de resoluciones a favor.

Estos cuatros puntos definen el funcionamiento básico de un algoritmo tolerante a fallos bizantinos.

Una explicación más cercana

Ciertamente el caso precedente puede ser un tanto complejo. Por este motivo, una explicación más fácil y aplicada a la blockchain sería:

Imaginemos que Juan efectúa una transacción Bitcoin.

Cada nodo en internet, empieza a recopilar la transacción en un estado no decidido (TX no confirmada). La confirmación de esa transacción pasa, por un trabajo de minería (nuestro protocolo de acuerdo). El proceso de minería, contrasta que el hash de la transacción sea adecuada y lo incluye en un bloque.

Este proceso de comprobación es intensivo en cálculo, y solo es posible por medios determinísticos. Con cada nueva confirmación (estado decidido) de la transacción dada por la mayor parte de la red, Juan puede estar seguro de que la transacción ha sido tomada como válida.

Casos de empleo de la Tolerancia a Fallas Bizantinas

La Tolerancia a Fallas Bizantinas tiene la capacidad de solucionar distintos inconvenientes. Entre estos, vamos a hablar de ciertos más relevantes para entender un tanto más su extensa utilidad:

Caso #1: Empleo en compiladores de software

Un compilador de código fuente es una de las herramientas informáticas más complejas que podamos conocer. Los compiladores tienen la capacidad de transformar el código fuente de un programa en un binario capaz de ser ejecutado por el ordenador. Esto quiere decir que transforman algo próximo al lenguaje humano (como C/C++ o bien Go) en lenguaje máquina o bien binario.

En medio de todo esto, los compiladores “desgranan” su capacidad en múltiples sub-programas para poder efectuar las próximas acciones:

  1. Traducir el código fuente a la arquitectura de procesador deseada. Por servirnos de un ejemplo, podemos decidir si recopilar para x86-treinta y dos (computador) o bien ARM (móviles). En este caso, escogemos al x86-treinta y dos.
  2. Ajusta los factores a las capacidades de la familia o bien generación del procesador objetivo. Un punto a tener en consideración, puesto que el código de una generación superior probablemente no se ejecute en una precedente. En este punto, decidimos hacer código para los Core i3 de 2da Generación.
  3. Empieza a compendiar el código y todos y cada uno de los sub-programas convierten al mismo en código máquina. Paralelamente, los subprogramas deciden donde se puede optimar y qué optimizaciones aplicar al código. El resultado final es nuestro programa ya compilado y listo para ser ejecutado.

En este proceso, la Tolerancia a Fallas Bizantinas es esencial, puesto que garantiza lo siguiente:

  1. Que los subprogramas apliquen correctamente los factores y optimizaciones para la arquitectura y generación escogida. De no hacerlo, el resultado final va a tener fallos y va a fallar.
  2. La aplicación de optimizaciones debe velar pues exactamente las mismas no signifiquen la duplicación de datos. Mas la deduplicación a nivel binario tampoco debe afectar al funcionamiento de las unas partes del binario. En este punto, un análisis de fallas bizantinas es preciso y los compiladores han de ser capaces de examinar esto.
compilador

Caso #2: Sistemas de almacenaje de datos

Otro caso de empleo de la tolerancia a fallas bizantinas, se aplica los sistemas de almacenaje de datos. Muchos sistemas de base de datos e inclusive sistemas de ficheros lo incorporan para prosperar la confiabilidad de los datos guardados. Un caso de esto, es el sistema de ficheros ZFS. Este sistema de archivado es capaz de contestar avanzadas capacidades de hashing, replicación, de-duplicación, corrección de fallos, manejo y almacenaje de grandes cantidades de datos.

Para conseguir esto, ZFS usa esquemas de tolerancia a fallas bizantinas para garantizar:

  1. La no omisión de procesos elementales para el tratamiento de los datos guardados o por guardarse en el sistema de ficheros. Por poner un ejemplo, la aplicación de hashes a los datos y metadatos, compresión, corrección de fallos o bien de-duplicación de exactamente los mismos.
  2. Que no se efectúen pasos indeseables en el procesamiento de datos. Como una de-duplicación que conlleve a la pérdida de datos en el sistema. O bien una corrección de fallos que dañe información.
  3. Los procesos de creación, lectura y escritura en estructuras anidadas de ZFS emplean esta clase de técnicas para asegurar que exactamente las mismas sean consistentes en todo instante.

Gracias a todo esto, ZFS sostiene los datos guardados en su estructura seguramente. Motivo por el que se le conoce como el sistema de ficheros más seguro y avanzado del planeta informático.

Caso #3: Sistemas de aviónica

Este es el caso del Sistema de Manejo de Información de los aeroplanos. Un sistema que marcha en tiempo real y que tiene tolerancia a fallas bizantinas.

Cada uno de los sensores del aeroplano se comunican con los sistemas de mando y control brindando información en tiempo real. La falla de un sensor, no debe representar en ningún instante una falla aciaga para la aeronave. Para conseguir esto, se emplea tolerancia a fallas bizantinas. Esto con el propósito de compensar los datos del sensor o bien de sistemas dañados y sostener a la aeronave a salvo.

De hecho, en este punto la aplicación de tolerancia a fallos bizantinos es un reto. Debido a la cantidad de sistemas y los diferentes escenarios a manejar. La aviónica debe tener muy presente casos como reconfiguración, duplicación, falla de sistemas enteros, y todavía de esta forma ofrecer resistencia a este género de fallos. Aunque la resistencia al cien por ciento es imposible, los ingenieros y programadores hacen un enorme trabajo en este sentido.

sistemas-de-control-boeing-setecientos ochenta y siete

Caso #4: Protocolos de acuerdo blockchain

Los protocolos de acuerdo en blockchain como PoW son tolerantes a fallos bizantinos. Estos dejan lograr a una red distribuida un acuerdo en condiciones bizantinas. Cuando Satoshi Nakamoto diseñó Bitcoin, tomó en cuenta este género de tolerancia. Para esto, creó una serie de reglas y aplicó el protocolo de acuerdo PoW para crear un software con tolerancia fallos bizantinos. No obstante, esta tolerancia no es del cien por ciento .

Pese a ello, PoW ha probado ser una de las implementaciones más seguras y fiables para redes de blockchain. En ese sentido, el algoritmo de acuerdo de prueba de trabajo, desarrollado por Satoshi Nakamoto, es considerado por muchos como de las mejores soluciones para las fallas bizantinas. PoS y DPoS por su lado no son absolutamente tolerante a fallos bizantinos, razón por la que acostumbran a complementarse con otras medidas de seguridad.

¿Cuánto sabes, criptonauta?

¿La Tolerancia a Fallas Bizantinas es parte esencial de los protocolos de acuerdo?

Ventajas y Desventajas

Ventajas

  1. Capacidad para asegurar correctitud de datos y también información, en sistemas distribuidos. Esto aun bajo escenarios hostiles para semejantes labores.
  2. Soluciona al inconveniente de procesamiento de información en entornos heterogéneos.
  3. Alta eficacia en términos computacionales y energéticos.
  4. Ofrece implementaciones que impactan de forma positiva en la escalabilidad si son bien construidas.
  5. Mientras más nodos aplicando la tolerancia a fallos bizantinos, más seguro es el modelo.

Desventajas

  1. La creación de estas soluciones es compleja. Esto puede encerrar otros inconvenientes de seguridad en su implementación.
  2. Garantizar su adecuado funcionamiento precisa de que la distribución del sistema sea creciente. Cuanto más nodos aplicando el proceso, más seguro es. Mas esto, asimismo tiene un impacto negativo en la escalabilidad y el ancho de banda de la red.