Como funciona a segurança da blockchain do bitcoin

Para explicar como funciona a segurança de uma blockchain é preciso muito mais que um post, e tambem alguem com um largo conhecimento na area.

Publicado em 21 de novembro de 2016 por

Ao discutir mecanismos de consenso para diferentes criptomoedas, um problema que muitas vezes causa argumentos é a falta de compreensão (e definição) do modelo de segurança que eles fornecem para os dados históricos no ledger. Enquanto cada modelo de consenso visa prevenir vários ataques teóricos, é importante compreender os objetivos para o modelo.

Cada modelo de segurança tem duas partes principais: suposições e garantias. Se as suposições usadas como entradas forem verdadeiras, então também as garantias que são produzidas pelo modelo.

Publicidade

Publicidade

Vamos investigar o modelo de segurança que parece ser oferecido aos usuários do bitcoin que executam um nó completo.

Buscando a verdade

“Um dos pontos fortes do bitcoin, o mais importante na opinião geral é o baixo grau de confiança que você ter precisa nos outros.” – Pieter Wuille

O objetivo dos ledgers distribuídos é fornecer um histórico ordenado de eventos, porque em sistemas distribuídos você não pode simplesmente confiar em um registro de tempo.

Publicidade

Publicidade

Quando um novo participante se une a uma blockchain, ele baixa todos os blocos disponíveis e considera todas as séries válidas de blocos que veem, a partir de um bloco de gênese codificado.

Uma das maiores suposições feitas pelo modelo de segurança da blockchain do bitcoin é que a maioria dos mineiros é honesta, e que eles estão trabalhando para garantir a blockchain ao invés de tentar prejudicá-la. Na prática, isso tem se mantido verdadeiro em toda a história do bitcoin devido aos incentivos dos mineradores, embora alguns questionem se isso continuará a ser verdade no futuro.

Dada esta suposição, os operadores de nó completo podem estar completamente seguros de vários fatos:

Ninguém inflacionou a oferta monetária, exceto para os mineiros, e apenas de acordo com um cronograma bem definido.

Ninguém nunca gastou dinheiro sem ter a(s) chave(s) privada(s) apropriada(s).

Ninguém nunca passou o mesmo dinheiro duas vezes.

Operadores de nó completo podem ter razoavelmente certeza de várias outras coisas. Existe uma forte garantia de que:

Qualquer bloco na cadeia foi criado dentro de aproximadamente duas horas do registro de tempo do bloco.

Eles estão sincronizando o histórico de blocos “verdadeiros”.

Em um nível mais técnico, isso requer uma multidão de verificações:

Todos os blocos seguem as regras de consenso:

Cada bloco é encadeado a um bloco pai

Cada bloco atingiu a sua meta de dificuldade e tem prova suficiente de trabalho

Os carimbos de hora do bloco caem em uma janela em relação aos blocos recentes

A raiz Merkle corresponde às transações do bloco

Nenhum bloco foi maior do que o tamanho máximo permitido

A primeira (e única) transação de cada bloco é uma transação de moeda base

As saídas da Coinbase não pagam mais do que a recompensa de bloco apropriada

Nenhum bloco continha mais do que as operações de assinatura permitidas

Todas as transações seguem as regras de consenso:

Valores de entrada e saída são idôneos

Transações apenas gastam saídas não utilizadas

Todas as entradas, que estão sendo gastas, têm assinaturas válidas

Nenhuma saída de transação de moeda foi gastada dentro de 100 blocos de sua criação.

Nenhuma transação gasta insumos com um locktime antes do bloco no qual eles são confirmados.

Muitas outras regras que levariam muito tempo para cobrir aqui.

Segurança termodinâmica

xoyrbdxlnt_attack-table-e1478882332551

Uma vez que uma transação é confirmada em um bloco ela não pode ser revertida sem alguém gastar uma quantidade mínima de energia para reescrever a cadeia.

Enquanto nenhum atacante detém mais de 50% da potência computacional da rede e os nós honestos podem se comunicar rapidamente, a probabilidade de uma transação ser revertida diminui exponencialmente com o número de confirmações recebidas. Existem outros ataques, como a mineração egoísta, que podem reduzir essa exigência de poder, embora pareçam difíceis de perpetrar.

Para esmagar alguns números sobre o custo envolvido em tal ataque:

Um Antminer S9 corre a 0,1 Joule de energia por cada GH (109 hashes)

1026 hashes * 0,1 J / 109 hashes = 1015 joules

1015 joules = 2,777,777,778 kw horas * $ 0,10 kw / hora = 277.777.778 dólares de eletricidade para reescrever toda a cadeia de blocos

Considerando que, no momento da redação, um único bloco deve atingir uma meta de dificuldade de 253.618.246.641, o que exigiria aproximadamente:

253, 618, 246, 641 * 248/65535 = 1,09 * 1021 hashes

1,09 * 1021 hashes * 0,1 J / 109 hashes = 1,09 * 1011 jaules

1,09 * 1011 joules = 30,278 kw horas * $ 0,10 kw / hora = $ 3,028 de energia elétrica por bloco

É por isso que podemos afirmar que bitcoin é termodinamicamente seguro.

Existem algumas variáveis que você pode ajustar no cálculo acima para diminuir o custo, mas podemos ter certeza de que vai exigir muitos milhões de dólares, apenas em eletricidade, para reescrever toda a blockchain. Contudo, caso alguém consiga atacar a blockchain com todo esse hash, poderia reverter as transações para 2014, isso no pior caso, mas vamos falar disso mais adiante.

Observe também que isso não leva em conta os custos necessários para obter e operar equipamentos de mineração suficientes para realizar tal ataque, o que aumenta ainda mais o custo deste ataque em potencial.

Resistencia de Sybil

Como o protocolo do bitcoin considera que a verdadeira cadeia é a que tem mais prova cumulativa de trabalho (não a cadeia mais longa, como muitas vezes é incorretamente afirmado), o resultado é que um novo peer unindo a rede só precisa se conectar a um único par honesto A fim de encontrar a verdadeira cadeia.

Isso também é conhecido como “resistência sybil”, o que significa que não é possível para alguém lançar um ataque contra um nó, criando muitos pares desonestos que alimentam informações falsas.

architecture-of-sybil-attack-in-manet

O retratado aqui é o pior cenário em que seu nó está sendo massivamente  atacado, mas ainda tem uma única conexão com um nó honesto que está conectado à verdadeira rede bitcoin. Contanto que um único par honesto está passando os dados da verdadeira blockchain para o seu nó completo, ficará bem claro que qualquer atacante sybil está tentando enganá-lo e seu nó irá ignorá-los.

Consenso em tempo real.   

O protocolo bitcoin cria uma série de outros atributos interessantes no que diz respeito à manutenção de consenso em toda a rede, uma vez que seu nó está na ponta da blockchain.

Os autores de “Perspectivas de Pesquisa e Desafios para Bitcoin e Criptomoedas” observam as seguintes propriedades que são importantes para a estabilidade de uma criptomoeda:

Eventual consenso: A qualquer momento, todos os nós compatíveis concordam com um prefixo do que se tornará a blockchain “verdadeira”.

Convergência exponencial: A probabilidade de um fork de profundidade n é O (2-n). Isso dá aos usuários alta confiança de que uma simples regra de “confirmações k” garantirá que suas transações sejam liquidadas permanentemente.

Vivacidade: Novos blocos continuarão a ser adicionados e transações válidas com taxas apropriadas serão incluídas na blockchain dentro de um período razoável de tempo.

Correção: Todos os blocos da cadeia com a prova de trabalho mais cumulativa incluirão apenas transações válidas.

Equidade. Um mineiro com X% do poder computacional total da rede minará aproximadamente X% de blocos.

Os autores do documento observam que bitcoin parece ter essas propriedades, pelo menos sob o pressuposto de que a maioria dos mineiros permaneçam honestos, que é o que o bloco de recompensas, juntamente com a prova de tentativa de trabalho para incentivar.

Existem muitos outros algoritmos que podem ser usados para manter o consenso em sistemas distribuídos, tais como:

Prova de participação

Prova de idade da moeda

Comprovante de Depósito

Prova de Queimadura

Prova de Atividade

Prova do Tempo decorrido

Consenso Federado

Tolerância à Falha Bizantina Prática

Estes criam diferentes modelos de segurança, a diferença mais óbvia da prova de trabalho é que cada consenso dos sistemas alternativos é conduzido à custa dos recursos internos (moedas ou reputação) em vez de recursos externos (eletricidade). Isso cria um conjunto muito diferente De incentivos para (e confiar em) validadores na rede que altera drasticamente o modelo de segurança.

Modelo de segurança mal-entendido

Uma suposição equivocada comum é que existe um modelo de segurança bem definido para o bitcoin.

Na realidade, o protocolo bitcoin foi e está sendo construído sem uma especificação formalmente definida ou modelo de segurança. O melhor que podemos fazer é estudar os incentivos e o comportamento dos atores dentro do sistema, a fim de melhor compreender e tentar descrevê-lo.

Dito isto, existem algumas propriedades do protocolo bitcoin que muitas vezes são analisadas incorretamente.

Algumas blockchains sofreram bastante com ataques que os desenvolvedores adicionaram pontos de verificação assinados centralmente no software do nó, dizendo essencialmente que “o bloco X foi validado pelos desenvolvedores como sendo da cadeia histórica correta”. Esse é um ponto de extrema centralização.

Vale a pena notar que bitcoin tem 13 pontos de verificação codificados, mas eles não alteram o modelo de segurança da maneira que os pontos de verificação são transmitidos. O último ponto de verificação foi adicionado ao Bitcoin Core 0.9.3 e está no bloco 295000, que foi criado em 9 de abril de 2014. Este bloco teve uma dificuldade de 6.119.726.089 o que exigiria aproximadamente:

6,119,726,089 * 248/65535 = 2,62 * 1019 hashes

2,62 * 1019 hashes * 0,1 J / 109 hashes = 2,62 * 109 joules

2,62 * 109 joules = 728 kw horas * $ 0,10 kw / hora = US$ 73 de energia elétrica para gerar

Assim, se um atacante Sybil cercasse completamente o novo nó que estava sincronizando a partir do zero, ele poderia criar algumas blockchains curtas em baixas alturas, quase sem custo, mas apenas até os vários blocos referência.

Se particionasse um nó fora da rede que tinha sincronizado após o bloco 295.000 poderia começar a alimentar blocos falsos ao custo de $ 73 por o bloco, pelo menos até que batesse em um reajuste da dificuldade. No entanto, quanto mais o nó da vítima tivesse sincronizado, maior seria o custo para o atacante criar uma cadeia com um trabalho mais cumulativo.

Ambos Greg Maxwell e Pieter Wuille afirmaram que esperam algum dia remover completamente os pontos de verificação. O líder do Bitcoin Core, Wladimir van der Laan, observou que os pontos de verificação são uma fonte constante de confusão para as pessoas que buscam entender o modelo de segurança da bitcoin.

Pode-se argumentar que isto significa que um nó completo está “confiando” nos devs do Core em relação à validade do histórico de blocos até 9 de abril de 2014, mas o nó ainda verifica os hashes de Merkle no cabeçalho de cada bloco, significando que a integridade do histórico de transações ainda é garantido pela prova de trabalho. Esses pontos de verificação antigos permitem um aumento de desempenho (ignorando a verificação de assinatura) ao sincronizar inicialmente o bloco de blocos histórico, embora a introdução do libsecp256k1 tenha feito à diferença de desempenho menos significativa.

Pontos de controle permanecem no lugar para três propósitos:

Para evitar que os nós tenham sua memória preenchida com cabeçalhos de bloco válidos, mas de baixa prova de trabalho.

Ignorando assinaturas em blocos anteriores (melhoria de desempenho)

Para estimar o progresso da sincronização

Enquanto este artigo estava sendo escrito Greg Maxwell propos substituir os pontos de referência com uma verificação de trabalho cumulativa em vez disso. Uma vez que um nó tem uma cadeia que contém mais de 5.4 * 1024 hashes executados, correntes com menos trabalho cumulativo seria rejeitada. Isso coincide com a quantidade de trabalho realizado até aproximadamente 320.000 em setembro de 2014, altura em que blocos individuais eram de dificuldade 27.000.000.000.

Blocos de mineração em uma dificuldade de 27.000.000.000 exigiriam aproximadamente

auycnt7umb_difficulty

27.000.000.000 * 248/65535 = 1.16 * 1020 hashes

1,16 * 1020 hashes * 0,1 J / 109 hashes = 1,16 * 1010 joules

1,16 * 1010 joules = 3,222 kw horas * $ 0,10 kw / hora = US $ 322 de energia elétrica por bloco

Assim, com esta mudança proposta, se um atacante Sybil cercasse completamente um novo nó que estava se sincronizando a partir do zero, seria capaz de começar a alimentar blocos falsos começando em qualquer bloco após a gênese, basicamente sem custo. Se um atacante de Sybil cercasse completamente um nó que sincronizasse o bloco passado 320.000 poderia começar alimentar uma corrente falsa desse ponto no custo de $ 322 por bloco.

Em resumo, qualquer verificação para garantir a sincronização inicial de um nó é relativamente barata de atacar se uma entidade pode obter controle completo da conexão de Internet do seu nó; Se não puderem, então o nó descartará facilmente os blocos do atacante.

Em uma nota relacionada, cada sistema blockchain tem seu bloco genesis codificado firmemente no nó do software. Você poderia argumentar que há um contrato social para a “história compartilhada” que é o razão, uma vez que um bloco é velho o suficiente, há uma compreensão entre todos na rede que nunca será revertida. Como tal, quando os desenvolvedores tomam um bloco muito antigo e criam um ponto de verificação fora dele, ele é feito mais como um cheque de sanidade acordado em vez de como um ditado da história.

Além dos pontos de verificação, há também a questão de como um nó se inicializa. O processo atual para nós do bitcoin é verificar se ele tem um banco de dados local de pares que já aprendeu sobre. Se não, então ele irá consultar um conjunto de “DNS Seeds” que são encodados na raiz do software. Estas sementes mantêm uma lista de nós do bitcoin bem conectados que retornam ao seu nó.

Como podemos ver a partir do código, o Bitcoin Core 0.13 que atualmente usa DNS Seeds, dirigido por Pieter Wuille, Matt Corallo, Luke Dashjr, Christian Decker, Jeff Garzik e Jonas Schnelli. Qualquer pessoa pode executar uma DNS Seed usando o software bitcoin-seeder de Pieter Wuille ou software de Matt Corallo, embora para que ele seja usado por novos nós você teria que convencer os desenvolvedores de uma das implementações de nó completo a adicionar sua DNS Seed para hospedar seu software.

Pode novamente parecer como um ponto de extrema centralização que o processo de bootstrapping para um novo nó precise de apenas seis sementes de DNS. Lembre-se que o modelo de segurança do bitcoin só exige que você se conecte a um único par honesto, a fim de ser capaz de suportar ataques sybil.

Como tal, um novo nó só precisa ser capaz de se conectar a uma única semente DNS que não seja comprometida e retorna endereços IP de nós honestos. No entanto, existe uma salvaguarda, pois, se por algum motivo, todas as sementes DNS estiverem inacessíveis, há uma lista codificada de endereços IP de nós confiáveis que é atualizada para cada versão.

O modelo de segurança para esses vários parâmetros de inicialização não é que o operador de nó completo esteja confiando nas X sementes DNS ou nos desenvolvedores Y do Core para alimentá-las com dados honestos, mas sim que pelo menos 1 / X sementes DNS não estão comprometidas ou 1 / honestos sobre a revisão da validade de mudanças dos pares.

Nada é perfeitamente seguro

Em um nível ainda mais profundo, quando você executar um nó completo, você provavelmente está confiando no hardware e software que você está executando em certa medida.

Existem métodos para verificar o software, verificando as assinaturas do seu binário contra as de van der Laan, mas é improvável que muitas pessoas se preocupem em passar por este processo. Quanto ao hardware confiável, isso é um problema difícil. O mais próximo que você provavelmente vai chegar a uma solução de hardware seguro é algo como ORWL, que garantiu a “autodestruição”, se alguém tenta mexer com ele.

orwl-teardown

Potência do bitcoin

As águas tornam-se ainda mais obscuras quando você começa a investigar a relação entre os diferentes participantes no sistema.

O objetivo de executar um nó completo é proteger sua soberania financeira. Isso geralmente significa que, ao instalar e executar uma versão específica do software, você está entrando em um acordo que você vai respeitar as regras do software e que todos os outros usando a rede também devem cumpri-las.

Como tal, se as pessoas quiserem alterar as regras de forma que não sejam compatíveis com versões anteriores, você deve concordar explicitamente com a alteração da regra executando uma nova versão do software. Por outro lado, as alterações de regras compatíveis com versões anteriores podem ser implementadas e executadas sem o seu consentimento.

Uma descrição altamente simplificada da dinâmica de poder em bitcoin:

3 ramos da “governança” BTC:

* Full Nodes (pode vetar mineiros e desenvolvedores)

* Mineiros (pode vetat devs)

* Devs (pode ajudar os outros a ignorar alguns vetos)

– Jameson Lopp (@lopp) 12 de outubro de 2016

É importante notar que o software de nó completo não é automaticamente atualizado, e assim é por design. As atualizações automáticas alterariam grandemente o equilíbrio de poder entre os desenvolvedores, permitindo que eles forçassem mudanças de regras sobre nós e mineradores sem sua permissão.

Infelizmente, embora uma mudança de regra possa ser tecnicamente compatível com versões anteriores, aprendemos ao longo dos anos que os forks suficientemente criativos podem realmente implementar mudanças que estão claramente fora da intenção da versão anterior das regras. Vitalik Buterin demonstrou isso com uma descrição de uma maneira de tempo de bloco de bitcoin passaria de 10 minutos para 2 minutos, o que, naturalmente, também aceleraria o cronograma de emissão de novos bitcoins.

Há um trunfo que os nós cheios têm para lutar contra os soft forks não desejados, é fazer um hard fork desacreditando os mineiros que executaram tal soft fork. Isso é difícil de realizar (por padrão) e levanta um monte de perguntas sobre a medição do consenso e encontrar os nós economicamente importantes.

Tecnicamente, poderia ser feito mudando o algoritmo mineiro de SHA256 duplo para uma função de hash diferente, tornando assim todos os ASICs SHA256 inúteis para mineração de bitcoins. É por esta razão que os operadores de nós devem permanecer vigilantes às mudanças no ecossistema e lembrar aos mineiros que eles podem ser substituídos se excederem sua autoridade.

Enquanto a mineração bitcoin é mais centralizada do que a maioria gostaria, ainda parece funcionar bem porque os mineiros bitcoin têm um monte de capital investido, eles não podem arriscar destruir seu investimento, agindo maliciosamente em um sistema onde todo mundo está assistindo.

Segurança SPV

Muitos usuários do bitcoin empregam um cliente leve para acessar a rede em vez de um nó completo, uma vez que exige muito menos recursos, continuando a fornecer uma forte segurança.

Um cliente que utiliza a Verificação de Pagamento Simplificado (SPV) baixa uma cópia completa dos cabeçalhos para todos os blocos de toda a cadeia. Isso significa que os requisitos de download e armazenamento escalam linearmente com a quantidade de tempo desde que o bitcoin foi inventado. Isso é descrito na seção 8 do white paper bitcoin.

tumblr_inline_n9fyt68z4o1qzr9jt

Satoshi escreveu que um cliente SPV “não pode verificar a transação para si mesmo, mas ligando-se a um lugar na cadeia, ele pode ver que um nó de rede aceitou tal transação, e os blocos adicionados posteriormente à confirmação demonstram que a mesma foi aceita pela rede”. SPV assume que uma transação de X blocos será algo caro de fazer.

SPV parece oferecer garantias semelhantes como segurança de nó completo, mas com uma suposição adicional de que qualquer bloco com um cabeçalho válido e prova de trabalho sempre contém transações válidas. Uma vez que os clientes SPV não verificam todas as regras de consenso indicadas na primeira secção deste artigo, eles estão fazendo a suposição de que as regras de consenso estão sendo verificadas pelo nó (s) a partir do qual solicitam transações.

Uma diferença de segurança adicional e menor envolve peers que retém informações de você. Quando você estiver executando um nó completo, os pares podem reter transações e blocos não confirmados de você. No entanto, uma vez que você receber um bloco de qualquer par, não é possível para qualquer pessoa reter as transações nesse bloco de você. Por outro lado, é possível para um peer dar um cabeçalho de bloco para um cliente SPV e, em seguida, reter informações sobre transações nesse bloco.

Os clientes SPV podem fazer uma consulta para aprender informações sobre transações que afetam um determinado endereço e enquanto seria custoso para os peers mentirem para eles sobre a existência de transações falsamente confirmadas (exigiria mineração um bloco com PoW suficiente) eles poderiam mentir por reivindicação de omissão que não houve resultados para o filtro de bloom que você usou para consultar transações. É também digno de nota que SPV é terrivelmente quebrado de um ponto de vista de privacidade devido a falhas com filtros de bloom.

BitcoinJ tem um excelente write-up do modelo de segurança SPV. Quanto às transações não confirmadas, eles observam:

“No modo SPV, a única razão pela qual você acredita que a transação é válida é o fato de que os nós que você conectou retransmitiram a transação. Se um invasor pudesse garantir que você estava conectado a seus nós, isso significaria que eles poderiam alimentar uma transação Que era completamente inválido (gastou dinheiro não existente), e ainda seria aceito como se fosse válida. “

Segurança SPV é provavelmente “boa o suficiente” para o usuário médio, embora pudesse ser melhorado com SPV Fraud Proofs. Tem havido alguma discussão sobre este conceito, mas nenhuma proposta implementada para construí-los no protocolo.

Não há nenhum lugar como 127.0.0.1     

Se você não estiver executando um nó completo (e, na verdade, o usar para validar transações), você está terceirizando pelo menos algum nível de confiança para terceiros, resultando em um modelo de segurança diferente para seu uso do bitcoin. Note que isso não necessita que todos os usuários e empresas construam seu software diretamente sobre a API RPC do Bitcoin Core.

Algumas configurações de infraestrutura alternativas podem incluir, mas não estão limitadas a:

ksaav8gvjk_btc-security-graphic

  1. Usando uma carteira móvel, como Bitcoin Wallet para Android, GreenAddress ou Stash que permite configurar a carteira para consultar apenas o seu próprio nó completo.
  2. Construir aplicativos em cima de bibliotecas de nó SPV como o BitcoinJ e configurá-los para se conectar apenas a nós completos que você opera. No BitcoinJ isso pode ser conseguido definindo seus próprios SeedPeers que você passa para o seu PeerGroup durante a inicialização. Com libbitcoin você pode definir uma conexão de rede para um nó específico usando este exemplo.
  3. Criação de um servidor proxy que seja compatível com a API JSON-RPC do Bitcoin Core que envia algumas chamadas para serviços de terceiros, mas também verifica automaticamente os dados que retornam fazendo chamadas para um nó completo local. Para obter um exemplo, consulte o software BitGoD da BitGo. Este modelo híbrido pode lhe dar o melhor dos dois mundos: você pode aproveitar recursos avançados oferecidos por terceiros, mantendo a sua soberania financeira.

Nós completos para a liberdade

É claro que executar seu próprio nó completo oferece segurança superior com o menor número de suposições necessárias. Dado que você pode construir um computador capaz de executar um nó cheio confiável para apenas algumas centenas de dólares, fazer a matemática e determinar se a garantia de sua soberania financeira vale o preço.

Publicidade

Publicidade

Chrys
Chrys é fundadora e escritora ativa do BTCSoul. Desde que ouviu falar sobre Bitcoin e criptomoedas ela não parou mais de descobrir novidades. Atualmente ela se dedica para trazer o melhor conteúdo sobre as tecnologias disruptivas para o website.

Leave a Comment