Actualización de Safe Network Dev 🇪🇸 17 de noviembre 2022

Esta es una traducción automática. El original en inglés está aquí: Update 17 November, 2022

La tolerancia a fallas bizantinas, basada en el problema de los generales bizantinos, es imprescindible para las redes descentralizadas donde los nodos deben ponerse de acuerdo, incluso si algunos son maliciosos. @dirvine repasa lo que es BFT y, fundamentalmente, lo que se pierde.

Progreso general

@davidrusu Ha estado trabajando para desacoplar AE de los mensajes de unión y ha logrado un buen progreso allí, el código de unión es un poco más simple ahora.

@joshuef también está buscando unir nodos y ha encontrado algunas anomalías. Cuando se ha recibido más de un tercio de las respuestas de los ancianos, el nodo de unión vuelve a preguntar. Con cinco ancianos, habiendo recibido dos respuestas, el nodo vuelve a intentarlo y obtiene dos respuestas más. Pero en esa etapa recibe una respuesta para el primer intento, lo que provoca una situación de bloqueo/nodo fantasma.

También ha eliminado con éxito más bloqueos, lo que significa que ahora los adultos pueden escribir directamente en el sistema de archivos sin etapas intermedias. Una simplificación importante.

Y en otro poco de simplificación, @bzee ha refactorizado parte de qp2p en una API más parecida a Quinn donde no se necesita una estructura de datos separada para las conexiones o flujos entrantes.

Tolerancia a fallas bizantinas

Problema de los generales bizantinos en términos del mundo real

En el Problema de los generales bizantinos, un ejército tiene sitiada la ciudad de Bizancio. Los generales al mando de estas fuerzas deben decidir el momento del ataque. Si todos los generales dirigen sus fuerzas para atacar la ciudad al mismo tiempo, la victoria está asegurada, pero si atacan en diferentes momentos, pierden. Los generales no tienen comunicación directa entre sí y los mensajeros pueden ser espías enemigos, pueden ser asesinados por las fuerzas defensoras o los mensajes mismos pueden haber sido cambiados. Además, por supuesto, algunos de los propios generales podrían ser traidores. ¿Cómo se aseguran los generales de que todas sus fuerzas ataquen al mismo tiempo?

Este es el problema que deben superar las redes descentralizadas.

Aplicando la analogía a los sistemas descentralizados obtenemos:

  • Generales leales ==> nodos honestos
  • Generales traidores ==> nodos defectuosos
  • Enemy Army, estamos enviando mensajes a través de ==> una red asíncrona poco confiable que puede dejar caer y retrasar los mensajes

Esta historia es una tapadera digerible para algunas matemáticas bastante pesadas en las que resulta que mientras no más de un tercio de los generales sean traicioneros, los generales honestos pueden coordinar sus planes con éxito: tolerancia a fallas bizantinas (BFT).

Tenemos varios nodos, algunos de los cuales pueden ser deshonestos y otros pueden sufrir fallas de comunicación entre ellos.

El problema clásico de los generales bizantinos es el de la sincronización del estado local a pesar de los generales traidores que intentan dividir los estados. Para ampliarlo un poco, tanto ‘ATAQUE’ como ‘RETROCESO’ serían respuestas correctas (válidas)… siempre que todas las fuerzas leales hagan lo mismo.

Para nuestros propósitos, el problema clásico de los generales bizantinos es una visión restringida de BFT. Se centra exclusivamente en el consenso, por lo que debe lidiar con más tipos de fallas.

Hay otras nociones de BFT que podemos considerar para manejar problemas con la membresía.

Aquí el tema es que tenemos un tenedor. Cuando los adultos y los ancianos salen o se unen a los nodos, pueden tener diferentes vistas de la sección. Aunque esta bifurcación finalmente se resolverá, las decisiones tomadas durante la vista dividida, p. un gasto de DBC, son difíciles de manejar. Por lo tanto, estamos tratando de evitar esta visión dividida a través del consenso.

Una opción en la que están trabajando Mostafa y @Davidrusu es un protocolo de transmisión llamado Transmisión consistente verificable (VCBC).

Protocolos de transmisión BFT

Un protocolo de difusión intenta difundir un mensaje desde un nodo a la red. La versión BFT intenta asegurarse de que todos los nodos estén de acuerdo con el mensaje que envió este nodo:

A la izquierda tenemos un nodo honesto 1 que transmite msg a 2,3,4,5. A la derecha tenemos un nodo defectuoso 1 transmitiendo a a 2,3 y b a 4,5.

1

Un protocolo de transmisión BFT protege contra la bifurcación en el segundo caso al garantizar que todos los nodos honestos acepten el mismo mensaje del “nodo 1” o que todos se nieguen a aceptar cualquier mensaje del “nodo 1”.

La forma en que esto se hace en VCBC es a través de un protocolo de 3 fases:

  1. El nodo 1 transmite el mensaje que quiere que todos vean
  2. Todos los nodos verifican si es la primera vez que el Nodo 1 envía un mensaje, si es así responde con una firma compartida sobre el mensaje: sigma_j(m)
  3. El nodo 1 espera hasta que recibe >2/3 de las firmas compartidas para agregarlas en una firma completa, luego transmite la firma completa a la red para convencer a todos de que todos tienen el mismo mensaje.

Veamos cómo se descompone este algoritmo.

VCBC depende de manera crucial de que más de 2/3 de la red siga fielmente el protocolo. Podemos preguntarnos: “¿Qué daño se puede hacer si 1/3 o más de los nodos están defectuosos?”

Si más de 1/3 pero menos de 2/3 + 1 están defectuosos, entonces lo peor que pueden hacer es detener la red.trabajo al negarse a contribuir con acciones de firma.

Si más de 2/3 están defectuosos, entonces los nodos defectuosos pueden hacer firmas sobre cualquier mensaje que deseen.

Sin embargo, este hecho solo es cierto si los nodos BFT están en connivencia. es decir, si no son el mismo atacante, entonces no importan tanto. No crearán un tenedor.

Entonces, una parte fundamental para evitar BFT es la palabra COLUSIÓN.

Un gran experimento mental es resolver el problema de BFT al tener MUCHOS atacantes. De esta manera, el único atacante colusorio se diluye con otros atacantes y nodos honestos.

¿Qué significa esto en la vida real?

Si consideramos la mente de un atacante. ¿Qué preferiría?

  1. La red sigue funcionando
  2. Su enemigo se ha hecho con el control de la red

Claramente, la respuesta es que la red todavía funciona honestamente. Por lo tanto, a menos que un atacante tenga el control mayoritario (2f+1, donde f = el número de nodos en connivencia defectuosos), entonces no puede apoderarse de la red.

Entonces, si tenemos N == 9 y atacamos los nodos == 9 pero los nodos en connivencia == 0, ¿entonces no tenemos problemas?

Entonces, el 100% de los nodos que son atacantes está bien.

Solo cuando tenemos nodos defectuosos coludidos tenemos problemas. Hay dos vías/umbrales en juego aquí. Si consideramos un atacante coludido, los umbrales son:

  1. El atacante controla >=1/3 nodos
  2. El atacante controla >=2f+1 nodos.

1 Es un ataque de vandalismo donde puede paralizar decisiones y la red.
2 Es una toma de control de la sección por lo menos.

Así que la perspectiva importa aquí. ¡Cuantos más atacantes tengamos, más segura será nuestra red! Podemos reducir la influencia de un atacante teniendo muchos atacantes y/o muchos nodos honestos.

Entonces, ¿qué es el ataque BFT en un protocolo de transmisión?

Cuando hablamos de un ataque BFT, nos referimos a un atacante en colusión. Los atacantes individuales están bien.

Podemos tolerar menos de 1/3 de nodos defectuosos coludidos. Si bien puede haber muchos nodos defectuosos, estamos protegidos siempre que ningún grupo en connivencia supere 1/3 de los tomadores de decisiones (para detener) o 2f+1 para crear una bifurcación (adquisición).


Enlaces útiles

No dude en responder a continuación con enlaces a las traducciones de esta actualización para desarrolladores y los moderadores las agregarán aquí.

Como proyecto de código abierto, siempre estamos buscando retroalimentación, comentarios y contribuciones de la comunidad, así que no sea tímido, únase y creemos la red segura juntos.