Los sistemas distribuidos tienen un problema en común, llegar a un consenso y asegurar que los datos no están siendo saboteados por un actor malicioso.
¿Qué es el consenso entre nodos de una red?
Cuando los nodos de cualquier Blockchain, o cualquier sistema distribuido en general, necesitan comunicarse y tener seguridad de que todos los nodos participantes no tienen intenciones de hackear la red, robar o corromper datos.
El problema de los generales bizantinos es una analogía que explica la dificultad lógica que un sistema distribuido tiene para comunicar sus nodos y llegar a un consenso.
Un ejército bizantino se divide en grupos dispersos con la intención de atacar un castillo. Deben ponerse de acuerdo entre todos los sub-ejércitos para atacar o retirarse al mismo tiempo. Si uno de los generales bizantinos que comanda un sub-ejército decide sabotear el plan e ir en contra de sus aliados, el plan fracasaría.
La gran dificultad entre los generales es la comunicación entre las partes, ponerse de acuerdo sobre cómo actuar para lograr conquistar el castillo y que no haya un general traidor entre ellos.
Esta analogía nos lleva al funcionamiento de toda Blockchain. ¿Cómo hacen los nodos de una red para llegar a un consenso y evitar que nodos maliciosos corrompan los datos con transacciones fraudulentas?
La propuesta de Satoshi para solucionar el problema de los generales Bizantinos
Satoshi Nakamoto, el misterioso creador de Bitcoin, propuso una magnífica solución para resolver el problema de los generales bizantinos. Como toda Blockchain no posee una autoridad central que coordine los nodos (los generales), los mensajes no son instantáneo y la red se encuentra potencialmente comprometida en todo momento a posibles ataques.
Debe haber sido todo un desafío para Satoshi lograr comunicar nodos para llegar a un consenso entre partes que no se conocen. Su solución es denominada “Proof of Work” y se trata de un gran obra de ingeniería de software que permite el funcionamiento de todo el ecosistema de Bitcoin que hoy conocemos.
Funcionamiento del algoritmo de proof-of-work
El algoritmo de proof-of-work resuelve este problema, permitiendo a los generales emitir un mensaje con el plan para atacar el castillo. Los mensajes son identificados con un hash único e irrepetible, los demás generales utilizarán este hash para votar por este plan, creando un nuevo hash enlazado al primero, formando así una cadena de hashes con el plan a seguir para conquistar el castillo.
Si un general malintencionado decide enviar un mensaje falso, se formará una bifurcación de los votos que será ignorada por el resto de los generales. Únicamente se tiene en cuenta la cadena de mensajes con más cantidad de participantes y votos. De esta forma, logran alcanzar el consenso.
Si llevamos esta analogía al funcionamiento real de la Blockchain, proof-of-work requiere de un procesamiento de cómputo para crear los mensajes, una “prueba de trabajo” para desalentar el comportamiento malicioso de los nodos de la red. La creación de bloques en la Blockchain representan los votos de los generales que forman la cadena de bloques que contienen toda la información emitida a la red.
Los bloques de la Blockchain de Bitcoin se encuentran conectados a través de los hashes. Si se formara una bifurcación, ya sea por un comportamiento indebido de un nodo o por un problema de sincronización, la misma sería eliminada, dado que es ignorada por la mayoría de los nodos de toda la red.
El consenso en cualquier sistema distribuido, o en cualquier Blockchain, puede alcanzarse de forma segura gracias a este mecanismo.
Conclusión
Proof-of-work se trata de un algoritmo que Satoshi Nakamoto creó para permitir el funcionamiento de toda la Blockchain. Posiblemente, sea la gran innovación que propuso para crear Blockchain y, al mismo tiempo, ha resuelto uno de los dilemas de la informática como lo es el problema de los generales bizantinos.
Contribución creada por: Miguel Angel Huamán (Platzi Contributor)
Articlase revisada y editada por: Kevin Fiorentino (Lead Contributor de Platzi).
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?