Você está na página 1de 12

Bitcoin: Um sistema de dinheiro eletrônico ponto-a-ponto1

Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

Tradução2: Vanderlei Dallagnolo3

Resumo

Uma versão puramente ponto-a-ponto de dinheiro eletrônico iria permitir


pagamentos online serem enviados diretamente de uma parte para outra sem
passarem através de instituições financeiras. Assinaturas digitais provêm parte
da solução, mas os maiores benefícios são perdidos se uma “terceira parte”4
responsável por validar a transação ainda for um requisito para prevenir o
“gasto duplo”5. Nós propomos uma solução ao problema do gasto duplo
usando uma rede ponto-a-ponto. A rede “marca a data”6 das transações,
converte-as por meio de funções hash7 e vai registrando esta versão convertida
em uma contínua cadeia de “prova de trabalho”8. A cadeia mais longa serve
não somente como prova da sequência dos eventos testemunhados, mas prova
que ela mesma veio do maior reservatório de poder de computação. Enquanto
a maioria do poder de computação for controlada por nós que não estejam
cooperando para atacar a rede, eles irão gerar a cadeia mais longa e deixar os
atacantes para trás. A rede em si requer estrutura mínima. Mensagens são
transmitidas na base do melhor esforço, e nós podem partir e reintegrar a rede
à vontade, desde que aceitando a mais longa cadeia de prova de trabalho como
prova do que aconteceu enquanto estiveram fora da rede.

1. Introdução

O comércio na Internet veio a confiar quase exclusivamente nas instituições financeiras


servindo como terceiros - agindo como validadores confiáveis - para processar pagamentos
eletrônicos. Enquanto o sistema funciona bem o suficiente para a maioria das transações, ele
ainda sofre das fraquezas inerentes do modelo baseado em confiança. Transações completamente
não-reversíveis não são realmente possíveis, dado que as instituições financeiras não podem
evitar a mediação de disputas. O custo da mediação aumenta os custos das transações, limitando
o tamanho mínimo prático das transações e cortando a possibilidade de pequenas transações
casuais, e existe o custo abrangente da perda de habilidade de fazer pagamentos não-reversíveis
para serviços não-reversíveis. Com a possibilidade de reversão, a necessidade de confiança
aumenta. Comerciantes devem desconfiar dos seus clientes, incomodando-os com solicitação de

1
Original em: https://bitcoin.org/bitcoin.pdf
2
Tradução informal e não técnica. Deve ser considerada como ponto de partida facilitado ao falante de língua
portuguesa sobre assunto Bitcoin.
3
Contato e contribuições pelo site do IVL ou para vanderlei.dallagnolo@institutoverdadeeliberdade.com.br. Endereço
para contribuições em bitcoin, ver ao final do documento.
4
Ver nota 9, referente a “terceiro” - na página 2.
5
Ver nota 10, referente a “gasto duplo” – na página 2.
6
Ver nota 12, referente a “servidor de datas de registro” – na página 3.
7
Ver nota 14, referente à “hash” – na página 4.
8
Ver nota 13, referente à “prova de trabalho” – na página 4.

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
mais informações do que precisariam de outra forma. Certo percentual de fraude é aceito como
inevitável. Estes custos e incertezas nos pagamentos podem ser evitados pessoalmente pela
utilização de dinheiro físico, mas não existe mecanismo para fazer pagamentos sobre um canal de
comunicação sem um intermediário garantidor da confiança da transação.

O que é necessário é um sistema de pagamento eletrônico baseado em prova criptográfica ao


invés de confiança, permitindo que duas partes de livre vontade transacionem diretamente entre
si sem a necessidade de um terceiro9 incumbido de validar a transação. Transações cuja
possibilidade de reversão seja impraticável computavelmente protegeriam os vendedores de
fraudes, e mecanismos de depósitos em garantia poderiam facilmente ser adotados para proteger
os compradores. Neste paper, nós propomos uma solução para o problema do gasto duplo10
usando um servidor de datas de registro ponto-a-ponto distribuído para gerar prova
computacional da ordem cronológica de transações. O sistema é seguro enquanto os nós honestos
coletivamente controlarem mais poder computacional do que qualquer grupo cooperativo de nós
atacantes.

2. Transações

Nós definimos a moeda eletrônica como uma cadeia de assinaturas digitais. Cada proprietário
transfere a moeda para o próximo assinando digitalmente a transação prévia convertida em hash
contendo a chave pública do próximo proprietário e adicionando estas duas ao final da moeda. O
beneficiário pode verificar as assinaturas para validar a cadeia de propriedade.

Transação Transação Transação

1º Proprietário 2º Proprietário 3º Proprietário


Chave pública Chave pública Chave pública

Hash Hash Hash

Verifica Verifica

Proprietário “0” 1º Proprietário 2º Proprietário


Assinatura Assinatura Assinatura

Assina Assina
1º Proprietário 2º Proprietário 3º Proprietário
Chave privada Chave privada Chave privada

9
No original está como “trusted third party”, que transliterado seria algo como “confiável terceira parte” – expressão
incomum e imprecisa em língua portuguesa – e usada em várias partes deste texto. Em cada local do texto traduzi
conforme mais adequado. Em lInhas gerais, sempre se refere a alguma entidade encarregada que tem o poder –
frequentemente o monopólio - de determinar se algo é válido ou não falsificado.
10
No original está como “double-spending”, que se refere a uma circunstância onde alguém gasta duas ou mais vezes
a mesma quantia de dinheiro. Para usar um exemplo simplificado e impreciso, imagine alguém que tenha R$ 1.000,00
(mil reais) numa conta bancária. Essa pessoa emite um cheque também de R$ 1.000,00 (mil reais) para pagar o
estabelecimento “A”. Antes do estabelecimento “A” descontar o cheque, a pessoa vai ao estabelecimento “B” e
repete o processo. Até que o segundo estabelecimento tente descontar o cheque, na prática, é como se a pessoa
emitente do cheque tivesse gasto duas vezes (double-spending) o mesmo dinheiro. Em criptomoedas esse é um
problema prioritário pela facilidade que um meio integralmente digitial permite para duplicar operações e registros.

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
O problema - é claro - é que o beneficiário não pode verificar se um dos proprietários não fez
um gasto duplo. Uma solução comum é a introdução de uma autoridade central incumbida de
validar a transação - equivalente à casa da moeda11 - que verifica cada transação à procura de
gastos duplos. Depois de cada transação, a moeda precisa ser retornada à casa da moeda que vai
emitir uma nova moeda, e somente moedas emitidas diretamente pela casa da moeda
diretamente podem ser confiadas como não tendo sido gastas duas vezes. O problema com esta
solução é o fato de que todo o sistema monetário depende da companhia que dirige a casa da
moeda, com cada transação tendo que passar através desta, exatamente como em um banco.

Nós precisamos de uma maneira para o beneficiário saber que o proprietário anterior não
assinou quaisquer transações antes. Para nossos propósitos, a transação mais antiga é aquela que
conta, então nós não nos importamos com tentativas posteriores de gastos duplos. A única
maneira de confirmar a ausência de uma transação é estar ciente de todas as transações. No
modelo da casa da moeda, esta estava ciente de todas as transações e decidia qual havia chegado
primeiro. Para realizar isto sem o terceiro validando, as transações precisam ser anunciadas
publicamente [1], e nós precisamos de um sistema para os participantes concordarem sobre um
histórico único da ordem na qual elas foram recebidas. O beneficiário precisa provar que no
instante de cada transação, a maioria dos nós concordou que ela foi a primeira recebida.

3. Servidor de marcação do tempo12

A solução que nós propomos começa com um servidor de marcação do tempo. Um servidor de
marcação do tempo trabalha por converter um bloco de itens em um hash que será
temporalmente marcado – terá a data registrada nele - e amplamente publicado, como em um
jornal diário ou uma publicação da Usenet [2 - 5]. A marcação do tempo prova que a data existiu
ao tempo - obviamente - de modo a ser inserida no hash. Cada marcação do tempo inclui a
marcação do tempo anterior em seu hash, formando uma cadeia, com cada marcação do tempo
adicional reforçando aqueles anteriores a ela.

Hash Hash

Bloco Bloco

Item Item ... Item Item ...

11
No original está “mint”, que quer dizer “ Casa da Moeda “ - a instalação responsável por produzir as moedas e
cédulas de dinheiro de um país. Em última instância, seria o validador com máxima autoridade para determinar se
uma moeda é válida ou não e o garantidor máximo para evitar gasto duplo ao retirar de circulação e emitir uma nova
moeda para cada uma que fosse envolvida em qualquer transação.
12
No original está como “timestamp server”, que transliterado seria algo como “servidor de marcação do tempo” –
expressão incomum e imprecisa em língua portuguesa – e usada em várias partes deste texto desta forma ou com
pequenas variações como apenas a palavra “timestamp”. Em cada local do texto traduzi conforme ficava mais
adequado. Em línhas gerais, sempre se refere a importante funcionalidade da infraestrutura do bitcoin que envolve
uma marcação precisa do tempo da execução e registro das transações. Pense num exemplo do dia-a-dia como
aquelas datas de validade dos produtos. Para que a data de validade possa ser sabida com precisão, a data de
fabricação deve ser precisa e ambas as datas devem ser confiáveis e existir meios precisos e independentes de validá-
las, do contrário elas são inúteis e até perigosas.

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
4. Prova de trabalho13

Para implementar um servidor distribuído de marcação do tempo em bases ponto-a-ponto,


nós vamos precisar usar um sistema de prova de trabalho similar ao do Hashcash de Adam Back
[6], ao invés do sistema do jornal ou da publicação da Usenet. A prova de trabalho envolve fazer
uma busca por um valor que quando convertido para um hash14, como quando utilizando SHA-
256, o hash resultante começar com certo número de bits de valor zero. O trabalho médio
necessário é exponencial para o número de bits de valor zero requeridos e pode ser verificado
executando um hash único. Para a nossa rede de marcação do tempo, nós adotamos a prova de
trabalho incrementando com um nonce15 no bloco até que o valor encontrado dê ao hash do
bloco a quantidade requerida de bits de valor zero. Uma vez que o esforço computacional foi
expandido para que ele satisfaça a prova de trabalho, o bloco não pode ser alterado sem refazer o
trabalho. À medida que blocos posteriores são encadeados após ele, o trabalho para alterar o
bloco irá incluir refazer todos os blocos após aquele.

Bloco Bloco

hash anterior nonce hash anterior nonce


e e
Tx Tx ... Tx Tx ...

A prova de trabalho também resolve o problema de determinar representação em processos


decisórios pela maioria. Se a maioria for baseada em um-endereço-IP-um-voto, ela poderia ser
subvertida por qualquer um capaz de alocar muitos IPs. Prova de trabalho é essencialmente uma-
CPU-um-voto. A decisão da maioria é representada pela cadeia mais longa, a qual tem o maior
esforço de prova de trabalho investido nele. Se a maioria do poder de computação é controlada
por nós honestos, a cadeia honesta irá crescer mais rápido e manter-se mais veloz que qualquer
cadeia competidora. Para modificar um bloco passado, um atacante precisaria ter que refazer a
prova de trabalho do bloco e de todos os blocos depois dele e então alcançar e ultrapassar o
trabalho dos nós honestos. Nós vamos mostrar mais à frente que a probabilidade de um atacante
lento alcançar diminui exponencialmente à medida que blocos subsequentes são adicionados.

13
No original está “proof-of-work”, que pode ser transliterado como “prova de trabalho”. É um termo técnico
utilizado em tecnologia da informação e significa uma estrutura que exige do usuário a prova de execução de algum
esforço para liberar certo acesso ou obter retorno esperado. Com isso encarecendo tentativas de automação ou de
acesso indevido, pois cada tentativa vai ter um custo. Para ser efetiva, a prova de trabalho precisa ser difícil de ser
obtida, mas não impossível e muito mais fácil de ser verificada do que obtida. Um exemplo do mundo real seria a
montagem de um quebra-cabeças. É difícil montar um quebra-cabeças com as peças soltas, espalhadas e misturadas.
Depois que ele está montado é bem mais rápido e exige menos esforço verificar que está montado e correto, do que o
esforço necessário para montá-lo. Este conceito é fundamental para o Bitcoin para evitar fraudes.
14
Hash é uma função muito utilizada em tecnologia da informação e em criptografia. Uma transliteração do termo
poderia ser algo como “misturar” no sentido utilizado quando se faz uma salada de vários ingredientes e se busca um
resultado homogêneo entre os ingredientes. Utilizando a função hash, mapeia-se dados de entrada de comprimento
variável para uma saída de comprimento fixo (referente ao tamanho em bytes). Outra maneira de explicar o que a
função hash faz é dizer que ela transforma uma grande quantidade de dados em uma pequena quantidade de
informações.
15
Nonce é uma palavra em inglês que significa algo como uma palavra criada para uma finalidade específica e utilizada
uma vez; um tipo de neologismo. Em criptografia é um conjunto de caractereres utilizados para aumentar uma chave
e torná-la mais segura.

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
Para compensar por incremento em velocidade de hardware e variação de interesse em rodar
nós ao longo do tempo, a dificuldade da prova de trabalho é determinada por média móvel
mirando um número médio de blocos por hora. Se eles forem gerados muito rápido, a dificuldade
aumenta.

5. Rede

Os passos para rodar a rede são os seguintes:

1) Novas transações são transmitidas para todos os nós;


2) Cada nó coleta novas transações e as agrupa em um bloco;
3) Cada nó trabalha para encontrar uma prova de trabalho difícil para seu bloco;
4) Quando um nó encontra a prova de trabalho, ele transmite o bloco para todos os nós;
5) Os nós aceitam o bloco somente se todas as transações nele são válidas e ainda não gastas;
6) Nós expressam sua aceitação do bloco trabalhando na criação do bloco seguinte na cadeia,
usando o hash resultante do bloco aceito como hash prévio;

Os nós sempre consideram a cadeia mais longa como correta e continuarão trabalhando para
estendê-la. Se dois nós transmitem versões diferentes do próximo bloco simultâneamente, alguns
nós podem receber um ou o outro primeiro. Neste caso, eles trabalham no primeiro que tiverem
recebido, mas salvam o outro ramo para o caso daquele se tornar mais longo. O empate será
resolvido quando a próxima prova de trabalho for encontrada e um ramo se tornar mais longo; os
nós que estão trabalhando no outro ramo irão então alternar para o ramo mais longo.

Novas transações transmitidas não precisam necessariamente alcançar todos os nós. Desde
que elas alcancem muitos nós, elas irão entrar no bloco em tempo. A transmissão de blocos
também tem tolerância a messagens perdidas. Se um nó não recebe um bloco, ele vai solicitá-lo
quando receber o bloco seguinte ao perceber que está faltando um.

6. Incentivo

Por convenção, a primeira transação em um bloco é uma transação especial que gera uma
nova moeda que será possuída pelo criador do bloco. Isto adiciona incentivo para os nós darem
suporte à rede, e provê uma forma de colocar em circulação as moedas inicialmente distribuídas,
desde que não existe autoridade central para emití-las. A adição sustentada de uma quantia
constante de novas moedas é análoga ao contexto de mineradores de ouro gastando recursos
para adicionar mais ouro em circulação. Em nosso caso, é o tempo de processamento e
eletricidade que são gastos.

O incentivo também pode ser financiado por meio de taxas de transação. Se a saída de valor
de uma transação é menor que o valor de entrada, a diferença é uma taxa de transação que será
adicionada como incentivo de valor no bloco que contém a transação. Uma vez predeterminado o
número de moedas que entrou em circulação, o incentivo pode ser convertido para ser
inteiramente composto de taxas de transação e ser completamente livre de inflação.

O incentivo pode ajudar a encorajar nós a permanecerem honestos. Se um atacante


ganancioso é capaz de acumular mais poder de processamento do que todos os nós honestos, ele

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
irá ter que escolher entre usar este poder para fraudar as pessoas roubando de volta pagamentos
que tiver efetuado, ou usando este poder para gerar novas moedas. Ele deveria achar mais
lucrativo jogar pelas regras, quando tais regras favorecem-no com mais moedas do que todos os
demais combinados, ao invés de minar o sistema e a validade da sua própria riqueza.

7. Recuperando espaço em disco

Assim que a última transação em uma moeda é "enterrada" sobre um número grande o
suficiente de blocos, as transações gastas anteriores a ela podem ser descartadas para salvar
espaço em disco. Para facilitar isso sem invalidar o hash do bloco, as transações são convertidas
em um hash em uma estrutura do tipo Árvore de Merkle16 [7][2][5], com somente a raiz incluída
no hash do bloco. Blocos antigos podem então serem compactados podando os ramos da árvore.
Os valores de hash interiores não precisam ser armazenados.

Bloco Bloco

Cabeçalho do bloco (hash do bloco) Cabeçalho do bloco (hash do bloco)


hash anterior nonce hash anterior nonce

hash raiz hash raiz

Hash01 Hash23 Hash01 Hash23

Hash0 Hash1 Hash2 Hash3 Hash2 Hash3

Tx0 Tx1 Tx2 Tx3 Tx3

Um cabeçalho de bloco sem transações terá algo em torno de 80 bytes. Se nós supomos que
blocos são gerados a cada 10 minutos, temos que 80 bytes * 6 * 24 * 365 = 4,2MB (quatro vírgula
dois megabytes) por ano. Como sistemas de computador são vendidos tipicamente com 2GB de
memória RAM em 2008, e segundo a Lei de Moore que prevê o crescimento corrente de 1,2GB
por ano, o armazenamento não deve ser um problema mesmo que os cabeçalhos dos blocos
precisem ser mantidos em memória.

8. Verificação simplificada de pagamento

É possível verificar pagamentos sem rodar uma rede completa de nós. Um usuário precisa
somente manter uma cópia dos cabeçalhos dos blocos da mais longa cadeia de prova de trabalho,

16
Em criptografia e ciência da computação, árvores de dispersão ou árvores de Merkle são um tipo de estrutura de
dados que contém uma árvore de informações resumidas sobre um pedaço maior de dados - por exemplo, um
arquivo - usado para verificar seu conteúdo. Árvores de Merkle são uma extensão das listas de dispersão, que por sua
vez são uma extensão de Hash. Fonte: https://pt.wikipedia.org/wiki/%C3%81rvores_de_Merkle

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
a qual ele pode obter pesquisando os nós da rede até estar convencido de que encontrou a cadeia
mais longa, e obter o ramo Merkle ligando a transação ao bloco que está com o tempo marcado
nele. Ele não pode verificar a transação por si mesmo, mas pode ligá-la a um ponto na cadeia, e
então ele poderá ver que a rede de nós a aceitou e os blocos adicionados depois dela aprofundam
a confirmação que a rede a aceitou.

Cadeia mais longa de prova de trabalho

Cabeçalho do bloco Cabeçalho do bloco Cabeçalho do bloco


Hash anterior nonce Hash anterior nonce Hash anterior nonce

Raiz Merkle Raiz Merkle Raiz Merkle

Hash01 Hash23
Ramo Merkle para Tx3

Hash2 Hash3

Tx3

Assim a verificação é confiável enquanto os nós honestos controlarem a rede, mas é mais
vulnerável se o controle da rede for tomado por um atacante. Enquanto os nós da rede podem
verificar transações por eles mesmos, o método simplificado pode ser enganado por transações
fabricadas por um atacante desde que ele possa continuar sustentando mais poder que a rede.
Uma estratégia para proteger contra isso seria aceitar alertas dos nós da rede quando detectarem
bloco inválido, comunicando ao software do usuário para baixar o bloco cheio e alertar transações
para confirmar inconsistências. Provavelmente, negócios que recebem pagamentos frequentes
irão, além disso, querer rodar seus próprios nós para uma maior independência de segurança e
verificação mais rápida.

9. Combinando e dividindo valores

Embora pudesse ser possível manusear moedas individualmente, seria difícil fazer uma
transação separada para cada centavo em uma transferência. Para permitir valores serem
divididos e combinados, transações contêm múltiplas entradas e saídas. Normalmente haverá
somente uma única entrada de uma transação anterior maior ou múltiplas entradas combinando
quantias menores, e ao menos duas saídas: uma para o pagamento, outra para o troco em
retorno, se houver, de volta ao emitente.

Transação
Entrada Saída

Entrada ...

...

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
Deveria ser notado que fan-out17, onde uma transação depende de várias transações, e
aquelas transações dependem de muitas outras mais, não é o problema aqui. Nunca existe a
necessidade de extrair uma cópia autônoma completa do histórico de transações.

10. Privacidade

O modelo bancário tradicional alcança um nível de privacidade limitando acesso à informação


para as partes envolvidas e ao terceiro garantidor da confiança. A necessidade de anunciar todas
as transações publicamente exclui tal método, mas a privacidade ainda pode ser mantida
quebrando o fluxo de informação em outra parte: mantendo as chaves públicas anônimas. O
público pode ver que alguém está enviando uma quantia para outras pessoas, mas sem a
informação ligando a transação a qualquer pessoa em específico. Isto é similar ao nível de
informação liberado por bolsas de valores, onde o tempo e tamanho das operações individuais - o
"tape" - é tornado público, mas sem contar quais eram as partes envolvidas.

Modelo de privacidade tradicional

Identidades Transações Terceiro Contraparte Público


Grantidor da
Confiança

Novo modelo de privacidade

Identidades Transações Público

Como uma barreira de segurança adicional, um novo par de chaves deve ser usado para cada
transação para evitar que elas sejam ligadas a um proprietário comum. Algumas conexões
continuarão inevitáveis como em transações multi-entrada, as quais necessariamente revelam que
suas entradas são posse do mesmo proprietário. O risco é que se o proprietário de uma chave é
revelado, por ligação poderia relevar outras transaçãos que pertencem ao mesmo proprietário.

11. Cálculos

Nós consideramos o cenário de um atacante tentando gerar uma cadeia alternativa mais
rápido que a cadeia honesta. Mesmo que isto seja conseguido, não deixa o sistema
completamente vulnerável a mudanças arbitrárias, como a criação de valor a partir do nada ou o
atacante se apoderar de dinheiro que nunca pertenceu a ele. Nós não irão aceitar uma transação
inválida como pagamento, e nós honestos nunca irão aceitar um bloco que as contenha. Um
atacante pode somente tentar mudar uma de suas próprias transações para obter de volta
dinheiro que ele tenha gasto recentemente. A corrida entre a cadeia honesta e uma cadeia
atacante pode ser caracterizada como um Passeio Aleatório. O evento de sucesso é a cadeia
honesta a ser estendida em mais um bloco, incrementando sua liderança por +1, e o evento de
falha é a cadeia do atacante ser estendida mais um bloco, reduzindo a diferença por -1. A
probabilidade de um atacante alcançar a cadeia honesta a partir de certo nível de déficit é análoga
ao Problema da Ruína do Apostador. Supondo que um apostador com crédito ilimitado comece
17
Até o momento desta tradução não consegui encontrar a melhor tradução para esta palavra “fan-out”, no contexto
da frase.

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
com um déficit e jogue potencialmente um número infinito de partidas para tentar alcançar um
empate. Nós podemos calcular a probabilidade dele nunca alcançar o empate, ou que um
atacante sempre empate com a cadeia honesta, conforme demonstrado a seguir [8]:

p = probalidade de um nó honesto encontrar o próximo bloco


q = probabilidade de um atacante encontrar o próximo bloco
z = probabilidade de um atacante nunca alcançar a partir de "z" blocos atrás

Dada nossa premissa que p > q, a probabilidade cai exponencialmente com o aumento do
número de blocos que o atacante precisa alcançar. Com as chances contra ele, se ele não tiver a
sorte de um grande progresso logo de início, suas chances tornam-se muito pequenas à medida
que ele cai ainda mais para trás.

Nós agora consideraremos quanto tempo o recipiente de uma nova transação precisa esperar
antes de ter certeza suficiente de que o emitente não poderá alterar a transação. Nós assumimos
que o emitente é um atacante que quer fazer o recipiente acreditar que ele o pagou por algum
tempo, então alterar a transação para pagar a ele mesmo de volta depois que tiver passado algum
tempo. O recipiente será alertado quando isso acontecer, mas o emitente espera que seja muito
tarde.

O recipiente gera um novo par de chaves e dá a chave pública para o emitente logo após
assinar. Isto previne o emitente de deixar uma cadeia de blocos previamente preparada antes do
tempo trabalhando constantemente até que ele tenha a sorte necessária de estar suficientemente
à frente e executar a transação naquele momento. Uma vez que a transação é enviada, o emitente
desonesto começa a trabalhar em segredo na cadeia paralela contendo uma versão alternativa da
sua transação.

O recipiente aguarda até que a transação tenha sido adicionada a um bloco e que "z" blocos
estejam conectados após este. Ele não sabe o montante exato de progresso que o atacante fez,
mas assumindo que os blocos honestos levaram o tempo médio esperado por bloco, o progresso
potencial do atacante será uma distribuição de Poisson com os seguintes valores esperados:

Para obter a probabilidade do atacante ainda conseguir alcançar, nós multiplicamos a


densidade de Poisson por cada quantia de progresso ele possa ter conseguido pela probabilidade
de ele alcançar a partir daquele ponto:

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
Rearranjando para evitar somar a cauda infinita da distribuição...

Conveterndo para código em linguagem C ...

#include <math.h>
double AttackerSuccessProbability(double q, int z)
{
double p = 1.0 - q;
double lambda = z * (q / p);
double sum = 1.0;
int i, k;
for (k = 0; k <= z; k++)
{
double poisson = exp(-lambda);
for (i = 1; i <= k; i++)
poisson *= lambda / i;
sum -= poisson * (1 - pow(q / p, z - k));
}
return sum;
}

Rodando alguns resultados, nós podemos ver que a probabilidade cai exponencialmente
em relação à "z".

q=0.1
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012
q=0.3
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006

Resolvendo para P menor que 0,1%...

P < 0.001
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340

12. Conclusão

Nós propusemos um sistema para transações eletrônicas sem depender de confiança. Nós
começamos com a estrutura convencional de moedas feitas de assinaturas digitais, as quais
proporcionam forte controle sobre propriedade, mas é incompleta sem uma forma de prevenir
os gastos duplos. Para resolver isso, nós propusemos uma rede ponto-a-ponto usando prova
de trabalho para registrar um histórico público de transações, que evoluem rapidamente para
um estado que é computacionalmente impraticável para um atacante modificar caso nós
honestos controlem 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 coordenação
mínima. Eles não precisam ser identificados, dado que as mensagens não são roteadas por
qualquer local em particular e somente precisam ser entregues na medida do melhor esforço.
Nós podem deixar e reintegrar a rede à vontade, aceitando que a cadeia de prova de trabalho
é a prova do que aconteceu enquanto estavam foram da rede. Eles votam com seu poder de
processamento, expressam sua aceitação dos blocos válidos trabalhando em estendê-los e
rejeitando blocos inválidos - recusando a trabalhar neles. Quaisquer regras necessárias e
incentivos podem ser reforçados com este sistema de consenso.

Referências18

[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.

18
Mantive – sem traduzir ou converter - o formato das referências do original para fins de precisão.

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br
[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.
[7] R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on
Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.
[8] W. Feller, "An introduction to probability theory and its applications," 1957.

Contribuições pela tradução

Utilize o endereço abaixo.

“Aquele que cede a liberdade essencial para obter um pouco de segurança temporária
não merece a liberdade, nem a segurança.” (Benjamin Franklin)
www.institutoverdaeeliberdade.com.br

Você também pode gostar