Como as carteiras OneKey geram sua frase de recuperação — e de onde vem a aleatoriedade

Principais Resultados
- A segurança de uma carteira começa na entropia: bits aleatórios imprevisíveis capturados no momento da criação, que a frase de recuperação apenas codifica de forma legível.
- Se a entropia for previsível na criação, nenhum PIN, forma de backup ou derivação de endereço consegue reparar o problema depois.
- Cada modelo OneKey obtém sua aleatoriedade de uma fonte de hardware: TRNG do THD89 (Pro, Classic 1S, Classic 1S Pure), TRNG do ATECC608A (Classic) ou TRNG do STM32 MCU (Mini).
- O problema em discussão vem de uma configuração incorreta do PRNG Yasmarang em
libngu; os caminhos de firmware relevantes da OneKey não usamlibngu, Coinkite, Coldcard nem CKCC, e auditorias confirmam que eles realmente chamam o TRNG de hardware ou do secure element. - Uma frase de recuperação vazada permite que qualquer pessoa restaure a carteira, e uma frase perdida não pode ser recuperada por nenhum dispositivo, app ou fabricante — o backup offline e correto é sempre sua responsabilidade.
Este artigo mostra como cada modelo OneKey produz a entropia e a frase de recuperação quando você cria uma nova carteira, e por que as preocupações recentes com certas implementações de RNG por software não se aplicam aos fluxos de criação de carteira da OneKey.
A segurança da carteira começa com uma aleatoriedade que ninguém consegue prever
A segurança de uma carteira começa em uma única coisa: a entropia — os bits aleatórios imprevisíveis usados para criá-la. Uma frase de recuperação nada mais é do que uma codificação legível dessa entropia. Se a entropia for previsível no momento da criação, nada que você acrescente depois — um PIN, o local onde guarda a frase, a forma como os endereços são derivados — consegue desfazer o estrago.
Nem todos os modelos OneKey buscam sua aleatoriedade no mesmo lugar. Veja exatamente de onde vem a entropia por trás da sua frase de recuperação em cada dispositivo.
O problema que apareceu nas notícias tem origem em um PRNG Yasmarang mal configurado em libngu, no qual certas builds acabavam contornando o TRNG do chip. Os caminhos de firmware relevantes da OneKey não usam libngu, Coinkite, Coldcard nem qualquer dependência CKCC, e várias rodadas de auditoria confirmam que eles realmente chamam o TRNG do hardware ou do secure element. A seguir, vamos dispositivo por dispositivo pela interface real de aleatoriedade de hardware que cada um utiliza.
O que é entropia e por que uma carteira não vive sem ela?
Pense na entropia como uma quantidade mensurável de imprevisibilidade, geralmente contada em bits. 128 bits de entropia significam 2^128 valores iniciais possíveis; na ausência de outra falha, o atacante não tem nada a fazer além de adivinhar. Suas chaves privadas, seus endereços e sua capacidade de assinar são todos derivados de forma determinística desse único segredo inicial.
Por isso, a segurança de uma frase de recuperação não vem do fato de que uma dúzia de palavras em inglês "parece muita coisa". Ela vem de quão imprevisível é a entropia bruta por trás delas:
- 128 bits de entropia → 12 palavras BIP39;
- 192 bits de entropia → 18 palavras BIP39;
- 256 bits de entropia → 24 palavras BIP39.
Uma aleatoriedade fraca permite que o atacante reproduza as entradas a partir do momento em que sua carteira foi criada e chegue exatamente à mesma frase e à mesma chave privada. Nenhuma quantidade de SHA-256, proteção por PIN ou armazenamento em secure element transforma uma entrada previsível em entropia genuinamente imprevisível.
De um número aleatório a uma frase de recuperação: como a matemática realmente funciona
Os detalhes variam de modelo para modelo, mas toda carteira BIP39 compartilha o mesmo modelo de cálculo:
Gerador de número verdadeiramente aleatório de hardware (TRNG)
↓
Coleta 128 / 192 / 256 bit de entropia (ENT)
↓
Usa os primeiros ENT / 32 bit de SHA-256(ENT) como checksum (CS)
↓
Divide ENT || CS em grupos de 11 bit, mapeando cada um para uma das 2048 palavras BIP39
↓
12 / 18 / 24 palavras → seed → chaves privadas, endereços e chaves de assinatura
Por exemplo, uma frase de 12 palavras usa 128 bits de entropia mais um checksum de 4 bits — 132 bits no total, que se dividem exatamente em 12 grupos de 11 bits. Cada grupo é um índice na lista de palavras BIP39.
A etapa de SHA-256 aqui apenas calcula o checksum do BIP39; ela não é um gerador de números aleatórios. A aleatoriedade da frase continua repousando inteiramente sobre a entropia bruta capturada no momento da criação.
Então, por que a implementação da OneKey não é afetada pelo problema da ColdCard? A seguir, detalhamos, dispositivo por dispositivo, como o número aleatório inicial de cada modelo é produzido e se ele em algum momento cai no caminho de código afetado.
OneKey Pro
OneKey Pro
É afetado?
Não — não pelo problema libngu / Yasmarang da ColdCard. A build atual do Pro habilita o THD89 por padrão. Quando você cria uma carteira no dispositivo, o TRNG do THD89 fornece a entrada aleatória, e o firmware cuida da codificação BIP39 ou SLIP39 que vem em seguida.
Como é gerado
TRNG do THD89 → entropia de inicialização da carteira → o firmware codifica BIP39 ou SLIP39.
O random.bytes() do Pro tem como padrão source=1, que chama se_random_encrypted() na build padrão com USE_THD89=1.
Observações sobre a aleatoriedade
- A build padrão do Pro habilita o THD89, e os bytes aleatórios vêm de
se_random_encrypted()— não do caminho de PRNG por software do Yasmarang ou dolibngu. - Segundo a Central de Ajuda da OneKey, o TRNG do secure element EAL6+ atual fundamenta sua aleatoriedade em processos físicos, como o ruído eletrônico.
OneKey Classic 1S
OneKey Classic 1S
É afetado?
Não — não pelo problema libngu / Yasmarang da ColdCard. O fluxo de criação no dispositivo atual e público do Classic 1S obtém sua entropia do TRNG do secure element THD89, e a string da frase BIP39 é codificada pelo firmware do MCU.
Como é gerado
TRNG do THD89 → 128 / 192 / 256 bits de entropia → o MCU codifica a frase BIP39.
Observações sobre a aleatoriedade
- Dizer que "a frase é gerada pelo THD89" não é totalmente preciso: o THD89 fornece a entrada aleatória, enquanto a codificação das palavras BIP39 acontece no firmware do MCU.
- O firmware chama a interface
se_random_encrypted()do THD89 e não usa Yasmarang nemlibngu. Segundo a Central de Ajuda da OneKey, o TRNG do secure element EAL6+ atual produz aleatoriedade a partir de processos físicos, como o ruído eletrônico.
OneKey Classic 1S Pure
OneKey Classic 1S Pure
É afetado?
Não — não pelo problema libngu / Yasmarang da ColdCard. O código público não dá ao Classic 1S Pure um ramo separado de geração de entropia; ele compartilha a mesma base de código firmware-classic1s do Classic 1S. Então, quando você cria uma carteira, a entropia do Pure também vem do TRNG do THD89 e é codificada em uma frase BIP39 pelo MCU.
Fluxo verificado
TRNG do THD89 → 128 / 192 / 256 bits de entropia → o MCU codifica a frase BIP39.
O fato de o Pure ser um produto sem bateria não altera esse caminho público de criação.
Observações sobre a aleatoriedade
- Não presuma que o Pure tem um mecanismo de entropia diferente só porque é vendido como um modelo próprio.
- Assim como no Classic 1S, o código público de criação chama a interface de aleatoriedade do THD89 e não usa Yasmarang nem
libngu.
OneKey Classic
OneKey Classic
É afetado?
Não — não pelo problema libngu / Yasmarang da ColdCard. No caminho de firmware do Classic com secure element habilitado, o SE fornece o material aleatório usado para criar a carteira, e o MCU o transforma em uma frase BIP39.
Como é gerado
O SE fornece o material aleatório → os primeiros 32 bytes são tomados como entropia → o MCU codifica a frase BIP39.
Observações sobre a aleatoriedade
- Esse caminho obtém seu material aleatório por meio das interfaces de inicialização e exportação do SE, e não chama a implementação de RNG do Yasmarang ou do
libngu— portanto, nunca cai no caminho de código afetado em discussão. - O código público não consegue determinar individualmente o modelo e a certificação do SE para cada lote do Classic. Ao descrevê-lo publicamente, baseie-se na documentação do chip do lote específico, em vez de aplicar ao Classic a certificação de outro modelo.
OneKey Mini
OneKey Mini
É afetado?
Não — não pelo problema libngu / Yasmarang da ColdCard. O fluxo de criação no dispositivo do Mini obtém sua entropia do gerador de números aleatórios de hardware do MCU STM32, e o MCU então a codifica em uma frase BIP39.
Como é gerado
TRNG do MCU STM32 → 128 / 192 / 256 bits de entropia → o MCU codifica a frase BIP39.
No firmware mais antigo do Mini, o random32() lê diretamente o periférico de RNG do STM32 e rejeita saídas duplicadas consecutivas. O fluxo de criação no dispositivo usa exatamente essa aleatoriedade para gerar a frase.
Observações sobre a aleatoriedade
- O MCU lê diretamente o periférico de RNG de hardware do STM32, e o firmware ainda rejeita saídas duplicadas consecutivas. Esse caminho não usa Yasmarang nem
libngu.
Recomendações de segurança para usuários
- Não importa de onde venha a entropia: uma vez que uma frase de recuperação vaza, qualquer pessoa pode restaurar a carteira. Fazer o backup offline e de forma correta é sempre sua responsabilidade.
- Se uma frase de recuperação for perdida, nenhum dispositivo, app ou fabricante pode recuperá-la para você.
Leitura adicional e fontes
- Central de Ajuda da OneKey: como uma carteira de hardware OneKey gera uma frase de recuperação e garante sua aleatoriedade?
- OneKey Pro:
reset_device - OneKey Pro: implementação da fonte de aleatoriedade
- OneKey Pro: configuração de build que habilita o THD89 por padrão
- Classic 1S:
reset.c - Classic 1S:
config.c - OneKey Classic / Mini:
reset.c - Commit histórico: Mini usando o Microchip ATECC608






