O Evangelho de Satoshi Nakamoto – Cap. 40 vers. 4

Boa noite, amigos!

Demorou mas chegamos. No versículo anterior vimos a parte 3. No de hoje a parte final da tradução de ‘Bitcoin: A Peer-to-Peer Eletronic Cash System‘.

 

CONTINUA APÓS A PUBLICIDADE

11. Cálculos

Consideramos o cenário de um atacante tentando gerar uma cadeia alternativa mais rápido que a cadeia honesta. Mesmo se isto for realizado, ele não joga o sistema à mudanças arbitrárias, como criar valor do nada ou tirar dinheiro que nunca pertenceu ao atacante. Os nodos não aceitarão uma transação inválida como pagamento, e os nodos honestos não irão aceitar um bloco que a contenha. Um atacante só pode tentar alterar uma de suas próprias transações para recuperar o dinheiro que gastou recentemente.

A corrida entre a cadeia honesta e a cadeia de um atacante pode ser caracterizada como uma caminhada aleatória binomial. O evento de sucesso é a cadeia honesta sendo estendida em um bloco, aumentando sua liderança em +1, e o evento falho é a cadeia do atacante sendo estendida em um bloco, reduzindo a lacuna em -1.

A probabilidade de um atacante se recuperar de um dado déficit é análoga ao problema da ruína do jogador. Suponha que um jogador com crédito ilimitado comece com um déficit e jogue potencialmente um número infinito de tentativas para tentar chegar ao ponto de equilíbrio. Podemos calcular a probabilidade de que ele chegue ao ponto de equilíbrio, ou que um invasor alcance a cadeia honesta, da seguinte maneira [8]:

CONTINUA APÓS A PUBLICIDADE

p = probabilidade de um nodo honesto encontrar o próximo bloco
q = probabilidade de um atacante encontrar o próximo bloco
qz= probabilidade de que o atacante alcance de z blocos atrás

Dada nossa suposição de que p>q, a probabilidade cai exponencialmente à medida que aumenta o número de blocos que o invasor precisa alcançar. Com as probabilidades contra ele, se ele não der um golpe de sorte para a frente logo no início, suas chances tornam-se cada vez menores à medida que ele fica para trás.

CONTINUA APÓS A PUBLICIDADE

Agora consideramos quanto tempo o destinatário de uma nova transação precisa esperar antes de ter certeza suficiente de que o remetente não pode alterar a transação. Presumimos que o remetente seja um atacante que deseja fazer o destinatário acreditar que o pagou por um tempo e, em seguida, mudar o pagamento para ele mesmo depois de algum tempo. O receptor será alertado quando isso acontecer, mas o remetente espera que seja tarde demais.

O receptor gera um novo par de chaves e fornece a chave pública ao remetente pouco antes de assinar. Isso evita que o remetente prepare uma cadeia de blocos com antecedência, trabalhando nela continuamente até que tenha a sorte de avançar o suficiente e, então, executar a transação naquele momento. Assim que a transação é enviada, o remetente desonesto começa a trabalhar em segredo em uma cadeia paralela contendo uma versão alternativa de sua transação.

O destinatário espera até que a transação seja adicionada a um bloco e os z blocos que tenham sido vinculados a ela. Ele não sabe a quantidade exata 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 valor esperado:

CONTINUA APÓS A PUBLICIDADE

Para obter a probabilidade de o atacante ainda conseguir alcançar agora, multiplicamos a densidade de Poisson para cada quantidade de progresso que ele poderia ter feito pela probabilidade de alcançar a partir daquele ponto:

CONTINUA APÓS A PUBLICIDADE

Reorganizando para evitar somar a cauda infinita da distribuição …

Convertendo para linguagem C …

#include 
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;
}

Executando alguns resultados, podemos ver a probabilidade cair exponencialmente com 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
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006

Resolvendo para P inferior a 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

Propusemos um sistema para transações eletrônicas sem depender de confiança. Começamos com a estrutura usual de moedas feitas de assinaturas digitais, que fornece um forte controle de propriedade, mas é incompleta sem uma forma de evitar gastos duplos. Para resolver isso, propusemos uma rede ponto a ponto usando prova de trabalho para registrar um histórico público de transações que rapidamente se torna computacionalmente impraticável para um atacante alterar se nodos honestos controlarem a maioria do poder da CPU. A rede é robusta em sua simplicidade não estruturada. Os nodos funcionam todos de uma vez com pouca coordenação. Eles não precisam ser identificados, uma vez que as mensagens não são roteadas para nenhum local específico e precisam ser entregues apenas na base do melhor esforço. Os nodos podem sair e se juntar à rede à vontade, aceitando a cadeia de prova de trabalho como prova do que aconteceu enquanto eles estavam fora. Eles votam com seu poder de CPU, expressando sua aceitação de blocos válidos trabalhando para estendê-los e rejeitando blocos inválidos recusando-se a trabalhar neles. Quaisquer regras e incentivos necessários podem ser aplicados com este mecanismo de consenso.

 

[8] W. Feller, “An introduction to probability theory and its applications,” 1957.

 

Terminada a tradução do Whitepaper do Bitcoin, uma das obras mais F#D@$ de todo criptoeste, e sem dúvidas a mais importante.

Compartilhe este artigo
@leonardobjahn Natural de Florianópolis, SC 27 anos Evangelista Bitcoin Graduando Administração na UFSC Professor particular e tradutor de Inglês
Sair da versão mobile