Escolar Documentos
Profissional Documentos
Cultura Documentos
Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org
Resumo
1. Introdução
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.
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.
Verifica Verifica
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.
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
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
Bloco Bloco
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 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.
“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.
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
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.
É 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.
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.
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
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]:
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:
“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...
#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
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
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.
“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