O que é tolerância a falhas bizantinas (BFT)

De Área31 Hackerspace
Revisão de 19h28min de 16 de abril de 2021 por Coffnix (discussão | contribs) (Criou página com 'o termo de Falha bizantina, é derivado de Problema dos generais bizantinos (PGB). Esse problema lógico assume, em poucas palavras, que os atores devem concordar com uma estr...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

o termo de Falha bizantina, é derivado de Problema dos generais bizantinos (PGB). Esse problema lógico assume, em poucas palavras, que os atores devem concordar com uma estratégia concertada para evitar falhas catastróficas no sistema. Mas existe a possibilidade de que, dentro do sistema, haja atores que podem não ser confiáveis. Dado esse fato, o sistema deve criar mecanismos que garantam que esses atores mal-intencionados não possam levar à falha sem solução. A criação desses mecanismos é precisamente aqueles que concedem tolerância a falhas bizantinas.

Pode parecer simples, mas a realidade é muito diferente. Atingir a tolerância a falhas bizantinas é um dos desafios mais difíceis da computação. A tal ponto que o primeiro projeto para resolvê-lo satisfatoriamente foi o Bitcoin , de Satoshi Nakamoto. Isso marcou um marco, que acompanhou a tecnologia blockchain até agora.

La Tolerância a falhas bizantinas, é a capacidade de um sistema de computador distribuído de suportar falhas bizantinas.

Essas falhas podem ser:

Falhas de consenso. Falhas na validação. Falhas na verificação de dados. Falhas no protocolo de resposta contra situações de rede. Essa tolerância está ligada à capacidade da rede, como um todo, de criar um mecanismo de consentimento. O objetivo disso é fornecer uma resposta coerente à falha do sistema.

Tolerância a falhas bizantinas funciona definindo um conjunto de regras que permite resolver o problema dos generais bizantinos satisfatoriamente. Conseguir isso é complexo, pois esses tipos de falhas não implicam restrições. Essa situação torna o problema mais complexo e difícil de lidar. No entanto, em muitos sistemas de computadores, essa tolerância é um requisito. Portanto, para atingir esse objetivo, um sistema tolerante a falhas bizantino deve atender pelo menos ao seguinte:

Cada processo deve ser iniciado com um estado indeciso (nem SIM nem NÃO). Nesse ponto, a rede propõe uma série de valores determinísticos aplicáveis ​​ao processo. Para compartilhar os valores, um meio de comunicação deve ser garantido. Isso para exibir mensagens com segurança. O meio também servirá para comunicar e identificar as partes inequivocamente. Chegados a este ponto, os nós calculam os valores e entram em um estado decidido (SIM ou NÃO). Cada nó deve gerar seu próprio estado, que faz parte de um processo puramente determinístico. Uma vez decidido, eles totalizam e vencem o estado com o maior número de decisões a favor. Esses quatro pontos definem a operação básica de um algoritmo tolerante a falhas bizantino.

O caso acima pode certamente ser um pouco complexo. Portanto, uma explicação mais simples aplicada ao blockchain seria:

Vamos imaginar que John realiza uma transação de Bitcoin.

Cada nó na rede, começa a compilar a transação em estado indeciso (TX não confirmado). A confirmação dessa transação passa por um trabalho de mineração (nosso protocolo de consenso). O processo de mineração verifica se o de hash da transação está correta e a inclui em um bloco.

Esse processo de verificação é intensivo em computação e só é possível por meios determinísticos. Com cada nova confirmação (status decidido) da transação dada pela maioria da rede, Juan pode ter certeza de que a transação foi aceita como válida.

Tolerância a falhas bizantinas Tem a capacidade de resolver vários problemas. Entre eles, falaremos sobre alguns dos mais relevantes para entender um pouco mais sobre sua ampla utilidade:

Un compilador O código fonte é uma das ferramentas de computação mais complexas que podemos conhecer. Os compiladores têm a capacidade de converter o código fonte de um programa em um binário capaz de ser executado pelo computador. Isso significa que eles convertem algo próximo à linguagem humana (como C / C ++ ou Go) em linguagem de máquina ou binária.

No meio de tudo isso, os compiladores "Bombardeio" sua capacidade em vários subprogramas de executar as seguintes ações:

Traduza o código-fonte para a arquitetura de processador desejada. Por exemplo, podemos decidir se compilar para x86-32 (PC) ou ARM (móvel). Neste exemplo, escolhemos x86-32. Ajuste os parâmetros para os recursos da família ou geração do processador de destino. Um ponto a ser lembrado, pois o código de uma geração superior pode não ser executado em uma anterior. Nesse ponto, decidimos codificar para o Core i3s de 2ª geração. Ele começa a compilar o código e todos os subprogramas o transformam em código de máquina. Paralelamente, os applets decidem onde você pode otimizar e quais otimizações aplicar ao seu código. O resultado final é o nosso programa já compilado e pronto para ser executado. Nesse processo, a tolerância a falhas bizantinas é vital, pois garante o seguinte:

Que os applets se aplicam corretamente parâmetros e otimizações para a arquitetura e geração escolhidas. Não fazer isso resultará em erros e falhas. Aplicando otimizações Você deve garantir que eles não significam o duplicação de dados. Mas a desduplicação no nível binário também não deve afetar o funcionamento das partes binárias. Neste ponto, uma análise de falhas bizantina é necessária e os compiladores devem poder analisar isso. Outro caso de uso de tolerância a falhas bizantinas, o sistemas de armazenamento de dados. Muitos sistemas de banco de dados e até sistemas de arquivos o implementam para melhorar a confiabilidade dos dados armazenados. Um exemplo disso é o sistema de arquivos ZFS. Esse sistema de arquivamento é capaz de replicar recursos avançados de hash, replicação, desduplicação, correção de erros, manuseio e armazenamento para grandes quantidades de dados.

Para conseguir isso, ZFS utiliza esquemas de tolerância a falhas bizantinos para garantir:

La não omissão de processos elementares para tratamento do dados armazenados ou sendo armazenado no sistema de arquivos. Por exemplo, a aplicação de hashes nos dados e metadados, compactação, correção de erros ou desduplicação dos mesmos. Que não são tomadas medidas indesejáveis ​​no processamento de dados. Como uma deduplicação, levando à perda de dados no sistema. Ou uma correção de erro que corrompe as informações. o criar, ler e gravar processos em estruturas ZFS aninhadas Eles usam esses tipos de técnicas para garantir que sejam consistentes o tempo todo. Graças a tudo isso, o ZFS mantém os dados armazenados em sua estrutura de maneira segura. É por isso que é conhecido como o sistema de arquivos mais seguro e avançado do mundo da computação.

É o caso do sistema de gerenciamento de informações de aeronaves. Um sistema que funciona em tempo real e possui tolerância a falhas bizantinas.

Cada um dos sensores da aeronave se comunica com os sistemas de comando e controle, fornecendo informações em tempo real. A falha de um sensor não deve significar a qualquer momento uma falha catastrófica para a aeronave. Para isso, é utilizada a tolerância a falhas bizantinas. Isso para compensar os dados do sensor ou sistemas danificados e manter a aeronave segura.

De fato, neste ponto, a aplicação da tolerância a falhas bizantinas é um grande desafio. Devido ao número de sistemas e aos diferentes cenários para lidar. A Avionics deve estar ciente de casos como reconfiguração, duplicação, falha de sistemas inteiros e ainda oferecer resistência a esse tipo de falha. Embora 100% de resistência seja impossível, engenheiros e programadores fazem um trabalho tremendo nesse sentido.

Protocolos de consenso em blockchain como PoW eles são tolerantes a falhas bizantinas. Isso permite obter um consenso em uma rede distribuída em condições bizantinas. Quando Satoshi Nakamoto projetou Bitcoin, levou esse tipo de tolerância em consideração. Para isso, ele criou uma série de regras e aplicou o protocolo de consenso de PoW para criar software com tolerância a falhas bizantina. No entanto, essa tolerância não é 100%.

Apesar disso, o PoW provou ser uma das implementações mais seguras e confiáveis ​​para redes blockchain. Nesse sentido, o algoritmo de consenso de prova de trabalho, projetado por Satoshi Nakamoto, é considerado por muitos como uma das melhores soluções para falhas bizantinas. PoS y DPoS por sua vez, não são completamente tolerantes a falhas bizantinas, e é por isso que geralmente são complementadas por outras medidas de segurança.[1]


Referências: