O que é Byzantine Fault Tolerance?
Desde a criação do Bitcoin em 2008, como um sistema peer-to-peer (ponto-a-ponto) de dinheiro eletrônico, várias outras criptomoedas foram criadas, cada uma com um mecanismo particular. Mas algo que quase todas elas têm em comum é uma rede Blockchain como elemento central da sua arquitetura.
Com algumas exceções, as redes Blockchains são intencionalmente desenvolvidas para serem descentralizadas, funcionando como um livro digital que é mantido por uma rede distribuída de nodes (nós) representados por computadores. Por essa razão, a tecnologia Blockchain permitiu a criação de um sistema econômico onde transações financeiras são transparentes e confiáveis sem a necessidade de intermediários. As criptomoedas conseguem cada vez mais espaço ao se apresentarem como uma alternativa ao sistema bancário tradicional, que é muito dependente da confiança depositada em terceiros.
Na maioria dos sistemas distribuídos de computadores, os participantes de uma rede de criptomoedas precisam concordar de forma regular com o estado atual das suas Blockchains, e isso é o que chamamos de atingir um consenso. Entretanto, chegar ao consenso em redes distribuídas, de uma forma segura e confiável, está muito longe de ser uma tarefa fácil.
Portanto, como uma rede distribuída de computadores pode chegar em uma decisão, se alguns nodes estão fadados à agir de forma falha ou desonestamente? Essa é uma questão fundamental do conhecido problema dos Byzantine Generals (Generais Bizantinos), que deu origem ao conceito de Byzantine Fault Tolerance (BFT) - ou Tolerância a Falhas Bizantinas em Português.
O que é o problema dos generais bizantinos?
Resumidamente, ele foi concebido em 1982 como um dilema de lógica que ilustrava como um grupo de generais Bizantinos poderiam ter dificuldades de comunicação na tentativa de chegar à um acordo para o próximo movimento de guerra.
O dilema assume que cada general tem seu próprio exército e que cada grupo está situado em locais diferentes ao redor da cidade que desejam atacar. Os generais precisam entrar em acordo para saber quando atacar ou recuar. Não importa se estão atacando ou recuando, é necessário que todos eles entrem em acordo, por exemplo, para chegar ao consenso na execução das táticas em conjunto.
Portanto, devemos considerar os seguintes objetivos:
- Cada general precisa decidir: atacar ou recuar (sim ou não);
- Após ter tomado a decisão, ela não pode ser mudada;
- Todos os generais precisam concordar com a mesma tática e executá-la de forma sincronizada.
Os problemas de comunicação já mencionados estão relacionados ao fato de que um general só consegue se comunicar com outro por meio de mensagens, que são entregues por correio. Consequentemente, o desafio central do Byzantine General’s Problem é de que as mensagens podem de alguma forma atrasar, serem destruídas ou perdidas.
Além disso, mesmo que uma mensagem seja entregue com sucesso, um ou mais generais podem escolher (por qualquer motivo) agir de forma maliciosa ou enviar uma mensagem fraudulenta para confundir outros generais, levando a um desastre total.
Se aplicarmos esse dilema ao contexto das redes Blockchain, cada general representa um nó na rede e os nodes precisam chegar num consenso quando se trata do estado atual do sistema. Colocando de outra forma, a maioria dos participantes dentro de uma rede distribuída precisa concordar com um mesmo processo para evitar uma falha generalizada.
Entretanto, a única forma de atingir um consenso nesses tipos de sistemas distribuídos é tendo pelo menos ⅔ ou mais de nodes na rede que sejam confiáveis e honestos. Isso significa que se a maioria da rede decide agir de forma maliciosa, o sistema ficará suscetível à falhas e ataques (como o Ataque de 51%).
Byzantine Fault Tolerance
Em poucas palavras, o BFT é a propriedade que um sistema tem de resistir a vários tipos de falhas que podem ser causadas pelo dilema dos generais bizantinos. Isso significa que um sistema BFT é capaz de continuar operando mesmo que alguns nodes da rede se comportem de forma falha ou maliciosa.
Existem várias formas de resolver o problema dos generais bizantinos e, portanto, vários métodos de se construir um sistema BFT. De forma parecida, muitas abordagens podem ser exploradas para que um sistema Blockchain possa fazer o BFT funcionar corretamente, levando-nos ao tão desejado algoritmo de consenso.
Algoritmo de consenso Blockchain
Podemos definir o algoritmo de consenso como um mecanismo pelo qual cada rede Blockchain atinge um acordo no estado da mesma. As implementações mais conhecidas são o Proof of Work(PoW) e Proof of Stake(PoS). Mas vamos usar o caso do Bitcoin como exemplo.
Enquanto o protocolo do Bitcoin prescreve as regras primárias do sistema, o algoritmo de consenso PoW é quem define como essas regras vão ser seguidas na tentativa de chegar ao consenso (por exemplo, durante a verificação e validação de transações).
Embora o conceito de PoW seja muito antigo nas criptomoedas, Satoshi Nakamoto desenvolveu uma versão modificada que possibilitou a criação do Bitcoin como um sistema BFT.
Note que o algoritmo PoW não é 100% tolerante às falhas bizantinas, mas diante do custo intensivo do processo de mineração e das subjacentes técnicas criptográficas, o PoW já provou que é uma das mais seguras e confiáveis implementações para redes Blockchain. Nesse aspecto, o algoritmo de consenso PoW, desenvolvido por Satoshi Nakamoto, é considerado por muitos a solução de um gênio para resolução do problema Bizantino.
Considerações finais
O problema dos Bizantinos é um dilema intrigante que eventualmente deu origem aos sistemas BFT, os quais são aplicados em vários cenários. Além do mundo Blockchain, o sistema BFT é usado em indústrias de aviação, espaço e usinas nucleares.
No contexto das criptomoedas, ter uma rede de comunicação eficiente junto com um bom mecanismo de consenso é algo vital para qualquer ecossistema Blockchain. Fazer desses sistemas seguros é um esforço contínuo e vários algoritmos de consenso em existência ainda não transcenderam algumas limitações (como a escalabilidade). No entanto, os algoritmos PoW e PoS são abordagens interessantes ao funcionar como sistemas BFT, e as possíveis aplicações certamente inspiram inovações de forma generalizada.