Bitcoin: Um Sistema de Dinheiro Eletrónico Peer-to-Peer
Baseado no whitepaper original de Satoshi Nakamoto

by Luís Nuno Perdigão

Powered by
Agenda
Introdução ao Problema
Limitações do sistema financeiro atual baseado em confiança
A Solução Bitcoin
Sistema peer-to-peer e mecanismos de prova de trabalho
Componentes Técnicos
Transações, rede, incentivos e verificação
Implicações e Conclusão
Privacidade, segurança e visão para o futuro
O Problema do Sistema Financeiro Atual
O comércio na Internet passou a depender quase exclusivamente de instituições financeiras que servem como terceiros confiáveis para processar pagamentos eletrónicos. Embora o sistema funcione bem para a maioria das transações, ainda sofre com as fraquezas inerentes do modelo baseado em confiança:
  • Impossibilidade de transações verdadeiramente irreversíveis
  • Custos de mediação aumentam os custos de transação
  • Limitação para pequenas transações casuais
  • Necessidade de recolher mais informações dos clientes
  • Certa percentagem de fraude é aceite como inevitável
A Necessidade de um Novo Sistema
O que é necessário é um sistema de pagamento eletrónico baseado em prova criptográfica em vez de confiança, permitindo que duas partes interessadas transacionem diretamente entre si sem a necessidade de um terceiro confiável.
Transações computacionalmente impraticáveis de reverter protegeriam os vendedores de fraudes, e mecanismos de custódia de rotina poderiam ser facilmente implementados para proteger os compradores.
O Problema do Gasto Duplo
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.
O problema é que o beneficiário não pode verificar se um dos proprietários não gastou a moeda duas vezes. A solução tradicional introduz uma autoridade central confiável que verifica cada transação quanto ao gasto duplo.
A Solução Bitcoin: Rede Peer-to-Peer
Para resolver o problema do gasto duplo sem uma parte confiável, as transações devem ser anunciadas publicamente, e precisamos de um sistema para que os participantes concordem com uma única história da ordem em que foram recebidas.
O beneficiário precisa de prova de que, no momento de cada transação, a maioria dos nós concordou que foi a primeira recebida.
Servidor de Carimbos Temporais
A solução proposta começa com um servidor de carimbos temporais. Um servidor de carimbos temporais funciona tomando um hash de um bloco de itens a serem carimbados e publicando amplamente o hash.
O carimbo temporal prova que os dados devem ter existido naquele momento para entrar no hash. Cada carimbo temporal inclui o carimbo temporal anterior no seu hash, formando uma cadeia, com cada carimbo temporal adicional reforçando os anteriores.
Prova de Trabalho (Proof-of-Work)
Desafio Computacional
Para implementar um servidor de carimbos temporais distribuído numa base peer-to-peer, usamos um sistema de prova de trabalho semelhante ao Hashcash de Adam Back.
Processo de Mineração
A prova de trabalho envolve a procura de um valor que, quando submetido a hash, como com SHA-256, o hash começa com um número de bits zero.
Proteção da Cadeia
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.
Vantagens da Prova de Trabalho
Representação Democrática
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 maioria do poder da CPU for controlada por nós honestos, a cadeia honesta crescerá mais rapidamente e superará quaisquer cadeias concorrentes.
Segurança contra Ataques
Para modificar um bloco passado, um atacante teria que refazer a prova de trabalho do bloco e todos os blocos após ele, e depois alcançar e superar o trabalho dos nós honestos.
A probabilidade de um atacante mais lento alcançar diminui exponencialmente à medida que blocos subsequentes são adicionados.
Como Funciona a Rede Bitcoin
Transmissão
Novas transações são transmitidas para todos os nós.
Coleção
Cada nó recolhe novas transações num bloco.
Mineração
Cada nó trabalha para encontrar uma prova de trabalho difícil para o seu bloco.
Partilha
Quando um nó encontra uma prova de trabalho, transmite o bloco para todos os nós.
Verificação
Os nós aceitam o bloco apenas se todas as transações nele forem válidas e não já gastas.
Resolução de Conflitos na Rede
Os nós sempre consideram a cadeia mais longa como a correta e continuarão a trabalhar para estendê-la. Se dois nós transmitirem versões diferentes do próximo bloco simultaneamente, alguns nós podem receber um ou outro primeiro.
Nesse caso, trabalham no primeiro que receberam, mas guardam o outro ramo caso se torne mais longo. O empate será quebrado quando a próxima prova de trabalho for encontrada e um ramo se tornar mais longo.
Incentivo para Suportar a Rede
Recompensa de Bloco
Por convenção, a primeira transação num bloco é uma transação especial que inicia uma nova moeda pertencente ao criador do bloco.
Taxas de Transação
O incentivo também pode ser financiado com taxas de transação. Se o valor de saída de uma transação for menor que o valor de entrada, a diferença é uma taxa de transação.
Mineração
É o tempo de CPU e eletricidade que é gasto, análogo aos mineiros de ouro que gastam recursos para adicionar ouro à circulação.
Honestidade
O incentivo ajuda a encorajar os nós a permanecerem honestos, tornando mais lucrativo seguir as regras do que tentar fraudar o sistema.
Recuperação de Espaço em Disco
Uma vez que a última transação numa moeda esteja enterrada sob blocos suficientes, as transações gastas antes dela podem ser descartadas para economizar espaço em disco.
Para facilitar isso sem quebrar o hash do bloco, as transações são submetidas a hash numa Árvore de Merkle, com apenas a raiz incluída no hash do bloco. Blocos antigos podem então ser compactados cortando ramos da árvore.
Verificação de Pagamento Simplificada
É possível verificar pagamentos sem executar um nó de rede completo. Um utilizador só precisa manter uma cópia dos cabeçalhos de bloco da cadeia de prova de trabalho mais longa e obter o ramo de Merkle ligando a transação ao bloco em que está carimbada.
Ele não pode verificar a transação por si mesmo, mas ao ligá-la a um lugar na cadeia, pode ver que um nó de rede a aceitou, e blocos adicionados depois confirmam ainda mais que a rede a aceitou.
Combinação e Divisão de Valor
Para permitir que o valor seja dividido e combinado, as transações contêm múltiplas entradas e saídas. Normalmente haverá uma única entrada de uma transação anterior maior ou múltiplas entradas combinando quantidades menores, e no máximo duas saídas: uma para o pagamento e outra devolvendo o troco, se houver, de volta ao remetente.
Privacidade no Bitcoin
Desafio de Privacidade
O modelo bancário tradicional alcança um nível de privacidade limitando o acesso à informação às partes envolvidas e ao terceiro confiável. A necessidade de anunciar todas as transações publicamente impede este método.
Solução de Anonimato
A privacidade pode ser mantida quebrando o fluxo de informação noutro lugar: mantendo as chaves públicas anónimas. O público pode ver que alguém está enviando uma quantia para outra pessoa, mas sem informações que liguem a transação a alguém.
Proteção Adicional de Privacidade
Como uma firewall adicional, um novo par de chaves deve ser usado para cada transação para evitar que sejam vinculadas a um proprietário comum. Alguma vinculação ainda é inevitável com transações de múltiplas entradas, que necessariamente revelam que suas entradas pertenciam ao mesmo proprietário.
O risco é que, se o proprietário de uma chave for revelado, a vinculação poderia revelar outras transações que pertenciam ao mesmo proprietário.
Segurança Contra Ataques
p>q
Probabilidade de Sucesso
Considerando p como a probabilidade de um nó honesto encontrar o próximo bloco e q como a probabilidade do atacante encontrar o próximo bloco, a probabilidade de um atacante alcançar diminui exponencialmente com o número de blocos.
z
Blocos de Confirmação
O destinatário espera até que a transação tenha sido adicionada a um bloco e z blocos tenham sido ligados após ele, aumentando drasticamente a segurança.
λ=z(q/p)
Distribuição de Poisson
O progresso potencial do atacante seguirá uma distribuição de Poisson com valor esperado λ, que diminui à medida que z aumenta.
Cálculos de Segurança
Para obter a probabilidade de que o atacante ainda possa alcançar, multiplicamos a densidade de Poisson para cada quantidade de progresso que ele poderia ter feito pela probabilidade de que ele poderia alcançar a partir desse ponto:
1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \big(1 - (q/p)^{(z-k)}\big)
Conclusão
Nakamoto propôs um sistema para transações eletrónicas descentraliizado e baseado num protocolo de confiança, resolvendo o problema do gasto duplo e usando uma rede peer-to-peer com prova de trabalho.
A rede proposta por ele é robusta na sua prórpia simplicidade . Os nós trabalham todos ao mesmo tempo com pouca coordenação e podem sair e voltar a juntar-se à rede à vontade. Votam com o seu poder de computação, validando as transações e obtendo com isso uma recompensa que reforça a confiança da rede, baseada em algoritmos criptográficos.