O que é o Problema dos Generais Bizantinos e como o Bitcoin o resolve?

O que é o Problema dos Generais Bizantinos e como o Bitcoin o resolve?

Antes de mais, o que é afinal o Problema dos Generais Bizantinos?

O problema pode ser praticamente descrito com três generais bizantinos imaginários preparando-se para atacar ou retirar-se de um cerco (um exemplo com três generais é o mais fácil de entender). Cada general tem um exército próprio, e estes exércitos estão posicionados em vários lados da cidade sitiada. A cidade é forte o suficiente para lidar com o ataque de um único exército, talvez até dois ao mesmo tempo; vai ceder se tiver que se defender de todos ao mesmo tempo. Os generais precisam de comunicar uns com os outros e garantir que os seus exércitos atacam simultaneamente, pois esta é a única maneira de tomarem a cidade. Todos os generais vão enviar uma mensagem aos outros dois, a dizer se e quando quer atacar. Podem chegar a um consenso sobre a realização de um ataque (se dois terços concordarem numa data exata) ou também podem decidir que a cidade não pode ser tomada agora e recuar.

A comunicação é feita com a ajuda de mensageiros. Estes mensageiros vão correr pela cidade inimiga, expondo-se ao perigo, e tentarão entregar a mensagem dos seus generais aos outros exércitos. O General 1 pode inspeccionar a cidade e com a ajuda dos seus tácticos militares decidir em atacar, por exemplo, na próxima terça-feira à noite. Em seguida, enviará um mensageiro a outros dois generais a informá-los da data de ataque desejada. Idealmente, ambos os generais receberão a mesma mensagem para atacar na terça-feira à noite. Para confirmar ainda mais os planos de ataque, o General 2 pode concordar com o plano do General 1 e enviar mensageiros para sinalizar a sua prontidão para atacar na terça-feira à noite. O seu mensageiro, mais uma vez idealmente, chegará aos outros generais ileso e entregará a sua mensagem. Desta forma, confirmou-se a decisão sobre quando atacar; o ataque pode começar assim que o sol se põe na terça-feira.

No entanto, sempre que um mensageiro está a caminho de um general, arrisca-se a ser apanhado pelos defensores da cidade. Se o mensageiro for apanhado, os defensores saberão qual é o plano de um dos exércitos. Naturalmente, os defensores vão querer evitar um ataque coordenado e podem até substituir o mensageiro original por um dos seus próprios homens. Este mensageiro poderia então entregar uma mensagem falsa a um dos generais; esta mensagem pode sugerir um recuo ou um ataque numa data diferente, o que colocaria em perigo toda a operação. Além disso, o mensageiro original podia ver o sofrimento que a cidade sitiada está a passar e decidir tirar partido e trair o seu general. Finalmente, um dos generais pode ter uma desavença com um dos outros dois generais; esta desavença pode fazê-lo tornar-se malicioso contra o general de que não gosta. Mal intencionado, pode enviar uma mensagem de retirada ao general de que gosta e uma mensagem de ataque ao general de que não gosta, fazendo com que o exército do general desprezado pereça sozinho na batalha.

Se algum destes cenários se concretizar, um traidor torna-se activo dentro do sistema; consequentemente, uma falha de comunicação vai acontecer e o consenso não será alcançado. É provável que um dos generais tome uma decisão errada e condenará os seus homens a uma morte no campo de batalha.

A questão aqui é a falta de capacidade de verificar se a mensagem é autêntica ou não. Os generais têm de acreditar que a sua mensagem foi devidamente entregue aos outros exércitos. Mesmo que os mensageiros sejam apanhados, a mensagem precisa de ser encriptada de alguma forma para garantir que os defensores da cidade não percebam a estratégia de ataque ou que generais mal intencionados não liderem todo o exército ao massacre. Este problema de criar um sistema de confiança que permita aos "bons" comunicar sem revelar os seus planos aos jogadores "mal intencionados" é o que é conhecido como o problema dos Generais Bizantinos.

Como é que o Bitcoin resolve este problema

Com o Bitcoin, o problema dos generais bizantinos transforma-se num caso ainda mais complicado. O número de generais aumenta, e agora cada um deles precisa de comunicar as suas intenções a todos os outros em generais de forma segura e rápida. Ao mesmo tempo, o número de jogadores maliciosos e possíveis traidores aumenta, o que significa que cada um deles precisa de ser neutralizado de alguma forma.

Utilizando a tecnologia blockchain, o problema dos generais bizantinos pode ser resolvido. Um livro-razão (ledger) digital distribuído que opera numa rede informática com milhões de membros/generais que não estão sob qualquer hierarquia, são considerados iguais. Todos os membros da rede podem votar em que mensagem a rede deve concordar.

A Blockchain oferece um método descentralizado e autogovernado de gestão desta rede de utilizadores. Contém dados sobre todas as transacções anteriormente realizadas e gravadas. A blockchain é constantemente actualizada com novos dados e novas transacções, monitoriza cada token que já foi criado ou gasto na rede. Os criadores do Bitcoin certificaram-se de que estes dados são à prova de adulteração utilizando soluções criptográficas especiais baseadas no algoritmo de hashing SHA256.

A solução de criptografia do Bitcoin lida com este problema adicionando um nonce (uma série de números e letras exclusivos na nossa comunicação) à sua mensagem de texto e, em seguida, colocando-o através do algoritmo de hash SHA256. Este nonce é um elemento chave desta segurança dos sistemas; quando colocado através do algoritmo de hash SHA256 ao lado da mensagem, se foi enviado por uma fonte de confiança, dará um hash que começa com um certo número de zeros.

Agora, para aplicar isto aos nossos generais, todos os generais têm de concordar com uma única mensagem. Todos os generais não podem confiar em nenhum outro general na rede. Todos os generais não podem confiar no canal de comunicação em si (a cidade por onde o mensageiro passa); têm de assumir que a mensagem pode ser interceptada e substituída por dados falsos. Isto resultaria na perda de valor e criaria uma rede instável. Por conseguinte, o envio de uma mensagem de texto pura está fora de questão.

Primeiro, o general que envia a mensagem encontra um nonce (normalmente através de milhões, ou mesmo milhares de milhões de tentativas) que vai dar, quando submetido através do algoritmo de hashing, uma função de hash que começa com um número definido de zeros. A mensagem é então enviada para o outro general juntamente com o nonce. O general recetor então "passa" a mensagem + nonce através do mesmo algoritmo de hash. Se o hash resultante tiver o mesmo número de zeros que o hash inicial o general pode ter certeza de que a mensagem foi enviada pelo primeiro general. Se o número de zeros for menor do que o hash original, provavelmente foi interceptada e definitivamente adulterada.

Ainda há uma maneira de a cidade criar uma mensagem falsa. Se substituírem a mensagem em si, mas a função hash não começará com o mesmo número de zeros. A cidade terá então de fazer biliões de tentativas para encontrar um nonce que, quando passado pelo algoritmo de hashing com a mensagem falsa, criará uma função hash que terá o mesmo número de zeros que o original.

Este problema é resolvido fazendo com que o número de tentativas necessárias para encontrar o hash que começa com o número definido de zeros praticamente impossível de executar. Como temos vários generais, cada um deles terá a sua própria mensagem relacionada com o dia do ataque. Para enganar a cidade, vários generais vão adicionar a sua mensagem num único bloco e tentarão coletivamente encontrar um nonce tal que o hash das mensagens e dito nonce começará com um certo número de zeros (quanto mais zeros, mais difícil é encontrar o nonce). Todos os generais terão de usar muita energia computacional para encontrar este nonce. Quando for encontrada, a mensagem + nonce é finalmente enviada.

Como se pode deduzir daqui, a cidade terá dificuldades em editar o conteúdo da mensagem, mesmo que apanhem o mensageiro. Com várias mensagens e múltiplos generais a investir em muito poder computacional, é praticamente impossível para a cidade adulterar a mensagem.

E é assim que tudo funciona. Para fazer o paralelo com a rede Bitcoin, as pessoas que querem transaccionar na rede protegem as suas transacções utilizando um algoritmos de hash e nonces alimentados por uma rede de poderosos nós mineiros (que basicamente descobrem nonces de blocos e adicionam blocos à blockchain). Um utilizador da rede que queira adulterar a blockchain simplesmente não pode competir com todo o ecossistema Bitcoin, tornando as transacções seguras e à prova de adulteração.