Intermediário Aula 6 4 min de leitura

Formatos de chave: WIF, hex, comprimida e não comprimida

A mesma chave aparece de quatro jeitos diferentes, e confundi-los faz uma carteira parecer vazia sem que nada tenha sumido.

Uma das mensagens mais repetidas nos fóruns de suporte começa sempre igual: importei minha chave numa carteira nova e o saldo veio zerado. Quase nunca sumiu alguma coisa. O que mudou foi a embalagem do mesmo número, e a carteira foi olhar na porta errada.

A chave privada, você já sabe, é um número de 256 bits. A forma mais crua de escrevê-lo é em hexadecimal: sessenta e quatro caracteres, de 0 a 9 e de a a f, cada dois deles valendo um byte. É o número e nada mais — sem versão, sem conferência, sem aviso de erro se você trocar um caractere.

Por isso existe o WIF, de Wallet Import Format. É a mesma receita do endereço, aplicada à chave privada: acrescenta-se um byte de versão na frente, calcula-se um checksum de quatro bytes com SHA-256 duas vezes, converte-se tudo para base 58. O resultado é uma cadeia que começa com o algarismo 5 e tem cinquenta e um caracteres, ou começa com K ou L e tem cinquenta e dois. A diferença entre esses dois casos é o assunto do resto da aula.

É o mesmo metal nos três embrulhos. Só o papel mudou.

Volte à curva por um instante. A chave pública é um ponto, e um ponto tem duas coordenadas, x e y. Escrever as duas por extenso dá sessenta e cinco bytes: um byte de marcação e trinta e dois para cada coordenada. É a forma não comprimida, a única que existia quando o Bitcoin nasceu.

Só que a equação da curva permite economizar metade disso. Dado o x, a equação y² = x³ + 7 devolve o y ao quadrado, e quem sabe o quadrado sabe o valor a menos de um detalhe: existem duas raízes, uma par e uma ímpar. Basta então guardar o x inteiro e um único bit dizendo qual das duas é a certa. A chave pública comprimida tem trinta e três bytes e começa com 02 ou 03 — exatamente esse bit. A não comprimida começa com 04.

Sabendo a altura, restam duas possibilidades. Um bit só diz qual delas.

Aqui está a armadilha inteira. As duas formas descrevem o mesmo ponto, mas são sequências de bytes diferentes — e o endereço, como a Aula 3 mostrou, é o hash da sequência de bytes. Hashes diferentes, endereços diferentes. A mesma chave privada, portanto, controla dois endereços que não se parecem em nada, e o dinheiro que está em um não aparece no outro.

O WIF avisa qual dos dois a carteira deve montar. Quando a chave privada vai ser usada na forma comprimida, acrescenta-se um byte 01 no fim antes de calcular o checksum, e é esse byte extra que empurra o resultado de cinquenta e um para cinquenta e dois caracteres e troca o 5 inicial por K ou por L. O primeiro caractere de um WIF não é enfeite: é a instrução de como ler o resto.

A troca aconteceu em 2012, quando o Bitcoin Core passou a gerar chaves comprimidas por padrão. A economia é real: trinta e dois bytes a menos em cada entrada de transação, repetidos por bilhões de transações. As chaves de antes continuam válidas, e é por isso que carteiras sérias, ao importar, varrem os dois caminhos em vez de escolher um.

A mesma chave abre as duas portas. O que você procurava estava atrás da outra.

Há ainda duas embalagens que aparecem de vez em quando. A chave criptografada pelo padrão BIP-38 começa com 6P e só vira chave de verdade depois de uma senha — foi o que as moedas físicas de Mike Caldwell, as Casascius, imprimiam sob um holograma entre 2011 e 2013. E o formato mini, de trinta caracteres começando com S, cabia no espaço apertado dessas mesmas moedas.

Nada disso muda a chave. Hexadecimal, WIF, comprimida, criptografada: são maneiras de escrever, guardar e transportar o mesmo número, com mais ou menos proteção contra erro de digitação. Confundir a embalagem com o conteúdo é o que faz um saldo parecer perdido — e conferir o primeiro caractere costuma resolver o susto em dez segundos.

Uma carteira de verdade, porém, não guarda uma chave. Guarda uma semente, da qual saem milhares de chaves em sequência, todas recuperáveis a partir de doze palavras. Como esse truque funciona, e por que ele mudou a forma de fazer backup, é o assunto do próximo módulo.