Os sistemas informáticos distribuídos sofrem uma infinidade de erros, e a falha bizantina é uma das mais comuns. Este tipo de erros são muito complicados de resolver, porque o sistema de deteção encontra dificuldades para decidir se o erro existe ou não.
Uma Falha Bizantina é uma condição de um sistema informático, especificamente de sistemas de computação distribuída. Esta condição ocorre quando um ou mais componentes falharam e não há informações precisas sobre a falha de um componente ou se as informações do sistema estão corretas.
Numa falha bizantina, um componente, como um servidor, pode aparecer de forma inconsistente como defeituoso e funcionando em sistemas de deteção de falhas. Isto acontece porque o sistema apresenta sintomas diferentes diante de diferentes observadores. Neste ponto, é difícil para os outros componentes tomar a decisão de declará-lo falido e excluí-lo da rede. Para isso, é necessário chegar a um consenso sobre qual componente falhou em primeiro lugar.
A Falha Bizantina como um problema de consenso
O termo vem do nome do conhecido “Problema dos Generais Bizantinos”. Este foi desenvolvido para descrever uma circunstância em que os atores devem concordar numa estratégia para evitar a falha catastrófica do sistema. E também devem de conseguir este objectivo, sabendo que, entre eles, podem existir atores não confiáveis.
O problema dos generais bizantinos foi descrito por Robert Shostak em 1978, como parte de um projeto do Laboratório de Ciências da Computação da SRI International . Este projeto foi chamado SIFT , e teve o apoio da agência aeroespacial da NASA . O caso descrito representa, em essência, um problema de comunicação distribuída entre computadores. Nele, computadores focados em diferentes propósitos, devem ser capazes de estabelecer uma comunicação por pares e chegar a um consenso. E devem ser capazes de fazer isso mesmo que alguns deles estejam avariados. Para entender melhor, vamos ver a sua abordagem:
O Problema dos Generais Bizantinos
- Vários generais do mesmo lado e seus exércitos estão localizados em diferentes extremos de uma cidade com a intenção de a cercar.
- Para ter sucesso, eles precisam atacar a cidade de forma coordenada para derrotar as defesas ou se retirarem de maneira coordenada. Caso não sincronizem as suas ações, eles cairão diante das fortes forças inimigas.
- Para conseguir, os generais atacantes comunicam uns com os outros através de mensageiros.
- Embora a cidade esteja cheia de inimigos, os mensageiros devem atravessar a cidade para ir de um acampamento para outro com as ordens para atacar.
- A suposição indica que o mensageiro de um exército informará outro da intenção de atacar ou não, e quando fazê-lo.
- À medida que receberem propostas, os generais confirmarão ou rejeitarão as mesmas para estabelecer um acordo de voto sobre o que fazer.
Como se pode observar, o problema é que dentro da cidade os inimigos poderiam capturar os mensageiros. Se intercetada, a mensagem poderia ser modificada e, consequentemente, o ataque não seria realizado de forma coordenada. Por não se apresentarem de maneira coordenada, os exércitos atacantes seriam derrotados, falhando assim a sua missão.
Por exemplo, se uma mensagem dos generais fosse “ Ataque amanhã “, o texto poderia ser alterado adicionando “somente se chover”. Desta forma, o outro exército pode pensar que está concordando em atacar apenas em caso de chuva e confirmar a mensagem. Com o que o primeiro exército atacaria e o segundo não poderia fazê-lo e retirar-se se não chovesse.
Num conjunto de sistemas informáticos distribuídos com um objetivo comum, cada computador seria equivalente a um general ao seu exército. E, portanto, a rede de dados seria análoga aos mensageiros que devem atravessar a cidade informando os generais.
Que efeito têm as Falhas Bizantinas?
As falhas bizantinas são consideradas a classe de falhas mais gerais e mais complexas de serem resolvidas. Isto ocorre porque o nó que falha na rede pode estar gerando dados arbitrários e fingir estar correto. As falhas bizantinas são capazes de confundir sistemas de deteção de falhas. Apesar da analogia, uma falha bizantina não é necessariamente um problema de segurança envolvendo interferência humana hostil: ela pode surgir aleatoriamente devido a falhas elétricas que se acumulam.
Para explicar um pouco mais os efeitos e o alcance destas falhas, explicaremos alguns casos conhecidos das mesmas:
Caso # 1: Discovery Space Shuttle — Voo STS-124
A NASA descobriu que num fracasso da missão STS-124, estava envolvido o sistema de controle de combustível. Dos quatro sistemas de controle, os quatro forneceram informações incorretas e completamente diferentes do sistema de controle. No entanto, a falha não era programação, mas física. Isto originou em um cartão de controle que comunicava com os quatro computadores. Uma fissura num díodo foi o que originou essa falha bizantina. A quebra do díodo, foi culpa de uma transformação, ao converter um díodo num condensador. Essa situação atrasou o lançamento da nave espacial até que a falha fosse resolvida.
Se o sistema de transporte não fosse tolerante a falhas bizantinas, esta falha teria sido desastrosa. Sem controle do sistema de combustível, isso significaria que a nave espacial explodisse. Essa falha é um exemplo claro de quão perigosas podem ser as falhas bizantinas e o quão difícil pode ser detetá-las ou preveni-las.
Caso nº 2: Tecnologia Blockchain
No caso da blockchain, as falhas bizantinas podem ocorrer no desempenho de nós não confiáveis ou mal-intencionados. Se algum membro da comunidade enviar informações inconsistentes para outros sobre transações, a confiabilidade da blockchain será interrompida. Para resolver isto, o PoW oferece Mecanismos de Tolerância a Falhas Bizantinos (BFT) para evitar esse problema.
Outro problema que ocorre na blockchain relacionado a falhas bizantinas são os casos de gastos duplos. A dupla despesa é um ataque no qual um ator faz uso das mesmas criptomoedas em ocasiões distintas. Neste caso, a rede blockchain deve resistir ao facto de que a mesma criptomoeda é utilizada dessa maneira. Isso é bastante complexo. Para conseguir isto, devem ser projetados mecanismos que sejam tolerantes a falhas bizantinas parciais ou completas.