Relatório de incidente completo · 16 fontes · Anzen Lab

Quatro linhas de código.
Mais de 1.596 BTC perdidos.

Em março de 2021, uma compilação de firmware do COLDCARD parou de pedir números aleatórios ao seu chip de hardware e passou a usar software comum para calculá-los. Ninguém percebeu isso por cinco anos. Em julho de 2026, os invasores fizeram as contas e começaram a esvaziar as carteiras.

O custo da configuração
5 anos
a falha permaneceu em código totalmente público, sem ser detectada1
1.596+ BTC
confirmados como roubados de cerca de 7.300 endereços, e o número continua subindo7
41 min
o maior roubo individual: 1.083 BTC, cerca de 70 milhões de dólares na época9
1 em um trilhão
as probabilidades que um invasor tinha de vencer em um Mk3. O projeto previa uma chance em um número com 78 dígitos1
O que deu errado

Uma verificação de segurança que estava lá e não fez nada

01

Toda a proteção depende de um número que ninguém consegue adivinhar

Uma carteira de hardware executa várias tarefas. Ela mostra o que você está realmente assinando, em vez de pedir que confie na tela de um computador infectado, e mantém sua chave dentro de um chip construído para resistir a violações físicas. Cada uma dessas defesas assume que o número que originou sua chave não podia ser adivinhado. Se pudesse, um invasor nunca precisaria superar nenhuma delas. O conjunto do qual uma frase de 24 palavras é retirada contém aproximadamente um número para cada mil átomo no universo observável. Um conjunto desse tamanho não pode ser vasculhado. Esse é todo o modelo de segurança.

Detalhes técnicos

12 palavras carregam 128 bits de entropia, 24 carregam 256, mais um checksum do SHA-256 dessa entropia. O BIP-39 estende o resultado para a chave mestre do BIP-32.

Detalhes técnicos

12 palavras carregam 128 bits de entropia, 24 carregam 256, mais um checksum do SHA-256 dessa entropia. O BIP-39 estende o resultado para a chave mestre do BIP-32.

02

A COLDCARD parou de extrair daquele conjunto

Uma alteração de firmware em 2021 fez silenciosamente com que a carteira parasse de pedir aquele número ao seu chip de aleatoriedade dedicado e passasse a calcular um através de software comum. Lado a lado, este é o incidente completo:

Isso não é segurança reduzida em dois terços. Cada bit duplica o trabalho, portanto 88 bits a menos reduzem o trabalho por um fator de 2⁸⁸. Um trilhão é um número grande para uma pessoa e pequeno para alguém que aluga máquinas de alto desempenho para processá-lo.

Detalhes técnicos

A geração de seed mudou de ckcc.rng_bytes() para ngu.random.bytes(). A Coinkite estima cerca de 40 bits de espaço de busca restante no Mk3 e cerca de 72 no Mk4/Mk5/Q, em comparação com uma meta de 128 bits. Uma análise independente feita pela Block chega à mesma ordem (abaixo de 2⁴⁰·⁷ e abaixo de 2⁷३·³) e encontra condições mais restritas em que sobra muito menos.2

Detalhes técnicos

A geração de seed mudou de ckcc.rng_bytes() para ngu.random.bytes(). A Coinkite estima cerca de 40 bits de espaço de busca restante no Mk3 e cerca de 72 no Mk4/Mk5/Q, em comparação com uma meta de 128 bits. Uma análise independente feita pela Block chega à mesma ordem (abaixo de 2⁴⁰·⁷ e abaixo de 2⁷३·³) e encontra condições mais restritas em que sobra muito menos.2

De onde 24 palavras deveriam ser tiradas
115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936
De onde a COLDCARD realmente tirou
1,099,511,627,776
03

Porque o software não pode ser aleatório

Pense no que torna o lançamento de uma moeda imprevisível. A força do arremesso, a gravidade, uma corrente de ar de um ar-condicionado, leves tremores no chão. Dezenas de influências que você pode nomear e dezenas que não pode. Ninguém consegue calcular a trajetória, então ninguém pode prever o resultado. O software funciona de maneira diferente. Ele executa uma fórmula fixa sobre um punhado de valores iniciais e produz uma resposta fixa. Aqui, esses valores eram o número de série do chip e o tempo em que o dispositivo permaneceu ligado. Um invasor que descobre a receita e os ingredientes recalcula a saída em vez de adivinhá-la.

Detalhes técnicos

Com o RNG de hardware desativado, rng_get() vinculou-se ao PRNG Yasmarang do MicroPython, inicializado a partir de estado não secreto (UID, SysTick, RTC), e não coletou nova entropia após isso, permitindo que os candidatos fossem enumerados offline. A Coinkite não considera seeds misturadas com 50 ou mais lançamentos justos e privados em risco apenas por esse problema: 50 × log₂6 ≈ 129 bits.3

Detalhes técnicos

Com o RNG de hardware desativado, rng_get() vinculou-se ao PRNG Yasmarang do MicroPython, inicializado a partir de estado não secreto (UID, SysTick, RTC), e não coletou nova entropia após isso, permitindo que os candidatos fossem enumerados offline. A Coinkite não considera seeds misturadas com 50 ou mais lançamentos justos e privados em risco apenas por esse problema: 50 × log₂6 ≈ 129 bits.3

04

E a verificação destinada a impedir isso fez a pergunta errada

Havia uma proteção na compilação, escrita especificamente para impedir que o firmware fosse distribuído sem o gerador de hardware. Ela perguntava se uma configuração existia, não se a configuração estava ativada. A configuração existia e estava desativada. A proteção permaneceu em silêncio, a compilação não relatou erros e o firmware foi enviado.

Detalhes técnicos

#ifndef testa apenas a definição. A configuração da placa definiu MICROPY_HW_ENABLE_RNG como 0, definido e desativado, portanto o #error nunca foi acionado e o vinculador resolveu rng_get() para o fallback de software.3

Detalhes técnicos

#ifndef testa apenas a definição. A configuração da placa definiu MICROPY_HW_ENABLE_RNG como 0, definido e desativado, portanto o #error nunca foi acionado e o vinculador resolveu rng_get() para o fallback de software.3

O defeito, citado do código-fonte.3

05

Nada nisso pareceu errado por cinco anos

Uma frase de recuperação fraca parece exatamente com uma forte. Vinte e quatro palavras comuns, a soma de verificação correta, um dispositivo que se comporta normalmente. Nada avisa na tela e nenhum erro ocorre na compilação. O código-fonte esteve público o tempo todo. Lê-lo ainda exigia que alguém abrisse aquele arquivo específico.

Detalhes técnicos

O comprimento da saída, a ausência de zeros e a não repetição passam em um PRNG fraco, de modo que os testes básicos habituais também não poderiam ter detectado isso.

Detalhes técnicos

O comprimento da saída, a ausência de zeros e a não repetição passam em um PRNG fraco, de modo que os testes básicos habituais também não poderiam ter detectado isso.

06

Então alguém fez os cálculos

Eles nunca tocaram em um único dispositivo. Eles geraram as frases prováveis em suas próprias máquinas, descobriram quais endereços Bitcoin cada uma produziria e verificaram esses endereços em relação ao blockchain público. Cada endereço com saldo foi esvaziado. A carteira que estava guardada sem uso em uma gaveta desde 2022 estava exatamente tão exposta quanto uma em uso diário.

Detalhes técnicos

Os candidatos são derivados offline via BIP-39/BIP-32; apenas a consulta final de saldo acessa a rede, portanto, não há nenhum sinal do lado da vítima com antecedência.3

Detalhes técnicos

Os candidatos são derivados offline via BIP-39/BIP-32; apenas a consulta final de saldo acessa a rede, portanto, não há nenhum sinal do lado da vítima com antecedência.3

Esta página não é uma comemoração de vitória.

A Coinkite divulgou a falha, publicou um relatório técnico e lançou uma correção. Pesquisadores externos puderam reconstruir o que aconteceu porque o COLDCARD é de código aberto.

Uma advertência sobre as estimativas: elas descrevem o esforço de adivinhação que um atacante enfrenta sob as suposições atuais, e não um cronômetro. Ninguém pode dizer quanto tempo uma carteira específica levaria para ser quebrada.2

Se você possui uma COLDCARD

Leia isto antes de qualquer outra coisa

O que você precisa fazer depende de qual dispositivo você estava usando quando a frase de recuperação foi criada pela primeira vez, e não de qual você possui hoje.

Assuma que isso ainda está acontecendo. As frases tornaram-se adivinháveis em 2021 e o método agora é público, então qualquer pessoa pode executar a mesma busca. Não há correção que resolva isso de fora, e nenhum motivo para um invasor parar. Se você for afetado, a premissa segura é que o tempo é a única coisa entre você e eles.

Mk2 e Mk3: mova suas moedas agora

O intervalo afetado é o firmware 4.0.1 até 4.1.9. A versão 4.2.0 corrige a criação de novas frases, mas nenhuma atualização pode voltar no tempo e adicionar aleatoriedade a uma frase que já existe. Crie uma nova carteira em um dispositivo em que você confia e transfira seus fundos.1

Mk4 e Mk5: verifique a versão do firmware

Se a frase foi criada em um firmware anterior ao 5.6.0 (ou 6.6.0X em compilações Edge), atualize, crie uma carteira totalmente nova no firmware atualizado e, em seguida, mova seus fundos. Apenas atualizar o dispositivo não repara a frase antiga.1

Q: o mesmo, o limite é 1.5.0Q

Atualize para a versão 1.5.0Q ou posterior, ou 6.6.0QX em compilações Edge, crie uma nova carteira, anote e teste o backup, envie uma pequena transação de teste e, em seguida, mova o restante.1

Atualizar o firmware da COLDCARD corrige uma frase de recuperação que eu já possuo?

Como descubro qual firmware gerou a minha frase de recuperação da COLDCARD?

Como faço para verificar se meu endereço foi pego nisso?

Lançamentos de dados ou uma passphrase protegem uma frase de recuperação do COLDCARD?

O aviso da Coinkite cobre todas as COLDCARD afetadas?

Aviso técnico oficial da CoinkiteMude para uma carteira nova em um dispositivo em que você já confia e envie uma pequena transação de teste antes de migrar tudo. Guarde as evidências públicas (IDs de transação, endereços, carimbos de data/hora) e nunca um segredo. Qualquer pessoa que se ofereça para recuperar seus fundos é um segundo roubo em andamento, e esse serviço não existe. A escolha do próximo hardware pode esperar até que suas moedas estejam seguras.
E se você possui um OneKey

Nenhum dispositivo OneKey é afetado

Nenhum modelo que já enviamos apresenta isso. Nosso firmware não possui nenhuma dependência do libngu, Coinkite, COLDCARD ou CKCC, portanto o caminho de código que falhou não está presente para ser alcançado, e você mesmo pode verificar isso em nossos repositórios. Em nosso hardware atual, a chave vem do gerador verdadeiramente aleatório dentro de um elemento seguro certificado, nunca de software no processador principal. Essa substituição foi o que causou essa falha.

Não afetados
OneKey Pro
OneKey Classic 1S
OneKey Classic 1S Pure
OneKey Touch
OneKey Classic
OneKey Mini

Também não aceitamos isso cegamente. Quando a notícia estourou, o Anzen Lab rastreou nossa aleatoriedade de ponta a ponta (de onde ela vem, o que a chama e as configurações de compilação que determinam qual versão chega ao seu dispositivo) e publicou os arquivos exatos que eles verificaram.12

Ler a nova verificação do Anzen Lab
A pergunta que você realmente está fazendo

Isso poderia ter acontecido com uma OneKey?

Esta falha exigia que três coisas diferentes fossem verdadeiras ao mesmo tempo. Em uma OneKey nenhuma delas é verdadeira, e você mesmo pode verificar todas as três.

De onde vem a nossa

Então, de onde vem a aleatoriedade da OneKey?

Gerada dentro de um chip certificado EAL 6+

As suas chaves são criadas e mantidas dentro de um chip dedicado e resistente a violações, e não no processador de uso geral que executa todo o resto. EAL 6+ é o nível de garantia utilizado em cartões de pagamento e de identidade.

Aleatoriedade que monitora a si mesma

Esse chip gera aleatoriedade a partir de ruído físico real e testa continuamente sua própria saída. Se a aleatoriedade começar a apresentar falhas, o chip percebe em vez de continuar funcionando silenciosamente.

Fomos lá e reexaminamos a nossa

Após as notícias sobre o COLDCARD, o Anzen Lab rastreou nossa própria aleatoriedade do início ao fim (de onde ela vem, o que realmente a chama e as configurações de compilação que decidem qual versão acaba no seu dispositivo) e publicou os arquivos exatos que eles examinaram.11

OneKey Pro's EAL 6+ certified secure element
EAL 6+ Badge
Cada transação, protegida por chips certificados EAL 6+
Onde a aleatoriedade é gerada
Elemento seguro
THD89
Nível de garantia
Certificado EAL 6+
Fonte de entropia
TRNG de hardware, autoteste
Saída certificada contra
BSI AIS 20 / 31
Reauditado após este incidente
Anzen Lab, código-fonte publicado
Como o OneKey é construído e quem o verifica

Quatro verificações em cada OneKey, e nenhuma delas confia nas outras três

Qualquer uma delas pode falhar em algum ponto. O objetivo é que todas as quatro teriam que falhar na mesma coisa. A COLDCARD não tinha essa redundância: uma única configuração de compilação não verificada foi suficiente.

01

Código aberto que você pode realmente verificar

Nosso firmware e nossos aplicativos são públicos no GitHub, e nossas compilações são reproduzíveis, o que significa que você mesmo pode recompilar o código e confirmar que ele produz exatamente o software em execução no seu dispositivo. Esse é o passo que detecta um problema de "código certo, versão errada".

OneKey no GitHub
02
SlowMist

Especialistas externos nos verificam, oficialmente

A empresa de segurança SlowMist nos audita e publica os relatórios. Avaliações separadas cobrem o OneKey Pro, o Classic 1S e nosso SDK. Nossas práticas de segurança são certificadas pela ISO/IEC 27001, e a linha Pro e Classic 1S é certificada contra a norma EN 18031 por um órgão nomeado pela União Europeia. Tudo publicado, nada autoavaliado.13

Leia o resumo da auditoria da SlowMist
03

Uma equipe paga para quebrar nossos próprios produtos

O Anzen Lab é nossa equipe interna de segurança focada em hardware, firmware e engenharia de segurança de aplicativos, trabalhando em conjunto com um grupo rotativo de pesquisadores externos. O trabalho deles é quebrar carteiras de hardware, incluindo as nossas, antes que qualquer coisa seja lançada. Quando essa história veio à tona, eles reexaminaram a aleatoriedade da OneKey de ponta a ponta e publicaram exatamente quais arquivos verificaram.11

Leia a análise do Anzen Lab
04

Pagamos a estranhos para encontrarem nossos erros

Qualquer pessoa pode nos relatar uma falha em caráter privado, por meio do nosso programa público no BugRap ou diretamente em [email protected], e ser remunerada por isso. A gravidade decide o pagamento, pontuada pelo CVSS. O objetivo principal é tornar o ato de nos informar mais atraente do que vendê-la.15

OneKey no BugRap
entro.tools · Desenvolvido por nosso fundador

Teste a carteira em sua mão

O entro.tools é uma ferramenta gratuita de código aberto que lê os números aleatórios reais provenientes de uma carteira de hardware e executa os testes padrão de integridade estatística neles, diretamente no seu navegador, via USB, sem enviar nada para lugar nenhum e sem exigir atualização de firmware.

Funciona tanto na Trezor quanto na KeepKey, além dos nossos próprios dispositivos, para que você possa compará-los lado a lado em vez de confiar na afirmação de um único fabricante.
Como é executado
No seu navegador, via WebUSB
Testes aplicados
FIPS 140-2, NIST SP 800-22 / 90B
Seus dados
Nunca saem da página
Atualização de firmware
Não necessária
Verificação de Entropia

Executa testes de integridade FIPS 140-2, NIST SP 800-22 e SP 800-90B localmente via WebUSB (Chrome ou Edge para desktop). O dispositivo pede para exportar entropia, um lote de números aleatórios que acabou de gerar, nunca sua frase de recuperação.16

O teste universal de Maurer precisa de pelo menos 387.840 bits; abaixo disso o relatório o marca como ignorado em vez de omiti-lo silenciosamente.16

Quais carteiras podem ser verificadas

Se um terceiro consegue ler os números aleatórios brutos de um dispositivo. Esta é uma dimensão restrita. Veja a nota abaixo dela.

OneKey
Verificável por você mesmo
Todos os modelos, firmware padrão16
Trezor
Verificável por você mesmo
Todos os modelos, protocolo de comunicação compartilhado16
KeepKey
Verificável por você mesmo
Família de protocolo de comunicação da Trezor16
Ledger
Confie no fornecedor
Elemento seguro fechado; nenhum comando de host expõe números aleatórios brutos16
BitBox02
Confie no fornecedor
A solicitação de números aleatórios do protocolo foi removida pelo fornecedor16
Blockstream Jade
Confie no fornecedor
O host só pode adicionar entropia; não há como ler a fonte de volta16
COLDCARD
Confie no fornecedor
Possui USB, mas seu protocolo não contém nenhum comando de entropia16
Keystone
Confie no fornecedor
Isolada de ar (air-gapped) por design; USB carrega apenas informações do dispositivo e atualizações de firmware16
"Não pode ser testado" e "inseguro" são afirmações diferentes. Elementos seguros fechados seguem seu próprio caminho de certificação. Um resultado aprovado prova apenas que nenhum defeito estatístico aparece hoje. Ele não pode provar a imprevisibilidade criptográfica e não diz nada sobre a aleatoriedade usada no dia em que sua carteira foi criada.
Ainda com dúvidas

Perguntas que isso levanta para todo o resto do setor

A OneKey é afetada pela falha de entropia da COLDCARD?

Quais carteiras de hardware são afetadas pela falha de entropia da COLDCARD?

Posso testar a aleatoriedade da minha própria carteira?

Como posso avaliar se uma carteira de hardware é confiável?

Segurança que você pode verificar, não segurança que exigem que você acredite.

Código aberto e reproduzível, auditado por terceiros, testado por nosso próprio laboratório e recompensado financeiramente quando alguém encontra uma brecha. Estes são os dispositivos sobre os quais esta discussão trata.

Cold Storage Weeks
Até $50 em Bitcoin em cada dispositivo, até 17 de agosto.

Referências

Fontes abaixo, recuperadas em 6 de agosto de 2026. O aviso próprio e o relatório técnico da Coinkite aparecem primeiro, seguidos por análises independentes de código-fonte e contabilidade on-chain. Os números de perdas ainda estão sendo revisados para cima: a Galaxy Research confirmou 1.596 BTC em 4 de agosto e estimou as perdas suspeitas em cerca de 2.055 BTC.