avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Como funciona o protocolo Bitcoin (parte 1)

Criado em: 2017-01-19 18:04:02, atualizado em: 2017-01-19 18:11:24
comments   0
hits   1625

Como funciona o protocolo Bitcoin (parte 1)

O ano passado escrevi aqui 5 ideias sobre o Bitcoin, e parece que foi o primeiro artigo sobre o Bitcoin que escrevi aqui. Hoje vou falar sobre o Bitcoin Protocol.

Este artigo é uma tradução do artigo de Michael Nielsen sobre o protocolo Bitcoin, que o tradutor acha que é o mais claro sobre o Bitcoin. Michael Nielsen é um cientista, escritor e programador pioneiro na pesquisa de computação quântica, veja a sua própria introdução para mais detalhes. A tradução deste artigo é porque o tradutor considera que o artigo sobre o Bitcoin e a discussão são muitos, muitos apoiados e muitos contra. Mas a maioria se detém no conceito, preço e pensamento subjetivo.

Na verdade, ele nunca tentou convencer ninguém, mas apenas publicou o artigo na internet para que as pessoas pudessem julgar por si mesmas. “Just letting people know what it is, where it fits into the electronic money space, not trying to convince them that it’s good”.

  • ### Aqui está o texto original:

Milhares de artigos tentam explicar o Bitcoin, uma moeda online, peer-to-peer. A maioria dos artigos traz um trecho do protocolo subjacente, omitindo muitos detalhes. Mesmo os artigos mais profundos são entupidos em pontos críticos.

A compreensão profunda do protocolo é difícil, porque é fácil dar o Bitcoin como um dado e pensar em como usar outras especulações para enriquecer, pensar se é uma bolha, se o Bitcoin significa o fim dos impostos, etc. É muito divertido pensar nisso, mas essas ideias limitam seriamente a sua compreensão. E entender o protocolo do Bitcoin por si só abrirá perspectivas que não podem ser alcançadas por outros canais.

Eu vou explicar os scripts do Bitcoin e os contratos inteligentes em um artigo posterior. Neste artigo, vou me concentrar nos detalhes específicos do protocolo do Bitcoin. Para entender este artigo, você precisará estar familiarizado com a senha de chave pública e as assinaturas digitais associadas.

Bitcoin é baseado em criptografia, o que pode surpreendê-lo, não é que Bitcoin é uma moeda? Ou é uma forma de enviar mensagens secretas? Na verdade, a maioria dos problemas que Bitcoin quer resolver é sobre a proteção de transações, como garantir que as pessoas não podem roubar coisas de outras pessoas ou imitar outras pessoas, etc. No mundo físico composto de átomos, nós garantimos a segurança através de fechaduras, assinaturas, cofres bancários, etc. No mundo da informação, nós garantimos a segurança através da criptografia.

A estratégia deste artigo é construir o Bitcoin em camada por camada. Começaremos com uma moeda digital muito simples, a qual chamaremos de “Infocoin” por enquanto, para diferenciá-la do Bitcoin. Claro que a nossa primeira versão do Infocoin terá muitas falhas, então passaremos por várias gerações, e em cada geração introduziremos um ou dois novos conceitos.

Esta abordagem é mais lenta do que a abordagem inicial de explicar o Bitcoin diretamente. Mas, mesmo que você consiga entender o princípio do Bitcoin, é difícil entender por que ele foi projetado dessa forma. A vantagem da abordagem mais lenta de explicar o Bitcoin passo a passo é que ela permite que você tenha uma compreensão mais clara de cada elemento do Bitcoin.

Por fim, devo dizer que sou relativamente novo no mundo do Bitcoin. Eu tive uma preocupação superficial em 2011, mas o estudo mais sério dos detalhes foi no início de 2013.

  • Primeiro passo: a assinatura de um documento de intenções.

    • #### Como criar uma moeda?

    À primeira vista, uma moeda digital parece impossível. Suponhamos que uma pessoa, vamos chamar-lhe Alice, tenha uma moeda digital que queira gastar. Se Alice pode usar uma série de caracteres como dinheiro, como podemos impedir que ela use a mesma série de caracteres repetidamente? Se pudermos resolver esse problema, como podemos impedir que outras pessoas falsifiquem uma série de caracteres e as roubem?

    Estas são apenas duas das muitas questões a serem resolvidas com o uso da informação como moeda. Na primeira edição do Infocoin, nós pensamos em fazer com que Alice ofereça uma sequência de caracteres como dinheiro, e pensamos em uma forma de protegê-la de ser falsificada. Suponha que Alice quer dar um infocoin a outra pessoa.

    Este método não é muito popular, mas tem algumas vantagens. Qualquer pessoa no mundo pode usar a chave pública de Alice para verificar se Alice é realmente a pessoa que assinou. Ninguém mais pode produzir o resultado da assinatura (a assinatura só pode ser produzida a partir da chave privada de Alice, em princípio, veja a assinatura digital mencionada acima), então Alice não pode se arrepender e dizer que não, eu não dei a infocoin a Bob.

    Eu ainda não disse o que o dinheiro é neste acordo. Para ser claro: o dinheiro é a mensagem em si. Ou seja, a sequência de assinaturas representa o que a minha Alice vai dar ao Bob, um infocoin.

  • Um número de série para dar uma identidade única a uma moeda

O problema com a nossa primeira edição do Infocoin é que Alice pode enviar repetidamente ao Bob a mesma mensagem assinada. Suponha que Bob receba 10 mensagens desse tipo, e eu, Alice, quero dar um infocoin ao Bob. Isso é dizer que Alice deu ao Bob 10 diferentes infocoins? Ou Alice deu ao Bob um infocoin, apenas repetindo a mensagem sem cuidado? Ou ela queria enganar Bob para que ele acreditasse que ela lhe deu 10 infocoins, quando na verdade a mensagem enviada ao mundo exterior prova que ela deu apenas um infocoin.

O que nós queremos é que a infocoin tenha uma identidade única. Ela precisa de um rótulo ou um número de série. Alice pode assinar uma infocoin com o número de série 8740348 na mensagem. Depois, Alice pode assinar outra mensagem.

Para que isso seja possível, precisamos de uma fonte de números de série confiável. Uma forma de gerar números de série é criando uma instituição, como um banco, que irá gerar números de série para o infocoin, registrando quem possui cada infocoin e verificando a autenticidade das transações.

Mais detalhadamente, vamos supor que Alice vá a um banco e diga: “Vou tirar um infocoin da minha conta”. O banco retira um infocoin da sua conta e dá-lhe um novo número de série que nunca foi usado, supondo que seja 1234567. Então, quando Alice quer enviar um infocoin para Bob, ela assina a nova mensagem: “Alice vai dar a Bob um infocoin com o número de série 1234567”. Mas Bob não apenas aceita o infocoin, mas também liga para o banco e confirma duas coisas: primeiro, o infocoin com o número de série 1234567 realmente pertence a Alice. Segundo, Alice ainda não tirou o infocoin.

  • ### Fazer de todos um banco.

A solução acima parece ter muito potencial. Mas, podemos fazer algo mais ambicioso. Podemos remover os bancos do protocolo. Isso muda drasticamente as propriedades da moeda em si.

A solução é fazer com que todos cooperem para se tornarem um banco. Em particular, vamos supor que cada pessoa que usa o infocoin mantém um registro completo, incluindo qual o infocoin pertence a quem. Você pode imaginar isso como um livro público compartilhado, que registra todas as transações do infocoin.

Agora, vamos supor que Alice vai dar um infocoin para Bob. Ela vai assinar um infocoin para Bob com o número de série 1234567 na caixa de mensagens. E a saída da mensagem com a assinatura é para Bob, que pode usar sua própria cadeia de blocos para verificar, OK, a infocoin é mesmo a minha moeda para Alice.

Nós ainda temos a questão de onde o número de série do alfinete veio, mas isso é muito fácil de resolver, então eu explico mais tarde. O problema mais difícil é que o protocolo permite que Alice repita o gasto de seu infocoin. Ela pode postar uma mensagem assinada que Alice vai dar a Bob um alfinete de infocoin com o número de série 1234567, e ela também pode postar uma mensagem assinada que Alice vai dar a Charlie um alfinete de infocoin com o número de série 1234567. Bob e Charlie usam ambos o seu próprio blockchain para verificar se o alfinete realmente veio de Alice.

Nós chamamos esse problema de “Double Spending” e, à primeira vista, esse tipo de duplicata parece ser muito difícil de ser bem sucedido. Afinal, se Alice enviasse uma mensagem primeiro para Bob e depois Bob enviasse uma mensagem para todos os outros (incluindo Charlie), os outros atualizaram sua blockchain. Nesse caso, Charlie não seria enganado por Alice.

A solução mais simples é que, quando Alice envia o infocoin para Bob, Bob não deve verificar a transação sozinho. Em vez disso, ele deve divulgar a transação em toda a rede Infocoin, para que outras pessoas ajudem a julgar se a transação é razoável. Se eles decidirem em conjunto que a transação é razoável, Bob pode aceitar o infocoin e todos atualizarão sua blockchain.

Mais especificamente, suponha que Alice queira dar uma infocoin a Bob. Como antes, ela dá uma assinatura de mensagem, então Alice dá a Bob uma caixa de infocoin com o número de série 1234567 e assinará a mensagem com o nome de Bob. Como antes, Bob faz uma verificação com seu próprio blockchain, a moeda realmente pertence a Alice.

O protocolo ainda tem muitos fatores de incerteza. Por exemplo, o que significa o número de pessoas suficientes para publicar a mensagem? Não pode ser toda a rede Infocoin, porque não sabemos de antemão quem está na rede Infocoin. Da mesma forma, não pode ser uma parte fixa dos usuários.

  • ### Prova de trabalho

Suponha que Alice queira duplicar o acordo acima, ele precisa controlar toda a rede infocoin. Suponha que ela use um sistema automático para criar muitas contas com diferentes identidades na rede infocoin, supondo que haja 1 bilhão. Como antes, ela tenta duplicar, dando a mesma infocoin para Bob e Charlie, mas quando Bob e Charlie perguntam à rede infocoin para verificar a transação, o crânio de Alice inunda a rede inteira, dizendo a Bob e Charlie que eles podem passar por essa transação e pode enganar um deles ou ambos para aceitar a transação.

Há uma maneira inteligente de usar um método chamado “prova de trabalho” para verificar o trabalho. O método não é intuitivo e requer a combinação de dois conceitos: 1) o processo de verificação de transações por parte de pessoas que custam um custo computacional elevado; 2) a recompensa por sua ajuda na verificação da transação.

Isso é o que é um certificado de trabalho. Mas para realmente entender o certificado de trabalho, precisamos de detalhes mais específicos.

Suponha que Alice divulgue uma mensagem para toda a rede. Suponha que Alice dê a Bob uma infocoin com o número de série 1234567. Quando os outros na rede ouvem essa mensagem, cada um adiciona-a a uma lista de transações pendentes que ainda não foram aprovadas pela rede.

Como funciona o protocolo Bitcoin (parte 1)

David examinou o seu próprio blockchain e viu que as transações acima eram legítimas. Ele queria ajudar a divulgar essa mensagem de verificação para toda a rede.

Então, o que é que David está a tentar resolver? Para explicar isso, usamos uma função de hash fixa que todo mundo na rede conhece para incluí-la no próprio protocolo. O Bitcoin usa uma função de hash SHA-256 muito conhecida, mas qualquer função de hash criptográfica pode ser usada aqui.

Como funciona o protocolo Bitcoin (parte 1)

O problema que David vai resolver é encontrar um número aleatório x que, quando adicionamos esse x ao lado de L e hashamos a combinação, começa com vários zeros. A dificuldade deste problema pode ser ajustada ajustando o número de zeros iniciais. Um problema simples de hash requer apenas 3 ou 4 zeros iniciais, enquanto um problema difícil de hash requer mais zeros iniciais, como 15 zeros consecutivos.

E isso não é válido quando x é igual a 1.

Como funciona o protocolo Bitcoin (parte 1)

E então nós tentamos x é igual a 2, e então x é igual a 3, 4, 5… e sabemos que, no final, quando descobrimos que x é igual a 4350, temos

Como funciona o protocolo Bitcoin (parte 1)

Este número aleatório x dá-nos um resultado de quatro hashes que começam com zero. Isso é o suficiente para resolver um simples problema de prova de que o hash funciona.

O que torna este enigma difícil de resolver é que os resultados das funções de hash de código são sempre aleatórios, e qualquer pequena alteração no valor de entrada irá alterar completamente o resultado de saída de toda a função de hash, tornando-o difícil de prever. Então, se precisamos de um resultado de saída que comece com 10 zeros, então David vai precisar de 1610 ≈ 1012 x diferentes para encontrar o valor adequado.

Obviamente, podemos controlar a dificuldade do problema de prova de trabalho, determinando o número de zeros necessários. Na verdade, o protocolo Bitcoin pode ter um melhor controle sobre a dificuldade do problema, alterando um pouco a prova de trabalho acima mencionada. Não se trata mais de determinar quantos zeros iniciais são necessários, mas de determinar que a saída de hash do bloco seja menor ou igual a um valor-alvo, que é ajustado automaticamente para garantir que cada bloco do Bitcoin (bloco) leve, em média, 10 minutos para ser resolvido.

Bem, vamos supor que David tenha tido sorte e tenha encontrado um nonce de x, parabéns a ele! Ele vai ser recompensado por ter encontrado a resposta. Ele vai publicar que ele provou que as transações dentro do bloco são legítimas, e ao mesmo tempo publicar o valor de x que ela encontrou.

Para que a prova de trabalho do programa funcione, os participantes da rede devem ter um incentivo para ajudar a verificar as transações. Sem o incentivo, ninguém estaria disposto a gastar seu próprio computador para ajudar a verificar as transações. Se os participantes da rede não estiverem dispostos a gastar o computador, o sistema não funcionará.

No protocolo do Bitcoin, esse processo de verificação é chamado de minagem. Os participantes em cada bloco de transação receberão bitcoin como recompensa. Inicialmente, o prêmio era de 50 bitcoins. Mas para cada bloco de 210.000 verificados (ou seja, aproximadamente a cada 4 anos), o prêmio será reduzido para metade. Até agora, isso só aconteceu uma vez, ou seja, o prêmio para a verificação de um bloco é de 25 bitcoins.

Você pode pensar na prova de trabalho como um processo de verificação de transações competitivas. Cada participante gasta uma parte do poder de computação. A chance de um minerador ganhar é aproximadamente igual à proporção entre o tamanho do poder de computação que eles controlam e o poder de computação de toda a rede.

Claro, mesmo que os mineiros desonestos tenham uma pequena chance de destruir a blockchain inteira, não temos confiança suficiente para usá-la como moeda.

Eu vou analisar imediatamente o problema dos binóculos, mas antes disso, gostaria de acrescentar um detalhe importante ao conceito da Infocoin. Idealmente, nós queremos que a rede Infocoin seja capaz de unificar a ordem em que as transações ocorrem. Se não tivermos uma ordem unificada, então não é muito claro quem tem qual infocoin em um determinado momento. Para ajudar a resolver isso.

Como funciona o protocolo Bitcoin (parte 1)

Por acaso, uma ramificação ocorre em uma blockchain. Isso ocorre porque, às vezes, dois mineradores verificam quase simultaneamente as transações de um bloco. Eles são publicados simultaneamente na rede, alguns atualizando sua blockchain de uma maneira e outros atualizando sua blockchain de outra.

Como funciona o protocolo Bitcoin (parte 1)

Isso cria uma situação que queremos evitar, em que a sequência de transações não é clara e não se sabe quem tem qual infocoin. Felizmente, há uma maneira simples de remover um ramo. A regra é que, se um ramo surgir, as pessoas na rede continuam a manter dois ramos e, em qualquer caso, os mineiros só trabalham no bloco mais longo.

Suponhamos que temos uma ramificação em que alguns mineiros recebem primeiro o bloco A e outros o bloco B. Os mineiros que recebem o bloco A continuarão a minar em suas ramificações, enquanto os outros continuarão a minar em ramificações do bloco B. Suponhamos que os mineiros na ramificação B sejam os primeiros a chegar ao próximo bloco:

Como funciona o protocolo Bitcoin (parte 1)

Quando eles recebem essa mensagem, as pessoas no bloco A notam que o bloco B é o mais longo, e então mudam para o bloco B. O trabalho no bloco A é interrompido rapidamente, então todos estão trabalhando no mesmo blockchain. O bloco A é ignorado.

Da mesma forma, se um minerador no braço A chegar primeiro ao próximo bloco, o que acontece é que o minerador no braço B pára e passa para o braço A.

Seja qual for o resultado, este processo garante que a blockchain tenha uma ordem unificada. Em Bitcoin, uma transação não é considerada uma confirmação até que 1) ela esteja no bloco mais longo e 2) pelo menos 5 blocos verificados sejam verificados depois dela. Nesse caso, dizemos que a transação tem 6 blocos de confirmação. Isso dá tempo para a rede inteira para unificar a ordem dos blocos.

Agora que entendemos a sequência do tempo, voltemos a pensar o que aconteceria se uma pessoa desonesta quisesse gastar o dobro. Suponha que Alice quisesse fazer o mesmo negócio ao mesmo tempo para Bob e Charlie. Uma possibilidade seria que ela verificasse um bloco com duas transações ao mesmo tempo.

Mas outra possibilidade é que ela tenha tentado publicar duas transações separadamente. Ela pode ter publicado uma transação para um grupo de mineradores e outra para outro grupo de mineradores, e ela quer que ambas as transações sejam verificadas. Felizmente, nesse caso, como dissemos, a rede acaba confirmando apenas uma das transações.

Outra possibilidade é que Alice = Bob, ou seja, Alice tenta dar uma moeda a Charlie, enquanto ela dá a si mesma, pois ela pode ter várias contas. Nesse caso, a estratégia de Alice é esperar até que Charlie aceite a Infocoin, ou seja, depois que a transação seja confirmada 6 vezes no blockchain mais longo.

Como funciona o protocolo Bitcoin (parte 1)

Infelizmente, neste momento, Alice está 6 passos atrasada do blockchain mais longo. Ela tem dificuldade em acompanhar o ramo mais longo. Os outros mineiros não vão ajudá-la, porque eles precisam trabalhar no ramo mais longo para serem recompensados. A menos que Alice consiga se unir mais rápido do que qualquer outra pessoa na rede para resolver o comprovante de trabalho (ou seja, ela provavelmente tem mais do que 50% do poder de computação da rede inteira).

Claro que isso não é muito rigoroso para dizer que Alice certamente não pode ser dupla. Isso é apenas uma conclusão razoável. O livro branco original do Bitcoin não conduziu uma análise de segurança rigorosa, apenas uma conclusão informal semelhante à minha.

A primeira parte, escrita por Michael, deixa de lado o conceito de Infocoin e dá uma visão mais detalhada do protocolo do Bitcoin através da troca de bitcoins. Se virem aqui, podem seguir o meu microblog e o meu blog.

Se achar útil, encorajo você a dar uma dica para o autor deste artigo, Michael Nielsen, em 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ, ou siga-o no Twitter, ou siga o primeiro capítulo de seu novo livro sobre redes neurais e aprendizagem profunda, que será publicado em breve.

O artigo foi adaptado de um artigo publicado em The New York Times.