Algoritmos de Consenso — Parte 1

Marcelo Morgado
Aug 31, 2018 · 5 min read

Este post é o primeiro de uma série que irá tratar os principais algoritmos de consenso. Começarei pelo Proof-of-Work que é usado pelo Bitcoin, irei explicar seu funcionamento e abordarei algumas questões de segurança que devem ser observadas.

Byzantine Generals Problem

OS sistemas distribuídos precisam de mecanismos que evitem falhas (mal-intencionadas ou não) que possam corromper o sistema.
Em 1982 este problema foi apresentado formalmente no artigo The Byzantine Generals Problem cunhando assim o termo para designá-lo.
O problema é apresentado através da seguinte metáfora:

Várias divisões do exército bizantino estão acampadas ao redor de uma cidade inimiga, cada divisão comandada por seu próprio general. Os generais só podem se comunicar através de mensageiros. Após observar o inimigo, eles precisam decidir um plano de ação comum. No entanto, alguns dos generais podem ser traidores, tentando evitar que os leais alcancem o consenso. Os generais precisam de um algoritmo para garantir que (A) Todos os generais leais decidam sobre o mesmo plano de ação e (B) Um pequeno grupo de traidores não poderá fazer com que os leais sigam o plano errado.

No contexto das criptomoedas, o objetivo é permitir que a atualização do livro-razão (blockchain) seja feita de forma segura e consensual entre os nós envolvidos. Objetivamente, dentre outras coisas, os algoritmos de consenso buscam impossibilitar ocorrência de gastos duplos e permitir com que todos os nós estejam de acordo sobre o estado da blockchain.

Proof-of-Work (PoW)

Usado pelo Bitcoin, Ethereum, Litecoin e outras moedas, foi inicialmente criado para desincentivar ataques de negação de serviço (DoS) e spams nos sistemas distribuídos, exigindo prova de trabalho computacional pelo requisitante do serviço.

Por si só, o PoW não resolve o problema de gastos duplos numa criptomoeda. Apesar de não haver nenhuma citação do termo ‘blockchain’ no paper de Satoshi Nakamoto, é desta forma que hoje se convencionou designar a solução dada por ele para alcançar o consenso na rede e resolver o problema do gasto duplo.

Vejamos o exemplo: Alice possui apenas 1 BTC em sua carteira e propaga simultâneamente 2 transações na rede, a primeira enviando 1 BTC para Bob e a segunda enviando 1 BTC para Carl. Isto é possível de ser realizado mas não trata-se de um gasto duplo, pois nenhuma delas até o momento foi incluída em nenhum bloco.
Somente as transações confirmadas (incluídas em algum bloco) devem ser consideradas efetivas.
Em nosso exemplo, ao criar um bloco, o nó minerador irá desconsiderar uma das duas transações pois no estado atual no livro-razão não há saldo suficiente para realização de ambas.
O agrupamento das transações em blocos resolve parte do problema. Vejamos a seguinte situação a seguir:
Num curto espaço de tempo dois mineradores distintos propagam seus blocos, sendo que o minerador X incluiu a transação que beneficia Bob e o minerador Y àquela que beneficia Carl. Parte dos nós da rede aceitam um bloco e outra parte da rede aceita o outro bloco, neste caso é criado um discenso no sistema e duas versões da blockchain são temporariamente válidas e concorrentes.
Para atingir novamente o consenso e evitar o fork definitivo da rede é que o PoW é utilizado. Em casos de forks temporários a cadeia com maior poder computacional (hashrate) é a que será aceita pela rede como a blockchain principal.

Segurança

Sempre que um novo bloco é minerado (após trabalho computacional exigido) e propagado na rede, ele é validado por cada nó e somente se for válido de acordo com as regras do protocolo ele será aceito.
Os mineradores são incentivados economicamente a se manterem honestos pois são remunerados quando conseguem incluir gerar um novo bloco a ser incluído na cadeia e caso agirem desonestamente, além deixarem de ganhar a recompensa, terão desperdiçado o esforço computacional gasto para a realização da prova de trabalho.
A bom funcionamento do sistema utilizando o PoW baseia-se num cenário em que a maioria dos mineradores são honestos.

Ataque de 51%: Caso um atacante controle a maioria do poder computacional da rede, ele conseguirá realizar forks (como no exemplo acima) propositalmente. Elegendo deliberadamente uma das cadeias para empenhar seu poder computacional superior.
Assim sendo, poderá invalidar blocos anteriormente confirmados gerando outra cadeia. Na pratica permitiria ao atacante:

  1. Realizar gastos duplos a partir de algum endereço controlado por ele;
  2. Censurar endereços (não incluindo suas transações em novos blocos);
  3. Aumentar seus ganhos com recompensas da mineração gerando cadeiras maiores e forçando a negação dos blocos de mineradores honestos (selfish mining attack).

Mesmo bem sucedido um ataque desta natureza não permitiria ao atacante:

  1. Descartar blocos antigos (6 blocos de profundidade) minerados antes do início do ataque;
  2. Realizar gastos a partir de endereços de terceiros. O atacante não possui a chave privada de terceiros.

Concentração

Atualmente, quase 70% do poder de mineração do Bitcoin está concentrado nos 5 maiores pools de mineração. Caso seus controladores decidam agir coordenadamente, poderão realizar um ataque real à rede.

Apesar de possível, este cenário seria economicamente desastroso para os envolvidos pois representaria perdas financeiras provenientes da queda do valor da moeda devido a falta de confiança do mercado.

Um outro cenário, seria o caso de uma conspiração contra o sistema realizada por Bancos e/ou Governos que teriam recursos suficientes para acumular poder computacional suficiente. É um cenário teoricamente possível mas cada vez mais impraticável já que o poder computacional aplicado ao Bitcoin cresce rapidamente.

Conclusão

Introduzido pelo Bitcoin como primeiro algoritmo de consenso, permitiu o advento da tecnologia blockchain.
Sua segurança é resultado do poder computacional empenhando, pois quanto maior o processamento mais custoso para um ataque ser bem sucedido.

Apesar da atual concentração dos mineradores do Bitcoin parecer preocupante, um eventual ataque realizado iria representar um dano de imagem e valor num curto prazo mas medidas seriam tomadas para defender a tecnologia tornando-a mais segura.

Mesmo com estes problemas o Proof-of-Work é hoje o algoritmo mais confiável pois vem sendo testado na prática desde 2009 e responsável pela segurança de bilhões de dólares em valor.

Novos algoritmos surgiram com objetivo de resolver problemas do PoW, alguns deles serão abordados nos próximos posts.

Marcelo Morgado

Written by

Full stack developer and cryptocurrencies/decentralization enthusiast. https://www.linkedin.com/in/marcelo-morgado/

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade