Bitcoin. Essa é a palavra geralmente associada a enormes ganhos e especulação no mercado financeiro. Apesar dos retornos inacreditáveis dos últimos anos, o Bitcoin é mais do que uma "moeda digital" ou um novo ativo. Ele carrega consigo uma nova tecnologia e, ela sim, é a grande ruptura tecnológica. Como é difícil de encontrar bons conteúdos em Português, eu tomei a liberdade de traduzir o paper original do Bitcoin, publicado por Satoshi Nakamoto, onde a tecnologia é detalhada. No artigo é possível entender claramente o que é uma transação, as características principais da blockchain, a atividade de mineração e os gastos de eletricidade do minerador, o anonimato das transações e as carteiras.
Bitcoin: Um sistema de dinheiro eletrônico ponto-a-ponto
Satoshi Nakamoto [email protected] www.bitcoin.org Traduzido por Leandro Guerra Abstract. Uma versão puramente ponto-a-ponto de dinheiro eletrônico pode permitir o envio de pagamentos online diretamente de uma parte a outra sem a intermediação de uma instituição financeira. Assinaturas digitais fornecem parte da solução, mas os verdadeiros benefícios são perdidos se ainda for necessário um intermediário confiável para a prevenção de gasto duplicado. Nós propomos uma solução para o problema de gasto duplo usando uma rede ponto-a-ponto. A rede “carimba uma data” nas transações codificando-as em uma cadeia contínua de transações baseada em codificação hash (a blockchain), formando um registro que não pode ser modificado sem que a transação seja refeita. A longa cadeia não apenas serve como prova de sequência dos eventos testemunhados, mas prova que eles vieram de um maior conjunto de poder de processamento. Enquanto a maior parte do poder de processamento é controlado por nós que não estão cooperando para atacar a rede, eles irão gerar a maior corrente e ultrapassar os atacantes. A rede em si requer uma estrutura mínima. Mensagens são distribuídas na base da “melhor forma possível”, e os nós podemos sair e voltar à rede á vontade, aceitando a cadeia com a maior prova de trabalho como prova do que aconteceu enquanto eles estiveram fora. 1. Introdução O comércio pela Internet tem se tornado quase exclusivamente baseado em instituições financeiras que agem como intermediários confiáveis para processar os pagamentos eletrônicos. Enquanto o sistema funciona bem o suficiente para a maioria das transações, ele sofre da fraqueza inerente do modelo baseado em confiança. Transações completamente irreversíveis não são realmente possíveis, já que as instituições financeiras não podem evitar eventuais mediações de disputa. O custo desta mediação aumenta os custos de transação, criando então um valor mínimo para uma transação ser viável, cortando a possibilidade de existirem transações pequenas e casuais, além do fato que há um grande custo em perder a habilidade de fazer pagamentos não-estornáveis para serviços não-estornáveis. Com a possibilidade do estorno, a necessidade de confiança se distribui. Vendedores devem tentar se proteger de seus clientes, obrigando-os a fornecer mais informações do que seriam necessárias, pois os mesmos podem comprar produtos e serviços, pagar eletronicamente e logo após estornar o pagamento. Um certo percentual de fraude é aceito como inevitável. Estes custos e incertezas sobre os pagamentos podem ser evitados com uma pessoa usando uma moeda física, mas não existe mecanismo que faça pagamentos via canais eletrônicos sem a necessidade de um intermediário confiável. O que é preciso é um sistema de pagamentos eletrônicos baseado em provas criptográficas em vez de confiança, que permita que duas partes interessadas em fazer transações diretamente as façam sem a necessidade deste intermediário. Transações que são computacionalmente impraticáveis de reverter podem proteger os vendedores de fraude, além do queserviços de proteção poderiam ser facilmente implementados para proteger os compradores (algo como PagSeguro, Paypal ou MercadoPago fazem atualmente). Neste artigo, nós propomos uma solução para o problema do gasto-duplo usando um servidor distribuído ponto-a-ponto para gerar uma prova computacional com ordem cronológica de transações. O sistema é seguro enquanto os nós honestos coletivamente controlam mais poder de processamento do que qualquer grupo cooperado de nós atacantes. 2. Transações Nós definimos uma moeda eletrônica como uma cadeia de assinaturas digitais. Cada proprietário transfere a moeda para o próximo assinando digitalmente uma codificação com as transações anteriores e a chave pública do próximo proprietário e adicionando estas ao fim da moeda. Um recebedor pode verificar as assinaturas para verificar a cadeia de propriedade.
O problema obviamente é que o recebedor não pode verificar se um dos proprietários anteriores não gastou duplamente a moeda. Uma solução é introduzir uma autoridade central confiável, ou emissor, que verificaria cada transação para prevenir o gasto duplo. A cada transação, a moeda seria retornada ao emissor que emitiria então uma nova moeda, e apenas as moedas emitidas diretamente do emissor seriam confiáveis de não terem sido gastas duas vezes. O problema com esta solução é que todo o sistema monetário dependeria de uma entidade rodando o emissor, e cada transação teria que passar por ele, exatamente como um banco. Nós precisamos de uma forma na qual o beneficiário saiba que os donos anteriores não assinaram nenhuma nova transação. Para este propósito, a transação mais antiga é a transação que conta, então nós não nos importamos sobre novas tentativas de gasto duplicado. A única forma de confirmar a validade de uma transação é estar ciente de todas as transações. Em um modelo baseado no emissor, o emissor está ciente de todas as transações e sabe qual delas chegou primeiro. Para atingir o objetivo sem um intermediário confiável, as transações precisam ser publicamente anunciadas [1], e nós precisamos de um sistema em que os participantes concordem em um único histórico da ordem em que elas foram recebidas. O beneficiário precisa provar que no tempo de cada transação, a maioria dos nós concordou que ele foi o primeiro a receber.
3. Servidor Timestamp (Servidor de Registros ou Blockchain) A solução que nós propomos começa com um servidor de registros de tempo. Um servidor registros no tempo funciona pegando a codificação de um bloco de itens a serem registrados e publicando largamente esta codificação, como em um jornal ou um post na Usenet [2-5]. O carimbo ou registro de tempo prova que os dados precisam ter existido naquele tempo, obviamente, para que sejam incluídos na codificação. Cada registro de tempo inclui o registro de tempo anterior em sua codificação, formando uma cadeia (a blockchain), onde cada registro de tempo adicional reforçará os blocos anteriores.
4. Prova de trabalho (Proof-of-Work ou Transações)
Para implementar um servidor timestamp distribuído em uma base ponto-a-ponto, nós vamos precisa usar um sistema de prova de trabalho similar ao Dinheiro Codificado de Adam Back [6], em vez de um jornal ou um post da Usenet. A prova de trabalho envolve procurar por um valor que foi codificado por um algoritmo como SHA-256, a codificação começa com um número de zero bits. O trabalho médio necessário é exponencial em número de “zero bits” necessários e pode ser verificado executando uma única codificação. Para a nossa rede de carimbos de tempo, nós vamos implementar uma prova de trabalho incrementando um número aleatório no bloco até que o valor encontrado sirva para decodificar o bloco com o número de zero bits. Uma vez que o esforço de CPU foi gasto para satisfazer a prova de trabalho, o bloco não pode ser modificado sem que o trabalho seja refeito. Como os blocos seguintes são encadeados logo após este, o trabalho para modificar o bloco inclui também refazer todos os blocos posteriores.
A prova de trabalho também envolve o problema em determinar a representação na tomada de decisão da maioria. Se a maioria é determinada como “um IP, um voto”, ela pode ser subvertida por qualquer um capaz de alocar muitos IPs. A prova de trabalho é essencialmente “um 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 de processamento é controlado por nós honestos, a corrente honesta irá crescer mais rapidamente e ultrapassar qualquer corrente competidora. Para modificar um bloco antigo, um atacante teria que refazer a prova de trabalho do bloco e de todos os blocos posteriores e então ultrapassar o trabalho dos nós honestos. Nós vamos mostrar adiante que a probabilidade de um atacante lento alcançar os honestos diminui exponencialmente, a medida que os blocos subsequentes são adicionados a corrente honesta. Para compensar o aumento da velocidade do hardware e a variedade de interesse em rodar os nós a medida que o tempo passa, a dificuldade da prova de trabalho é determinada por uma meta variável em número de blocos por hora. Se os blocos estão sendo gerados muito rápido, a dificuldade aumenta.
5. Rede Os passos para rodar a rede são os seguintes:
Os nós sempre consideram a cadeia mais longa como a cadeia correta e vão manter-se trabalhando em estendê-la. Se dois nós transmitem versões diferentes do mesmo bloco simultaneamente, alguns nós vão receber um ou outro primeiro. Neste caso, eles vão trabalhar no primeiro que receberam, mas vão manter a outra versão no caso de ela se tornar a maior. O impasse será solucionado quando a próxima prova de trabalho for encontrada e uma das versões se tornar maior. Os nós que estavam trabalhando na outra versão então vão mudar e passar a trabalhar na versão maior. As transmissões de novas transações não necessariamente precisam alcançar todos os nós. Enquanto elas alcançarem muitos nós, elas vão entrar em algum bloco uma hora ou outra. As transmissões de blocos também são tolerantes à mensagens perdidas. Se um nó não receber um bloco, ele vai solicitá-lo quando receber o próximo bloco e perceber que perdeu um. 6. Incentivo (a recompensa pela atividade de mineração) Por convenção, a primeira transação de um bloco é uma transação especial que inicia uma nova moeda (a bitcoin) de propriedade do criador do bloco. Isso adiciona um incentivo para os nós suportarem a rede, e provê uma forma de inicialmente distribuir moedas em circulação, já que não existe uma autoridade central para emitir essas moedas. A adição de uma quantidade constante de novas moedas é análoga a dos mineradores de ouro utilizando seus recursos para colocar mais ouro em circulação. No nosso caso, temos o gasto de tempo de processamento e de eletricidade. O incentivo também pode ser financiado por taxas de transação. Se o valor de saída de uma transação é menor que o valor de entrada, a diferença é a taxa de transação que foi adicionada ao valor de incentivo do bloco que contém a transação. Uma vez que um número pré-determinado de moedas já tiver entrado em circulação, o incentivo pode mudar completamente para taxas de transação e poderá ser completamente livre de inflação. O incentivo também pode ajudar a encorajar os nós para permanecer honestos. Se um atacante poderoso é capaz de ter mais poder de processamento do que todos os nós honestos juntos, ele provavelmente vai ter que escolher entre fraudar as pessoas pegando de volta os pagamentos que fizer, ou usar este poder de processamento para ganhar novas moedas. Ele provavelmente vai achar mais lucrativo trabalhar conforme as regras, já que elas vão lhe dar mais moedas do que a todos os outros juntos do que prejudicar o sistema e, juntamente, suas próprias moedas. 7. A preocupação com espaço em disco Uma vez que a última transação de bitcoin é embutida em blocos suficientes, as transações gastas anteriormente podem ser descartadas para salvar espaço em disco. Para facilitar esta tarefa sem quebrar a codificação do bloco, as transações são codificadas em uma árvore Merkle [7][2][5], em que apenas a raiz é incluída na codificação dos blocos. Blocos antigos podem então ser compactados ao remover as versões mais antigas da árvore. As codificações interiores não precisam ser armazenadas.
Um cabeçalho de bloco sem transações deve ter em torno de 80 bytes. Se nós supusermos que os blocos são gerados a cada 10 minutos, teremos 80 bytes * 6 * 24 * 365 = 4.2MB por ano. Com os sistemas de computador típicos a venda em 2008 com 2GB de RAM, e a lei de Moore prevendo um aumento de 1.2GB por ano, armazenamento não deve ser um problema mesmo se os cabeçalhos dos blocos forem mantidos na memória.
8. Verificação simplificada de pagamento É possível verificar os pagamentos sem ter que rodar um nó de rede completo. Um usuário precisa apenas manter uma cópia dos cabeçalhos dos blocos da corrente com a maior de prova de trabalho, que ele pode obter consultando os nós da rede até se convencer que ele tem a maior cadeia e obter a ramificação Merkle que une a transação ao bloco onde ela está registrada. Ele não pode verificar a transação por si só, mas ligando ela ao local na corrente, ele pode ver que este nó aceitou a transação, e blocos adicionados após este irão confirmar que a rede a aceitou.
Como sempre, a verificação é confiável contanto que os nós honestos controlem a rede, mas é mais vulnerável se grande parte do poder de processamento da rede estiver trabalhando para um atacante. Enquanto os nós podem verificar transações por si só, o método mais simples pode ser enganado por uma transação fabricada por um atacante enquanto o atacante continuar a dominar o processamento da rede. Uma estratégia para proteger-se contra este problema seria aceitar alertas dos nós da rede quando eles detectam um bloco inválido, pedindo para o software do usuário que ele baixe o bloco completo e as transações alertadas para confirmar a inconsistência. Os negócios que recebem pagamentos frequentes vão provavelmente querer rodar seus próprios nós para uma segurança mais independente e verificações mais rápidas.
9. Combinando e dividindo valor Mesmo que seja possível manipular as moedas individualmente, seria pouco prático separar as transações para cada centavo a ser transferido. Para permitir que o valor seja dividido e combinado, as transações devem permitir múltiplas entradas e múltiplas saídas. Normalmente haverá tanto uma única entrada de uma grande transação anterior ou muitas entradas combinando pequenos valores e no máximo duas saídas: Uma para o pagamento e uma para devolução de troco, se houver, de volta para o pagador.
Deve-se notar que o fato de uma transação depender de diversas transações, e estas transações dependerem de muitas outras não é um problema. Nunca haverá a necessidade de extrair uma cópia completa do histórico de uma transação.
10. Privacidade O modelo bancário tradicional atinge um nível de privacidade por limitar o acesso à informação apenas às partes envolvidas e ao intermediário confiável. A necessidade de anunciar todas as transações publicamente prejudica este método, mas a privacidade pode ainda ser mantida quebrando o fluxo da informação em outro local: mantendo as chaves públicas anônimas. O público pode ver que alguém está enviando um montante de dinheiro para outra pessoa, mas sem informações ligando a transação a qualquer pessoa. Isso é parecido com o nível de informação liberado no mercado de ações, onde o tempo e o tamanho das vendas individuais, o book de ofertas, são tornados públicos, porém sem dizer quem são as partes envolvidas.
Como um firewall adicional, um novo par de chaves poderia ser usado para cada transação para evitar que sejam ligadas a um proprietário comum. Algum relacionamento ainda é inevitável com transações de muitas entradas, que necessariamente revelarão que suas entradas pertencem ao mesmo proprietário. O risco é que se este proprietário de uma chave for revelado, ligações poderiam revelar outras transações que pertenciam ao mesmo proprietário.
11. Os Cálculos Para os cálculos da rede, nós consideramos o cenário em que um atacante tentando gerar uma corrente alternativa mais rápido do que a blockchain honesta. Mesmo se isso for alcançado, ele não vai tornar o sistema aberto para mudanças arbitrárias, como criar valor do nada ou tomar o dinheiro que nunca pertenceu ao atacante. Os nós não irão aceitar uma transação inválida como pagamento, e os nós honestos nunca aceitarão um bloco que as contém. Um atacante pode apenas tentar modificar uma de suas próprias transações para pegar de volta o dinheiro que ele gastou recentemente. A corrida entre a blockchain honesta e a blockchain do atacante pode ser caracterizada como uma Caminhada Aleatória Binomial. O evento de sucesso é a corrente honesta ser estendida por um bloco, aumentando sua liderança em +1, e o evento de falha é a corrente do atacante ser estendida por um bloco, reduzindo o atraso em -1. A probabilidade de um atacante alcançar de um determinado déficit é análoga ao problema da Falácia do Apostador. Suponha que um apostador com créditos ilimitados comece em déficit e jogue potencialmente um infinito número de vezes para tentar quebrar a banca. Nós vamos calcular a probabilidade de ele nunca conseguir isso, ou que um atacante simplesmente alcance a corrente honesta, como segue [8]: p = probabilidade de um nó honesto encontrar o próximo bloco q = probabilidade de um atacante encontrar o próximo bloco qz = probabilidade algum dia o atacante alcançar estando z blocos atrás
Assumindo que p > q, a probabilidade cai exponencialmente a medida que o número de blocos que o atacante tem que alcançar aumenta. Com as possibilidades contra ele, se ele não levar sorte logo no inicio, suas chances vão sumindo e ele acaba ficando muito atrasado. Nós agora consideramos o quão longo o recibo de uma nova transação precisa aguardar antes que seja suficientemente correto que o pagador não poderá mudar a transação. Nós assumimos que um pagador é um atacante que quer fazer seu recebedor acreditar que ele o pagou por algum tempo, então mudar a transação para receber o dinheiro de volta depois que algum tempo se passou. O recebedor vai ser alertado quando isso acontecer, mas o pagador espera que este aviso venha tarde demais. O recebedor gera um novo par de chaves e dá a chave pública para o pagador logo antes de assinar. Isso previne que o pagador ganhe tempo e prepare uma corrente de blocos a frente do bloco atual, e então executar a transação neste momento. Uma vez que a transação seja enviada, o pagador desonesto começa a trabalhar em segredo em uma corrente paralela contendo uma versão alternada da transação. O recebedor aguarda até que a transação seja adicionada ao bloco e z blocos já tenham sido ligados após ele. Ele não sabe o exato montante do progresso que o atacante conseguiu, mas assumindo que os blocos honestos tomaram a média esperada de tempo por bloco, o atacante potencial vai ter a posse de distribuição com o valor esperado:
Para obter a probabilidade de um atacante ainda alcançar agora, nós multiplicamos a porção de cada medida de progresso que ele poderia fazer pela probabilidade de ele alcançar a partir deste ponto:
Reorganizando para evitar a soma de uma causa infinita na distribuição:
E, finalmente, convertendo o código em C:
Executando alguns resultados, podemos ver a probabilidade cair exponencialmente com
Para P menor que 0.1%
12. Conclusão
Propusemos um sistema de transações eletrônicas sem basear-se em confiança. Nós começamos com a estrutura comum de moedas feitas de assinaturas digitais, que providenciam forte controle de propriedade, mas é incompleta sem um sistema de prevenção de gasto duplo. Para resolver isso, nós propusemos uma rede ponto-a-ponto usando provas de trabalho para armazenar em um histórico público de transações (blockchain) que rapidamente se torna inviável para um atacante modificar se os nós honestos controlarem a maior parte do poder de processamento. A rede é robusta em sua simplicidade não-estruturada. Os nós trabalham todos ao mesmo tempo com pouca coordenação entre si. Eles não precisam ser identificados, já que as mensagem não são encaminhadas para nenhum local em particular e apenas precisam ser entregues na base da “melhor forma possível”. Os nós podem deixar e voltar a rede à vontade, aceitando a cadeia de prova de trabalho como prova do que aconteceu enquanto eles estiveram fora. Eles votam com seu poder de processamento, expressando sua aceitação dos blocos válidos ao trabalhar em estende-los e rejeitando blocos inválidos ao recusar a trabalhar neles. Quaisquer regras necessárias e incentivos podem ser forçados com este mecanismo de consenso. Todas as referência elencadas no artigo traduzido podem ser encontrada na seção de referências do artigo original, para download aqui:
Um abraço e até o próximo post!
2 Comments
Outspoken Market
12/24/2017 03:46:19 pm
Olá. Muito obrigado pela visita. Qualquer dúvida me envie um e-mail. Obrigado e abs!
Reply
Your comment will be posted after it is approved.
Leave a Reply. |
Archives
December 2023
Categories
All
|