Saudações amigos!

No versículo anterior terminamos a tradução de “The Ricardian Contract”. Hoje, por ser um dia importatíssimo, abrirei uma exceção na ordem cronológica que estava seguindo.
Há exatos 12 anos, Satoshi Nakamoto publicava o whitepaper do Bitcoin, o artigo mais importante da criptoesfera: “Bitcoin: A Peer-to-Peer Eletronic Cash System“. Se você faz parte da criptoesfera e não leu este artigo, volte algumas casas, ou melhor, começa de novo.
Começaremos a primeira parte no versículo de hoje.
Bitcoin: Um Sistema de Dinheiro Eletrônico Ponto-a-Ponto
Satoshi Nakamoto
31 de outubro, 2008
Resumo
Uma versão de dinheiro eletrônico puramente peer-to-peer [ponto-a-ponto] permitiria que pagamentos online fossem enviados diretamente de uma parte à outra sem passar por uma instituição financeira. Assinaturas digitais fornecem parte da solução, mas os principais benefícios são perdidos se um terceiro de confiança ainda for necessário para prevenir o gasto duplo. Propomos uma solução ao problema do gasto duplo usando uma rede peer-to-peer. A rede faz um timestamp [carimbo de data e hora] nas transações ao fazer o hash delas em uma cadeia contínua de prova de trabalho baseada em hash, formando um registro que não pode ser alterado sem refazer a prova de trabalho. A cadeia mais longa não apenas serve como prova da sequência dos eventos testemunhados, mas prova de que veio da maior pool de força computacional (CPU). Contanto que a maior parte do poder computacional seja controlada por nodos que não estejam cooperando para atacar a rede, eles vão gerar a cadeia mais longa e ultrapassar atacantes. A rede em si requer uma estrutura mínima. Mensagens são transmitidas com base no melhor esforço, e os nodos podem sair e se juntar à rede à vontade, aceitando a cadeia de prova de trabalho mais longa como prova do que aconteceu enquanto estiveram fora.
1. Introdução
O comércio na internet passou a depender quase exclusivamente em instituições financeiras servindo como terceiros de confiança para processar pagamentos eletrônicos. Embora o sistema funcione suficientemente bem para a maioria das transações, ele ainda sofre com a fraqueza inerente do modelo baseado em confiança. Transações completamente não-reversíveis não são realmente possíveis, uma vez que as instituições financeiras não podem evitar a mediação de disputas. Os custos da mediação aumentam os custos de transação, limitando o tamanho mínimo da transação prática e cortando a possibilidade de pequenas transações casuais, e há um custo mais amplo na perda da capacidade de se fazer pagamentos não reversíveis para serviços não reversíveis. Com a possibilidade de reversão, a necessidade de confiança se espalha. Os comerciantes devem ser cautelosos com seus clientes, importunando-os por mais informações do que precisariam de outra forma. Uma certa porcentagem de fraude é aceita como inevitável. Estes custos e incertezas de pagamento podem ser evitados pessoalmente usando moeda física, mas não existe nenhum mecanismo para se fazer pagamentos por meio de um canal de comunicação sem uma parte de confiança.
O que é necessário é um sistema de pagamento eletrônico baseado em prova criptográfica em vez de confiança, permitindo que quaisquer duas partes interessadas transacionem diretamente uma com a outra sem a necessidade de um terceiro de confiança. As transações que são computacionalmente impraticáveis para reverter protegeriam os vendedores de fraudes, e mecanismos de garantia de rotina poderiam ser facilmente implementados para proteger os compradores. Neste artigo, propomos uma solução para o problema do gasto duplo usando um servidor de timestamp distribuído peer-to-peer para gerar uma prova computacional da ordem cronológica das transações. O sistema é seguro desde que os nodos honestos controlem coletivamente mais potência de CPU do que qualquer grupo cooperativo de nodos atacantes.
2. Transações
Definimos uma moeda eletrônica como uma cadeia de assinaturas digitais. Cada proprietário transfere a moeda para o próximo assinando digitalmente um hash da transação anterior e a chave pública do próximo proprietário e adicionando-as ao final da moeda. Um beneficiário pode verificar as assinaturas para verificar a cadeia de propriedade.
O problema, claro, é que o beneficiário não pode verificar se um dos proprietários não gastou duplamente a moeda. Uma solução comum é introduzir uma autoridade central de confiança, ou casa da moeda, que verifica todas as transações em busca de gastos duplos. Após cada transação, a moeda deve ser devolvida à casa da moeda para a emissão de uma nova moeda, e apenas moedas emitidas diretamente da casa da moeda são consideradas como não gastas duplamente. O problema com essa solução é que o destino de todo o sistema monetário depende da empresa que administra a casa da moeda, com cada transação tendo que passar por ela, exatamente como um banco.
Precisamos de uma maneira em que o beneficiário saiba que os proprietários anteriores não assinaram nenhuma transação anterior. Para nossos propósitos, a primeira transação é a que conta, então não nos importamos com tentativas posteriores de gasto duplo. A única maneira de confirmar a ausência de uma transação é estar ciente de todas as transações. No modelo baseado na casa da moeda, a casa da moeda estava ciente de todas as transações e decidia qual chegava primeiro. Para conseguir isso sem uma parte confiável, as transações devem ser anunciadas publicamente [1], e precisamos de um sistema em que os participantes concordem em um único histórico da ordem em que foram recebidas. O beneficiário precisa de uma prova de que, no momento de cada transação, a maioria dos nodos concordou que foi a primeira recebida.
3. Servidor de Timestamp
A solução que propomos começa com um servidor de timestamp. Um servidor de timestamp funciona pegando um hash de um bloco de itens a serem marcados e publicando amplamente o hash, como em um jornal ou postagem da Usenet [2 – 5] . O carimbo de data / hora prova que os dados devem ter existido no momento, obviamente, para entrar no hash. Cada timestamp inclui o timestamp anterior em seu hash, formando uma cadeia, com cada timestamp adicional reforçando os anteriores.
4. Prova de Trabalho
Para implementar um servidor de timestamp distribuído em uma base peer-to-peer, precisaremos usar um sistema de prova de trabalho semelhante ao Hashcash de Adam Back [6], em vez de publicações em jornais ou Usenet. A prova de trabalho envolve a varredura de um valor que, quando passado por uma função hash, como com SHA-256, o hash começa com um número de bits zero. O trabalho médio necessário é exponencial no número de bits zero exigidos e pode ser verificado executando um único hash.
Para nossa rede de timestamp, implementamos a prova de trabalho incrementando um nonce no bloco até que seja encontrado um valor que forneça ao hash do bloco os bits zero necessários. Uma vez que o esforço da CPU foi despendido para satisfazer a prova de trabalho, o bloco não pode ser alterado sem refazer o trabalho. Como os blocos posteriores são encadeados depois dele, o trabalho para mudar o bloco incluiria refazer todos os blocos depois dele.
A prova de trabalho também resolve o problema de determinar a representação na tomada de decisão da maioria. Se a maioria fosse baseada em “um endereço IP, um voto”, ele poderia ser subvertido por qualquer pessoa capaz de alocar muitos IPs. A prova de trabalho é essencialmente “uma CPU, um voto”. A decisão da maioria é representada pela cadeia mais longa, que tem o maior esforço de prova de trabalho investido nela. Se a maior parte do poder da CPU for controlada por nodos honestos, a cadeia honesta crescerá mais rápido e ultrapassará quaisquer cadeias concorrentes. Para modificar um bloco anterior, um invasor teria que refazer a prova de trabalho do bloco e todos os blocos posteriores e então alcançar e superar o trabalho dos nodos honestos. Mostraremos mais tarde que a probabilidade de um atacante mais lento se recuperar diminui exponencialmente à medida que os blocos subsequentes são adicionados.
Para compensar o aumento da velocidade do hardware e o interesse variável na execução de nós ao longo do tempo, a dificuldade da prova de trabalho é determinada por uma média móvel visando um número médio de blocos por hora. Se eles forem gerados muito rápido, a dificuldade aumenta.
[1] W. Dai, “b-money,” http://www.weidai.com/bmoney.txt, 1998
[2] H. Massias, X.S. Avila, and J.-J. Quisquater, “Design of a secure timestamping service with minimal trust requirements,” In 20th Symposium on Information Theory in the Benelux, May 1999
[3] S. Haber, W.S. Stornetta, “How to time-stamp a digital document,” In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
[4] D. Bayer, S. Haber, W.S. Stornetta, “Improving the efficiency and reliability of digital time-stamping,” In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.
[5] S. Haber, W.S. Stornetta, “Secure names for bit-strings,” In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.
[6] A. Back, “Hashcash – a denial of service counter-measure,” http://www.hashcash.org/papers/hashcash.pdf, 2002.
Foi esta a primeira parte, no próximo a segunda.
