Avançado Aula 5 4 min de leitura

GPU, ASIC e a diferença entre 2^40 e 2^70

Paralelizar resolve muito e não resolve tudo. Cada bit a mais dobra o problema, e a lista de hardware acaba antes dos bits.

Um processador comum, rodando um programa bem escrito, testa algo em torno de alguns milhões de chaves por segundo. Uma placa de vídeo moderna testa bilhões. A diferença não vem de a placa ser mais rápida — o núcleo dela é mais lento que o do processador — e sim de haver milhares deles.

É a natureza do problema que permite isso. Testar o candidato número um bilhão não depende em nada do resultado do candidato número novecentos e noventa e nove milhões. Cada tentativa é independente das outras, e problemas assim são o caso ideal para uma máquina com dezesseis mil núcleos pequenos em vez de dezesseis grandes.

Dezesseis mil mãos pequenas fazem, juntas, o que dezesseis mãos grandes não fazem.

Vale ser específico sobre o que a placa realmente faz depressa. A parte cara é a aritmética no corpo finito, sobretudo a inversão modular, e o ganho grande veio de um truque de organização: processar centenas ou milhares de pontos em lote, com uma única inversão compartilhada entre todos. O resto — os hashes, as comparações — é barato. Programas como o keyhunt e o VanitySearch, que o próximo módulo apresenta, são em boa medida implementações cuidadosas dessa ideia.

Agora a pergunta que todo mundo faz: e um ASIC? Se existe chip dedicado para mineração, por que não para busca de chaves?

A resposta tem duas partes, e as duas são interessantes. A primeira é que os ASICs de mineração não servem: eles calculam SHA-256 sobre um cabeçalho de oitenta bytes, e nada mais. Não sabem multiplicar pontos numa curva, não sabem fazer inversão modular, e não há atualização de software que os ensine — a lógica está gravada no silício.

A segunda é que um ASIC feito de propósito para a curva secp256k1 é tecnicamente possível e economicamente difícil. Projetar e fabricar um chip custa milhões de dólares e leva mais de um ano, e o resultado serve para uma tarefa só. Um minerador amortiza esse investimento com receita contínua; quem procura uma chave específica tem um prêmio único e incerto, que pode ser levado por outra pessoa no dia anterior à entrega do chip. É por isso que, na prática, o mundo dos desafios roda em placas de vídeo alugadas ou compradas de segunda mão.

O molde custa uma fortuna e serve para uma peça só.

Com isso na mesa, a distância entre 2^40 e 2^70 fica clara. Quarenta bits são um trilhão de candidatos: uma placa de vídeo resolve em minutos, e um notebook resolve em horas. Cinquenta bits são mil vezes mais: horas numa placa. Sessenta bits são mais mil vezes: semanas. Setenta bits são outras mil vezes: os seis mil anos de uma placa só, que a Aula 2 calculou.

Repare no formato dessa escada. Não é que setenta seja quase o dobro de quarenta. É que setenta é um bilhão de vezes quarenta. Cada dez bits multiplicam por mil, e três degraus de dez bits separam uma tarde de trabalho de um esforço que exige uma organização inteira.

Três degraus acima, o mesmo caminho já não é o mesmo caminho.

E é por isso que o progresso é lento e previsível. O hardware melhora, mas melhora por fatores de dois ou três a cada geração, e cada fator de dois compra exatamente um bit. Uma placa dez vezes mais rápida que a de hoje avança pouco mais de três bits na fronteira. Nenhuma geração de hardware vai transformar oitenta bits em algo fácil, e nada no horizonte ameaça os 256 bits de uma chave sorteada direito.

Uma última observação, que prepara a aula seguinte. Todas as contas deste módulo supõem uma única operação varrendo o intervalo do começo ao fim. Quando muita gente procura ao mesmo tempo, sem combinar nada, quase todo esse trabalho é repetido: dois mil computadores testando os mesmos candidatos valem por um. Organizar a divisão é o que transforma esforço somado em esforço útil — e é o assunto da próxima aula.