Como funciona o protocolo Bitcoin?

Autora:Sonhos pequenos, Criado: 2017-01-19 18:04:02, Atualizado: 2017-01-19 18:11:24

Como funciona o protocolo Bitcoin?

O que parece ser o primeiro artigo aqui sobre o Bitcoin, hoje é sobre o protocolo Bitcoin.

Este artigo é uma tradução do artigo de Michael Nielsen sobre o protocolo Bitcoin, o que o tradutor acha que é o mais claro sobre o funcionamento do protocolo Bitcoin escrito. Michael Nielsen é um cientista pioneiro em computação quântica, escritor e programador. Veja o seu próprio artigo. O artigo foi traduzido porque o tradutor acredita que o artigo e a discussão sobre o Bitcoin são muito, muito favoráveis.

Nakamoto nunca foi para convencer os outros, mas publicou o artigo na internet, para que os outros julgassem. Ele disse: "Isso ajudaria a condensar o artigo e torná-lo menos promocional, soando o mais rápido possível".

  • 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 sobre o protocolo subjacente, omitindo muitos detalhes. Mesmo os artigos mais profundos estão presos em pontos críticos. O objetivo deste artigo é explicar o que está por trás do protocolo Bitcoin da maneira mais clara e fácil de entender.

    Entender profundamente o protocolo é difícil, porque é fácil tomar o Bitcoin como dado e pensar em como usá-lo para especular sobre como ganhar dinheiro, se é uma bolha, se o Bitcoin significa o fim dos impostos, etc. É interessante pensar nisso, mas essas ideias limitam seriamente sua compreensão. Entender o protocolo do Bitcoin em si abrirá outros pontos de vista inacessíveis. Por exemplo, o protocolo é a base da linguagem de roteiro embutida do Bitcoin, que permite que você crie novos instrumentos financeiros com o Bitcoin, como contratos inteligentes.

    Eu vou explicar os scripts do Bitcoin e os contratos inteligentes em um artigo posterior. Este artigo vai focar em detalhes específicos do protocolo Bitcoin. Para entender este artigo, você provavelmente precisará estar familiarizado com os passwords de chave pública e as assinaturas digitais associadas, mas também com as funções hash (que transformam a entrada de tamanho arbitrário em uma saída de tamanho fixo).

    A base do Bitcoin é a criptografia, o que pode surpreendê-lo, não é que o Bitcoin é uma moeda? É que é uma forma de enviar informações secretas? Na verdade, a maior parte do problema que o Bitcoin quer resolver é sobre a proteção de transações, garantindo que as pessoas não possam roubar coisas de outras pessoas ou imitar outras pessoas, etc. No mundo físico composto por átomos, nós garantimos a segurança por meio de fechaduras, assinaturas, caixas de seguro bancários, etc. No mundo da informação, nós garantimos a segurança por meio da criptografia.

    A estratégia deste artigo é uma construção de Bitcoin em uma camada. Vamos começar com uma moeda digital muito simples, que vamos temporariamente chamar de "Infocoin", para diferenciá-la do Bitcoin. É claro que nossa primeira versão do Infocoin terá muitas desvantagens, por isso passaremos por várias iterações, introduzindo um ou dois novos conceitos em cada iteração.

    Essa abordagem é um pouco mais lenta do que a explicação direta do Bitcoin desde o início. Mas mesmo que você saiba o que é o Bitcoin, é difícil entender por que o Bitcoin foi projetado dessa forma. A vantagem de uma explicação gradual, passo a passo, é que ela permite que você tenha uma compreensão mais clara de cada elemento do Bitcoin.

    Para finalizar, devo dizer que sou relativamente novo no mundo do Bitcoin. Eu tive uma preocupação grosseira em 2011, mas realmente estudei os detalhes com seriedade no início de 2013.

  • Primeiro passo: assinar o documento de intenção

    • Como é que se desenha uma moeda?

      A princípio, uma moeda digital parece impossível. Suponhamos que uma pessoa chamada Alice tenha alguma moeda digital que ela queira gastar. Se Alice pode usar uma série de caracteres como dinheiro, como podemos impedi-la de usar a mesma série de caracteres repetidamente?

      Estes são apenas dois dos muitos problemas a serem resolvidos com a informação como moeda. Na primeira edição do Infocoin, tentamos fazer com que Alice fornecesse uma string como dinheiro e pensar em uma maneira de protegê-la de ser falsificada. Suponha que Alice iria dar um infocoin para outra pessoa, Bob.

      Esta abordagem não é muito conhecida, mas ainda tem algumas vantagens. Qualquer pessoa no mundo pode usar a chave pública de Alice para verificar que Alice é realmente a pessoa que assinou. Ninguém mais pode produzir o resultado dessa assinatura. (Esta assinatura só pode ser produzida a partir da chave privada de Alice, o princípio é ver a assinatura digital mencionada acima), então Alice não pode recusar dizer não, eu não dei a Bob o infocoin. Assim, o protocolo fornece uma prova de que Alice realmente tinha intenção de dar a Bob um infocoin.

      Eu ainda não disse o que é o dinheiro no protocolo. O que é claro é que o dinheiro é a mensagem em si. Ou seja, a série de assinaturas representa um caráter que a minha mãe Alice vai dar a Bob. O protocolo posterior será semelhante neste ponto, ou seja, todas as moedas digitais são apenas caracteres de mensagem cada vez mais detalhados.

  • A moeda é identificada com um número de série.

    O problema da nossa primeira versão do Infocoin era que Alice podia enviar repetidamente a mesma mensagem assinada para Bob. Suponha que Bob recebesse 10 mensagens como: "Eu, Alice, vou dar um Infocoin para Bob".

    O que nós queremos é que o infocoin tenha um logotipo único. Ele precisa de um rótulo ou número de série. Alice pode assinar um bloco de infocoin com o número de série 8740348 no botão de mensagens. Depois, se Alice assinar em outra mensagem.

    Para que isso seja possível, precisamos de uma fonte confiável de números de série. Uma maneira de gerar números de série é criar uma instituição, como um banco. Este banco gerará números de série para o infocoin, registrando quem possui qual infocoin e verificando a autenticidade da transação.

    Em mais detalhes, vamos supor que Alice vai a um banco e diz: "Eu vou tirar um infocoin da minha conta. " O banco subtrai um infocoin da sua conta e dá-lhe um novo e nunca usado número de sequência, digamos que seja 1234567". Então, quando Alice quer enviar um infocoin para Bob, ela assina essa nova mensagem.

  • Que todos sejam bancos.

    A solução acima parece ter muito potencial. Mas podemos fazer algo mais ambicioso. Podemos remover os bancos do acordo. Isso muda drasticamente as propriedades da moeda. Isso significa que não haverá uma organização separada responsável pela moeda.

    O método é 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, que inclui o registro de quem é o proprietário do infocoin. Você pode imaginar isso como um livro público compartilhado, que registra todos os registros de transações do infocoin.

    Agora, vamos supor que Alice vai dar um infocoin para Bob. Ela vai assinar um bloco de infocoin para Bob com o número de ordem 1234567 no botão de mensagens. E a mensagem assinada será exportada para Bob, e Bob pode verificar com a sua própria cadeia de blocos.

    Nós ainda temos um problema de onde veio o número de sequência de informação, mas isso é realmente fácil de resolver, então eu vou explicar mais tarde. O problema mais difícil é que o protocolo permite que Alice gaste repetidamente seu infocoin. Ela pode publicar uma mensagem assinada dizendo que Alice vai dar a Bob um número de sequência de informação de 1234567. Ela também pode publicar uma mensagem assinada dizendo que Alice vai dar a Charlie um número de sequência de informação de 1234567. Bob e Charlie usam seu próprio blockchain para verificar se o infocoin é realmente enviado por Alice.

    Nós chamamos esse problema de "quebra-cabeça de gastos duplos", e, à primeira vista, esse tipo de duplo gasto parece difícil de ser bem-sucedido. Afinal, se Alice envia a mensagem para Bob primeiro e Bob envia a mensagem para todos os outros, incluindo Charlie, os outros atualizam seu blockchain. Então, Charlie não será enganado por Alice.

    Como resolver esse problema? A maneira mais simples é que Bob não deve verificar sozinho o transação quando Alice envia o mesmo infocoin para Bob. Ele deve publicar o transação pendente para toda a rede de infocoins e deixar que outras pessoas ajudem a julgar se o transação é razoável. Se eles decidirem juntos que o transação é razoável, Bob pode aceitar o infocoin e todos podem atualizar seu blockchain.

    Mais especificamente, suponha que Alice queira dar a Bob um infocoin. Assim como antes, ela assinou uma mensagem e disse que Alice iria dar a Bob um bloco de infocoin com o número de sequência 1234567, e assinou a mensagem de bom nome para Bob. Assim como antes, Bob fez uma verificação com seu próprio blockchain, e o bitcoin pertencia a Alice. Mas o protocolo é diferente, Bob não aceitou isso diretamente, mas divulgou a mensagem de Alice para toda a rede.

    O protocolo ainda tem muitos fatores de incerteza. Por exemplo, o que significa que uma vez que o número suficiente de pessoas divulgue a mensagem, quantos são suficientes? Não pode ser a rede inteira de infocoin, porque não sabemos quem está na rede de infocoin. Também não pode ser uma parte fixa dos usuários.

  • Prova de trabalho Proof-of-work

    Suponha que Alice queira duplicar o protocolo acima, ele precisa ter controle de toda a rede de infocoin. Suponha que ela use um sistema automático para criar muitas contas com diferentes identidades na rede de infocoin, supondo que haja um bilhão. Como antes, ela tenta duplicar, dando o mesmo infocoin a Bob e Charlie, mas quando Bob e Charlie pedem à rede de infocoin para verificar a transação, os cavalos de Alice inundam toda a rede, dizendo a Bob e Charlie que eles podem passar pela transação e podem enganar um ou ambos deles ou aceitar a transação.

    Há uma maneira inteligente de provar um negócio usando um método chamado Proof-of-work. O método não é intuitivo e requer uma combinação de dois conceitos: 1) fazer com que o processo de verificação de uma transação consuma grandes despesas com computação; 2) recompensá-los por ajudar a verificar a transação. O método de recompensa incentiva as pessoas na rede a verificar a transação.

    É esse o ponto da prova de trabalho. Mas para realmente entender a prova de trabalho, precisamos entrar em detalhes mais concretos.

    Suponhamos que Alice divulgue uma mensagem para toda a rede: "Eu sou" e que Alice dê a Bob uma mensagem com o número de sequência 1234567. Quando outras pessoas na rede ouvirem essa mensagem, todas as pessoas na rede a adicionarão a uma lista de transações pendentes, que ainda não foram aprovadas pela rede toda. Por exemplo, uma pessoa na rede chamada David pode ter a seguinte lista de transações pendentes:

    img

    David verificou 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. Mas, antes disso, o protocolo de verificação de transações exigia que David resolvesse um problema de computação chamado prova de trabalho. Se ele não obtivesse a solução do problema, os outros membros da rede não aceitariam sua verificação.

    Então, o que é que o David quer resolver? Para explicar isso, nós incluímos o hash função em um protocolo próprio usando uma função hash função fixa que todos conhecem na rede. O Bitcoin usa uma função hash SHA-256 bem conhecida, mas qualquer função hash criptográfica pode ser usada aqui. Nós damos a este grupo de transações pendentes um símbolo, o L, para que possa ser citado mais tarde.

    img

    O problema que David vai resolver é encontrar um número aleatório de x, e quando adicionamos este x ao L e a combinação de hashes, o resultado começa com vários zeroes iniciais. A dificuldade do problema pode ser ajustada ajustando o número de zeroes iniciais. Um simples teste de hashes simples requer apenas 3 ou 4 hashes iniciais, um teste de hashes difícil pode exigir mais zeroes iniciais, por exemplo, 15 zeros consecutivos.

    E isso também não funciona quando x é igual a 1.

    img

    Então vamos tentar x é igual a 2, então x é igual a 3, 4, 5... e finalmente, quando descobrimos que x é igual a 4350, nós temos

    img

    Este número aleatório de x nos dá um resultado de quatro hashes com início zero. Isso é suficiente para resolver um simples problema de prova de hashes.

    O que torna este problema difícil de resolver é que o resultado da função hash de código é sempre aleatório, e qualquer pequena mudança no valor de entrada será completamente diferente do resultado de saída da função hash inteira, o que é tão difícil de prever. Então, se quisermos que o resultado de saída tenha que começar em 10 0, David precisará, em média, de 1610 ≈ 1012 x diferentes para encontrar o valor adequado.

    Obviamente, podemos controlar a dificuldade dos problemas de prova de trabalho especificando quantos zeros são necessários. Na verdade, o protocolo Bitcoin tem um melhor controle sobre a dificuldade dos problemas de prova de trabalho modificando um pouco o que foi mencionado acima. Não é mais exigido o número de zeros iniciais necessários, mas o resultado do hash do bloco é menor ou igual a um objetivo, que é ajustado automaticamente para garantir que cada bloco do Bitcoin leve uma média de 10 minutos para ser resolvido.

    Bem, vamos supor que David é sortudo e encontra um x correto (nonce), e congratulamo-nos com ele (ele será recompensado por encontrar essa resposta). Ele divulga que provou que as transações no bloco são legítimas e, ao mesmo tempo, divulga o valor de x que encontrou, outros participantes do infocoin podem provar que a prova de trabalho de x é válida.

    Para que o programa funcione, os participantes da rede precisam de um incentivo para ajudar a verificar as transações. Sem incentivo, ninguém estaria disposto a gastar seu computador para ajudar a verificar as transações. Se os participantes da rede não estiverem dispostos a gastar seu computador, o sistema não funcionaria. Portanto, podemos recompensar qualquer pessoa que verifique a transação com sucesso, dando-lhes algumas formas de infocoin.

    No protocolo do Bitcoin, este processo de verificação é chamado de "mineração" de blocos. Os vencedores de cada transação receberão Bitcoin como recompensa. No início, a recompensa será de 50 Bitcoins por bloco verificado. Mas, a cada 210.000 blocos verificados (ou seja, aproximadamente a cada 4 anos), a recompensa será reduzida para metade. Até agora, isso só aconteceu uma vez, ou seja, agora a recompensa obtida por um bloco de verificação é de 25 Bitcoins. O processo de redução para metade continuará até 2140 aproximadamente.

    Você pode pensar em prova de trabalho como um processo de verificação de negócios competitivos. Cada participante gasta uma parte do poder computacional. A chance de um minerador vencer é provavelmente igual à proporção entre o tamanho do poder computacional que eles controlam e o poder computacional da rede inteira. Por exemplo, um minerador controla um por cento do poder computacional da rede inteira, então sua probabilidade de vencer é provavelmente um por cento.

    É claro que, mesmo que haja uma pequena chance de um minerador desonesto destruir o blockchain inteiro, não temos confiança suficiente para usá-lo como moeda.

    Eu vou analisar o problema das duas flores imediatamente, mas antes disso, eu gostaria de adicionar um detalhe importante ao conceito de Infocoin. Idealmente, nós esperamos que a rede Infocoin possa unificar a ordem em que as transações ocorrem. Se não tivermos uma ordem unificada, não será muito claro quem tem qual o Infocoin em que momento específico. Para ajudar a resolver isso.

    img

    Em casos de coincidência, um blockchain pode se ramificar. Isso ocorre porque, às vezes, dois mineradores verificam transações de um bloco quase simultaneamente. Eles são publicados simultaneamente na rede, alguns atualizando seu blockchain de uma maneira, outros atualizando seu blockchain de outra maneira.

    img

    Isso cria uma situação que queremos evitar: uma situação em que a ordem das transações não é clara, e quem tem quais as informações não é claro. Felizmente, há uma maneira simples de mover as ramificações. A regra é esta: se uma situação de ramificação ocorrer, as pessoas na rede continuam mantendo duas ramificações e, em qualquer caso, os mineradores só trabalham no blockchain mais longo.

    Suponhamos que temos um ramo e que alguns mineradores recebem primeiro o bloco A e outros mineradores recebem primeiro o bloco B. Os mineradores que recebem o bloco A continuarão a minar ao longo de seu ramo e os outros mineradores seguirão o bloco B. Suponhamos que os mineradores no ramo B conseguem minar o próximo bloco:

    img

    Quando recebem essa mensagem, as pessoas no ramo A notam que o ramo B é o mais longo e, portanto, são transferidas para o ramo B. O trabalho no ramo A é interrompido rapidamente, de modo que todos trabalham no mesmo bloco de ordem. Então o bloco A é ignorado.

    Da mesma forma, se o minerador no ramo A escavar o próximo bloco primeiro, o minerador no ramo B vai parar e passar para o ramo A.

    Qualquer que seja o resultado, este processo garante que o blockchain tenha uma ordem uniforme. No Bitcoin, uma transação não pode ser considerada como confirmada até que 1) ela exista no bloco mais longo do ramo e 2) pelo menos 5 blocos verificados sejam verificados após ela. Nesse caso, dizemos que a transação tem 6 confirmações.

    Agora que entendemos a ordem do tempo, voltamos a pensar no que aconteceria se uma pessoa desonesta quisesse gastar duas vezes. Suponhamos que Alice dê ao Bob e ao Charlie a mesma transação ao mesmo tempo. Uma possibilidade é que ela verifique um bloco com duas transações ao mesmo tempo. Suponhamos que ela tenha um por cento de habilidade computacional.

    Mas outra possibilidade é que ela tente divulgar duas transações separadamente. Ela pode divulgar uma transação para um grupo de mineiros e outra para outro grupo de mineiros, e ela quer que ambas as transações sejam verificadas. Felizmente, nesse caso, como acabamos de dizer, a rede acaba confirmando apenas uma das transações.

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

    img

    Infelizmente, por essa altura, Alice já estava seis passos atrás do blockchain mais longo. Ela tinha dificuldade em acompanhar o ramo mais longo. Os outros mineiros não a ajudariam, pois todos precisavam trabalhar no ramo mais longo para serem recompensados. A menos que Alice pudesse combinar mais rápido do que os outros na rede quando resolvesse o trabalho provado (ou seja, ela provavelmente tinha mais de 50% do poder computacional da rede inteira).

    É claro que não é muito rigoroso dizer que Alice certamente não pode duplicar. É apenas uma conclusão razoável. O White Paper original do Bitcoin não fez uma análise rigorosa de segurança, mas apenas uma conclusão informal semelhante à minha.

    O autor Michael deixou de lado o conceito de Infocoin para dar uma explicação mais detalhada do protocolo de Bitcoin através da visão de transações de Bitcoin.

    Além disso, se você achar que é útil, recomendo que você dê uma dica para o autor original deste artigo, Michael Nielsen, que tem um endereço em 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ. Você também pode segui-lo no Twitter.

O que é que a Bíblia diz sobre o assunto?


Mais.