Alguém tem esvaziado carteiras de Bitcoin que nunca deveriam ser acessíveis.
As moedas estavam em dispositivos Coldcard, carteiras de hardware da fabricante canadense Coinkite, do tipo que nunca se conectam à internet.
Sem link de phishing. Sem malware. Sem laptop roubado. Os atacantes simplesmente descobriram quais eram as chaves privadas.
A Galaxy Research já rastreou mais de 1.596 BTC roubados em três ondas confirmadas, com uma quarta onda suspeita que elevaria o total para aproximadamente 2.055 BTC — cerca de US$ 130 milhões nos preços atuais (R$ 667 milhões).
Leia também: Coldcard: Falha de segurança em carteira de Bitcoin gera R$ 578 milhões em perdas
Uma varredura movimentou US$ 70 milhões em 41 minutos. A Coinkite afirma que pelo menos 15 atacantes diferentes se envolveram.
A empresa publicou um documento técnico explicativo em 1º de agosto, detalhando o que deu errado. É um documento excepcionalmente franco, e a versão resumida é que a carteira estava usando dados viciados por oito anos sem que ninguém percebesse.
Zero ainda é algo
Em 2021, a Coinkite transferiu a criptografia da Coldcard para a libsecp256k1, a mesma biblioteca que o Bitcoin Core usa. Uma decisão acertada. A integração é onde a falha ocorreu.
A migração discretamente redirecionou a geração de seeds do gerador de números aleatórios de hardware da própria Coldcard para a alternativa de software do MicroPython — um pequeno algoritmo chamado Yasmarang que existe para dispositivos sem um chip de aleatoriedade.
A Coldcard tem um chip de aleatoriedade. Ele simplesmente parou de ser solicitado.
A razão é quase pequena demais para acreditar. Um “build guard” usava #ifndef, que verifica se uma configuração existe em vez de verificar se está ativada.
A Coinkite havia definido essa configuração como zero, significando “desativada”. Como zero ainda é considerado “definido”, a verificação de segurança passou e a construção foi concluída.
Ambas as versões da função tinham assinaturas idênticas, então nada parecia errado.
“A maior parte da aleatoriedade na COLDCARD vinha de um PRNG que eu não sabia que estava realmente na base do código-fonte”, escreveu a Coinkite, referindo-se a um gerador de números pseudoaleatórios — software que produz números que parecem aleatórios, mas seguem uma receita fixa a partir de um valor inicial.
Alimente a receita com o mesmo valor inicial e você obterá a mesma saída. Todas as vezes.
Em dispositivos Mk2 e Mk3 que executam o firmware 4.0.1 a 4.1.9, esse valor inicial vinha do número de série do chip e de seu relógio.
A Coinkite estima o espaço de busca resultante em cerca de 40 bits. Modelos mais novos misturavam um pouco de entropia do elemento seguro, elevando-os para aproximadamente 72 bits.
Nenhum dos dois atinge 128, o alvo.
A diferença importa mais do que parece. Bits são expoentes. Um espaço de busca de 128 bits contém mais combinações do que átomos no universo observável, e ninguém o está pesquisando.
Quarenta bits é cerca de um trilhão, um número que um laptop decente pode processar. Cada bit que você perde reduz o trabalho pela metade.
A equipe de engenharia da Block, que publicou sua própria análise, estimou o espaço de busca efetivo do elemento seguro dos dispositivos mais novos em 2^32 candidatos, com uma média de cerca de 2^31 tentativas.
Sua avaliação para as placas mais antigas é mais direta: para um ID de dispositivo conhecido, estado do temporizador e histórico de chamadas, a geração da carteira é determinística.
E “determinístico” é o oposto de “aleatório”, que é essencial para a criptografia.
Não “fraco”. Previsível.
A Coinkite suspeita que foi descoberta por máquina. “Temos que assumir que alguém usou inteligência artificial (IA) para revisar versões anteriores do nosso firmware e tropeçou neste problema”, escreveu a empresa, acrescentando que recentemente havia executado um dos melhores modelos de IA disponíveis no mesmo código e não encontrou nada.
“Ambos, atacantes e defensores, têm as mesmas ferramentas de IA, mas hoje ela não nos ajudou, e só ajudou os malfeitores.”
O firmware corrigido está disponível para todos os modelos afetados. Ele não repara as seeds existentes; essas carteiras precisam ser regeneradas e os fundos, movidos.
O que a entropia realmente é
Entropia é a medida do quanto um atacante não sabe.
Em outras palavras, é basicamente incerteza, contada em bits. Um bit é um lançamento de moeda: dois resultados, e um adivinhador acerta metade das vezes. Dez bits são 1.024 resultados. Cada bit duplica a carga de trabalho do adivinhador.
Uma carteira de Bitcoin é um número muito grande mantido em segredo. O endereço para o qual as pessoas enviam moedas é derivado dele matematicamente, e a derivação funciona apenas em um sentido — você pode ir da chave para o endereço, mas nunca voltar.
Então, a segurança de cada carteira repousa em uma questão: quantos números um atacante teria que tentar?
Se o número foi escolhido com 128 bits de entropia, a resposta é “mais do que a física permite”. Se foi escolhido com 40, a resposta é “dê-me algum tempo”.
Esta é a mesma propriedade que torna a ameaça da computação quântica digna de discussão — uma máquina quântica atacaria a matemática que liga a chave ao endereço. O bug da Coldcard nunca precisou disso. Ele tornou as chaves adivinháveis antes mesmo que a matemática fosse envolvida.
Leia também: O que é computação quântica? Um guia para iniciantes sobre o computador do futuro
É aqui que o vocabulário fica escorregadio. Um gerador pseudoaleatório produz uma saída que passa em testes estatísticos de aleatoriedade, ou seja, basicamente nada que uma planilha sinalizaria. Essa saída ainda é totalmente determinada pelo seu valor inicial. Parece aleatório, mas não é.
Aleatoriedade estatística e imprevisibilidade criptográfica são propriedades diferentes, e a saída da Coldcard teria passado no primeiro teste, falhando completamente no segundo.
A verdadeira aleatoriedade deve vir de ruído físico: instabilidade elétrica em um circuito, flutuação térmica, decaimento radioativo. Era para isso que servia o chip de hardware da Coldcard. Esse é o chip que o “build flag” desconectou.
Então Luke Dashjr trouxe à tona os dados
Enquanto os usuários se apressavam para regenerar seeds, muitos buscaram a óbvia solução de baixa tecnologia. Coldcards permitem que você jogue dados físicos e insira os resultados como entropia.
As próprias orientações da Coinkite tratam as seeds criadas com pelo menos 50 lançamentos de dados independentes e privados como não estando em risco devido ao bug.
Pode parecer bobagem, mas a empresa realmente vende um saco com “100 dados pequenos e fofos” para facilitar todo o processo.
Em 31 de julho, o desenvolvedor do Bitcoin Core, Luke Dashjr, publicou um aviso: “Muitas pessoas sugerindo/usando dados para mitigar a vulnerabilidade da Coldcard. Observe que dados comuns não são projetados para serem criptograficamente seguros. Se você for fazer isso, provavelmente deveria comprar dados de cassino de precisão. E mesmo assim, tenha outra fonte de entropia.”
O Cripto Twitter não reagiu com calma.
“Haha, agora você nem pode jogar dados. A autocustódia acabou…”, escreveu um usuário.
Provavelmente a resposta mais útil veio com aritmética. O desenvolvedor Justin Sharp analisou os números de exatamente quanto um dado ruim custa:
“Exagero. Um d6 perfeito dá 2,585 bits por lançamento. Um dado visivelmente viciado, por exemplo, com uma face caindo 20% das vezes em vez de 16,7%, ainda dá cerca de 2,55 bits. Em 99 lançamentos, essa é a diferença entre ~256 bits e ~252 bits de entropia.”
Quatro bits de 256. Essa é toda a penalidade para um dado visivelmente injusto.
Dashjr não está errado ao dizer que dados baratos têm um viés mensurável — os pips moldados por injeção removem quantidades ligeiramente diferentes de plástico de cada face, o que é precisamente o motivo pelo qual os cassinos usam dados de precisão preenchidos.
Ele está certo sobre a física e errado sobre os riscos. Perder quatro bits de 256 o deixa com 252. O bug da Coldcard deixou os usuários com 40.
Há um argumento mais afiado embutido em seu conselho, no entanto, e não se trata de tolerância de fabricação. Trata-se de não confiar em uma única fonte.
A falha da Coldcard não foi que sua entropia fosse ligeiramente tendenciosa — foi que um componente parou silenciosamente de contribuir e nada o detectou.
O que fazer a respeito
Se você gerou uma seed em uma Coldcard afetada sem lançamentos de dados (realmente) ou uma senha forte BIP-39, essa seed está comprometida.
Atualize o firmware, gere uma nova seed, verifique a impressão digital, envie uma transação de teste e, em seguida, mova tudo. O aviso da Coinkite detalha modelo por modelo.
As seeds exportadas carregam a falha com elas — mover uma seed ruim para um aplicativo de carteira diferente não resolve nada.
Para todos os outros, a lição não é que as carteiras de hardware estão quebradas ou que os dados são uma armadilha.
É que “aleatório” é uma afirmação, e as afirmações precisam ser verificadas. O código-fonte da Coldcard esteve público o tempo todo. O gerador de números aleatórios de hardware pretendido estava lá no binário.
Os revisores confirmaram que ele existia e nunca confirmaram que o gerador de seeds realmente o chamava.
Oito anos de auditorias analisaram o código certo. Ninguém verificou se ele estava funcionando.
* Traduzido e editado com autorização do Decrypt.
Se você quer investir em criptomoedas com segurança, o Mercado Bitcoin oferece um benefício especial aos nossos leitores: use o cupom PORTAL250 no cadastro e ganhe R$ 50 de bônus em Bitcoin ao comprar R$ 250 em ativos. Clique aqui para abrir sua conta.
O post Coldcard: A falha de segurança na carteira física de Bitcoin explicada apareceu primeiro em Portal do Bitcoin.