Problema de los Generales Bizantinos


#1

En una de sus publicaciones mas interesantes, Satoshi explica como la Cadena de Bloques resuelve un problema informatico conocido como la “tolerancia de fallas Bizantinas” (por su traduccion al espanol), esta seria a su vez una version mas generalizada del “ Problema de los Dos Generales “.

En este problema dos o mas personas deben compartir informacion en un entorno de comunicacion poco confiable, donde los mensajes enviados pueden perderse o ser alterados, desde 1970 este problema se considero como irresoluble.

Con la intencion de ilustrar el problema, imaginemos que dos generales son requeridos para atacar una ciudad al mismo tiempo. Si uno ataca y el otro no, las fuerzas del general atacante seran aniquiladas por las defensas de la ciudad. La comunicacion entre ambos no es confiable, el mensajero que lleva la informacion sobre cuando atacar debe atravesar la ciudad y, por lo mismo, podria ser interceptado.
El primer general puede enviar al mensajero a las 09:00am comunicandole al segundo general que el ataque se va a realizar ese dia, sin embargo, una vez enviado, el primer general no sabra si el mensajero consiguio dar el mensaje o no, esta incertidumbre puede llevar al primer general a tomar la decision de no atacar, ya que podria estar atacando solo si el segundo general no puede recibir su mensaje.
Consciente de esto, el segundo general puede enviar una confirmacion al primero para indicar que recibio el mensaje, pero ese mensaje, tambien podria ser interceptado, lo que llevaria al segundo general a dudar si deberia o no atacar tambien. El primer general podria enviar una confirmacion de la confirmacion, pero de igual forma, podria ser interceptada, lo que lo haria dudar de nuevo y esperar otra confirmacion. Este proceso puede ocurrir hasta el infinito, sin que ninguno de los pudiera saber si los mensajes fueron enviados o interceptados por el enemigo…

Satoshi explica la solucion a este problema de la siguiente manera:
Tenemos a varios Generales Bizantinos cada uno con un computador que quieren atacar por fuerza bruta la contrasena del wifi del castillo del Rey, que han descubierto que tiene una cierta cantidad de caracteres. Una vez que animan a la red a generar un ataque, deben descifrar la contraseña dentro de un tiempo limitado para entrar y borrar los registros, de lo contrario seran descubiertos y tendran problemas. Solo tendran el poder de computo necesario para descifrarlo si todos atacan al mismo tiempo.
A ellos no les importa especialmente cuando sera el ataque, solo que todos esten de acuerdo. Se ha decidido que cualquiera que lo desee puede anunciar un momento concreto, y que cualquier momento que se escuche primero sera el momento oficial del ataque. El problema es que la red no es instantanea, y si dos de los generales anuncian diferentes momentos dea taque casi al mismo tiempo, algunos pueden escuchar a uno primero y otros escucuchar al otro primero.
Para esto, usan una cadena de prueba de trabajo para resolver el problema. Una vez que todos los generales han recibido la hora del ataque que escuchan primero, configuran su computador para resolver una prueba de trabajo extremandamente dificil que incluye la hora de ataque en su HASH . La prueba de trabajo es tan dificil que se espera tarden 10 minutos trabajando todos los computadores a la vez hasta que uno de ellos encuentre la solucion. Una vez que uno de los generales encuentra una prueba de trabajo, lo transmite a la red y TODOS cambian su computo actual a la prueba de trabajo para incluir esa prueba de trabajo en el HASH en el que estan trabajando. Si para el momento del ataque, algun general estaba trabajando en otro HASH, cambia a este, porque su cadena de prueba de trabajo ahora es la mas larga.

Termina diciendo: la cadena basada en prueba de trabajo es lo que resuelve todos los problemas de sincronizacion, de base de datos distribuidas y de vision global.