Somar o gerador a si mesmo treze vezes parece exigir doze somas. Exige cinco. E somá-lo a si mesmo um número com setenta e sete algarismos exige menos de quatrocentas operações. É esse encurtamento que torna o Bitcoin possível — e é a ausência de um encurtamento equivalente no caminho de volta que o torna seguro.
O método se chama dobrar-e-somar, e a receita é ler o número em binário. Treze, em binário, é 1101. Comece no bit da esquerda, com o ponto G na mão. Para cada bit seguinte, dobre o que você tem; se o bit for um, some G depois de dobrar. O segundo bit é um: dobre para 2G, some para 3G. O terceiro é zero: dobre para 6G, e mais nada. O quarto é um: dobre para 12G, some para 13G. Três dobras, duas somas, e chegou.
Para um número de 256 bits, são no máximo 256 dobras e, em média, 128 somas. Menos de quatrocentas operações onde a força bruta exigiria um número que não cabe nesta página. É a mesma economia da progressão geométrica: dobrar poucas vezes chega onde somar sempre não chegaria.

Só que essa receita, escrita exatamente assim, tem um defeito grave — e ele não está na matemática. Um bit igual a um custa uma dobra e uma soma; um bit igual a zero custa só a dobra. O tempo que a máquina leva, portanto, depende dos bits da chave privada. Quem consiga medir esse tempo com precisão, ou o consumo de energia do aparelho enquanto ele calcula, lê a chave sem quebrar nada.

Por isso nenhuma implementação séria roda a receita ingênua. A biblioteca que o Bitcoin Core usa, a libsecp256k1, executa uma sequência de operações que leva exatamente o mesmo tempo qualquer que seja a chave, fazendo o trabalho do bit zero mesmo quando ele é zero. Chama-se tempo constante, e é a diferença entre uma carteira de hardware bem feita e um enfeite.
Agora o caminho de volta. Dado o ponto kG e sabendo que a partida foi G, qual é o k? O problema tem nome — logaritmo discreto — e nenhuma solução geral melhor que a raiz quadrada do tamanho do grupo. Os dois métodos que alcançam essa raiz são o passo de bebê e passo de gigante, que troca memória por tempo, e o rô de Pollard, que praticamente não usa memória e paraleliza bem. Os dois são assunto do próximo módulo.
Raiz quadrada de 2^256 é 2^128, que é 34 seguido de 37 zeros. Vale fazer a conta com generosidade deliberada. Suponha que todo o poder de cálculo da rede do Bitcoin, algo perto de um sextilhão de operações por segundo, fosse redirecionado para isso, e finja que cada uma dessas operações é uma operação na curva — o que é falso por várias ordens de grandeza, porque uma operação na curva custa milhares de vezes mais que um hash. Mesmo com essa vantagem imaginária, a varredura levaria cerca de dez bilhões de anos. Corrigindo pela diferença real de custo, vai para a casa de 10^14 anos: quase dez mil vezes a idade do universo.

Guarde uma frase para o módulo seguinte, porque ela evita um mal-entendido caro. Essa conta vale para uma chave sorteada em todo o intervalo. Os desafios que existem na blockchain, e que este site monta, não atacam 2^256 nem 2^128: eles atacam intervalos deliberadamente pequenos, de setenta ou oitenta bits, onde a mesma raiz quadrada devolve um número que cabe num projeto de verdade. A matemática não fica mais fraca. O intervalo é que fica menor.
Falta uma peça para fechar a criptografia do Bitcoin: como esses pontos e esses números viram uma assinatura, e por que a verificação funciona. Na próxima aula, o ECDSA calculado passo a passo.