Comment les portefeuilles OneKey génèrent ta phrase de récupération — et d'où vient l'aléa

Points clés
- La sécurité d'un portefeuille repose d'abord sur l'entropie : des bits aléatoires imprévisibles captés au moment de la création. Une phrase de récupération n'en est qu'un encodage lisible.
- Les modèles OneKey ne puisent pas tous leur aléa au même endroit : SE THD89 pour le Pro, le Classic 1S et le Classic 1S Pure, SE ATECC608A pour le Classic, et TRNG du MCU STM32 pour le Mini.
- Le problème médiatisé vient d'une configuration erronée du PRNG Yasmarang dans
libngu; les chemins de firmware concernés de OneKey n'utilisent nilibngu, ni Coinkite, ni Coldcard, ni aucune dépendance CKCC. - SHA-256 ne sert ici qu'à calculer la somme de contrôle BIP39 : ce n'est pas un générateur d'aléa. La sécurité de la phrase tient entièrement à l'imprévisibilité de l'entropie brute.
- Une fois la phrase de récupération divulguée ou perdue, aucun appareil, aucune app et aucun fabricant ne peut réparer les dégâts : sa sauvegarde hors ligne reste ta responsabilité.
Cet article détaille comment chaque modèle OneKey produit l'entropie et la phrase de récupération lorsque tu crées un nouveau portefeuille, et pourquoi les inquiétudes récentes visant certaines implémentations logicielles de RNG ne concernent pas les chemins de création de OneKey.
La sécurité d'un portefeuille commence par un aléa que personne ne peut prédire
La sécurité d'un portefeuille commence par une seule chose : l'entropie — ces bits aléatoires imprévisibles qui servent à le créer. Une phrase de récupération n'est rien d'autre qu'un encodage lisible de cette entropie. Si l'entropie est prévisible au moment de la création, rien de ce que tu ajoutes ensuite — un code PIN, l'endroit où tu ranges ta phrase, la façon dont les adresses sont dérivées — ne pourra réparer les dégâts.
Les différents modèles OneKey ne puisent pas tous leur aléa au même endroit. Voici précisément d'où vient l'entropie qui sous-tend ta phrase de récupération sur chaque appareil.
Le problème qui a fait l'actualité remonte à un PRNG Yasmarang mal configuré dans libngu, où certaines builds finissaient par contourner le TRNG de la puce. Les chemins de firmware concernés de OneKey n'utilisent ni libngu, ni Coinkite, ni Coldcard, ni aucune dépendance CKCC, et plusieurs cycles d'audit confirment qu'ils appellent bel et bien le TRNG matériel ou celui de l'élément sécurisé. Ci-dessous, on parcourt appareil par appareil l'interface matérielle d'aléa que chacun utilise réellement.
Qu'est-ce que l'entropie, et pourquoi un portefeuille ne peut-il pas s'en passer ?
Vois l'entropie comme une quantité mesurable d'imprévisibilité, généralement comptée en bits. 128 bits d'entropie, cela signifie 2^128 valeurs de départ possibles ; en l'absence d'une autre faille, un attaquant n'a rien d'autre à faire que deviner. Tes clés privées, tes adresses et ta capacité à signer sont toutes dérivées de manière déterministe à partir de ce secret initial unique.
La sécurité d'une phrase de récupération ne vient donc pas du fait qu'une douzaine de mots anglais « font beaucoup ». Elle vient du degré d'imprévisibilité de l'entropie brute qui se cache derrière :
- 128 bits d'entropie → 12 mots BIP39 ;
- 192 bits d'entropie → 18 mots BIP39 ;
- 256 bits d'entropie → 24 mots BIP39.
Un aléa faible permet à un attaquant de reproduire les entrées telles qu'elles étaient au moment de la création de ton portefeuille et de retomber exactement sur la même phrase et la même clé privée. Aucune dose de SHA-256, aucune protection par PIN, aucun stockage dans un élément sécurisé ne peut transformer une entrée prévisible en une entropie réellement imprévisible.
D'un nombre aléatoire à une phrase de récupération : comment le calcul fonctionne vraiment
Les détails varient d'un modèle à l'autre, mais tout portefeuille BIP39 partage le même modèle de calcul :
Générateur matériel de vrais nombres aléatoires (TRNG)
↓
Tirage de 128 / 192 / 256 bit d'entropie (ENT)
↓
On prend les premiers ENT / 32 bit de SHA-256(ENT) comme somme de contrôle (CS)
↓
Découpage de ENT || CS en groupes de 11 bit, chacun mappé sur l'un des 2048 mots BIP39
↓
12 / 18 / 24 mots → seed → clés privées, adresses et clés de signature
Par exemple, une phrase de 12 mots utilise 128 bits d'entropie plus une somme de contrôle de 4 bits — soit 132 bits au total, qui se divisent proprement en 12 groupes de 11 bits. Chaque groupe est un index dans la liste de mots BIP39.
L'étape SHA-256 ne fait ici que calculer la somme de contrôle BIP39 ; ce n'est pas un générateur de nombres aléatoires. L'aléa de la phrase repose toujours entièrement sur l'entropie brute captée au moment de la création.
Alors pourquoi l'implémentation de OneKey est-elle épargnée par le problème ColdCard ? Ci-dessous, on décortique modèle par modèle la façon dont le nombre aléatoire initial de chacun est produit, et si oui ou non il atterrit un jour dans le chemin de code affecté.
OneKey Pro
OneKey Pro
Est-il concerné ?
Non — pas par le problème ColdCard libngu / Yasmarang. La build actuelle du Pro active THD89 par défaut. Lorsque tu crées un portefeuille sur l'appareil, le TRNG du THD89 fournit l'entrée aléatoire, et le firmware se charge de l'encodage BIP39 ou SLIP39 qui suit.
Comment c'est généré
TRNG THD89 → entropie d'initialisation du portefeuille → le firmware encode en BIP39 ou SLIP39.
Le random.bytes() du Pro utilise par défaut source=1, ce qui appelle se_random_encrypted() dans la build par défaut USE_THD89=1.
À propos de l'aléa
- La build par défaut du Pro active THD89, et les octets aléatoires proviennent de
se_random_encrypted()— pas du chemin PRNG logiciel Yasmarang oulibngu. - D'après le centre d'aide OneKey, le TRNG de l'élément sécurisé EAL6+ actuel ancre son aléa dans des processus physiques tels que le bruit électronique.
OneKey Classic 1S
OneKey Classic 1S
Est-il concerné ?
Non — pas par le problème ColdCard libngu / Yasmarang. Le flux de création sur l'appareil, actuel et public, du Classic 1S puise son entropie dans le TRNG de l'élément sécurisé THD89, et la chaîne de la phrase BIP39 est encodée par le firmware du MCU.
Comment c'est généré
TRNG THD89 → 128 / 192 / 256 bit d'entropie → le MCU encode la phrase BIP39.
À propos de l'aléa
- Dire « la phrase est générée par THD89 » n'est pas tout à fait exact : THD89 fournit l'entrée aléatoire, tandis que l'encodage des mots BIP39 se fait dans le firmware du MCU.
- Le firmware appelle l'interface
se_random_encrypted()de THD89 et n'utilise ni Yasmarang nilibngu. D'après le centre d'aide OneKey, le TRNG de l'élément sécurisé EAL6+ actuel produit son aléa à partir de processus physiques tels que le bruit électronique.
OneKey Classic 1S Pure
OneKey Classic 1S Pure
Est-il concerné ?
Non — pas par le problème ColdCard libngu / Yasmarang. Le code public ne donne pas au Classic 1S Pure une branche de génération d'entropie distincte ; il partage la même base de code firmware-classic1s que le Classic 1S. Ainsi, quand tu crées un portefeuille, l'entropie du Pure provient elle aussi du TRNG THD89 et est encodée en une phrase BIP39 par le MCU.
Flux vérifié
TRNG THD89 → 128 / 192 / 256 bit d'entropie → le MCU encode la phrase BIP39.
Le fait que le Pure soit un produit sans batterie ne change rien à ce chemin de création public.
À propos de l'aléa
- Ne pars pas du principe que le Pure dispose d'un mécanisme d'entropie différent simplement parce qu'il est vendu comme un modèle à part entière.
- Tout comme le Classic 1S, le code de création public appelle l'interface d'aléa THD89 et n'utilise ni Yasmarang ni
libngu.
OneKey Classic
OneKey Classic
Est-il concerné ?
Non — pas par le problème ColdCard libngu / Yasmarang. Sur le chemin de firmware du Classic doté d'un élément sécurisé, le SE fournit le matériel aléatoire utilisé pour créer le portefeuille, et le MCU le transforme en une phrase BIP39.
Comment c'est généré
Le SE fournit le matériel aléatoire → on prend les 32 premiers octets comme entropie → le MCU encode la phrase BIP39.
À propos de l'aléa
- Ce chemin obtient son matériel aléatoire via les interfaces d'initialisation et d'export du SE, et n'appelle pas l'implémentation RNG Yasmarang ou
libngu— il ne tombe donc jamais dans le chemin de code affecté dont il est question. - Le code public ne permet pas de fixer individuellement le modèle de SE et sa certification pour chaque lot de Classic. Pour en parler publiquement, réfère-toi à la documentation de la puce du lot concerné plutôt que d'appliquer au Classic la certification d'un autre modèle.
OneKey Mini
OneKey Mini
Est-il concerné ?
Non — pas par le problème ColdCard libngu / Yasmarang. Le flux de création sur l'appareil du Mini puise son entropie dans le générateur matériel de nombres aléatoires du MCU STM32, que le MCU encode ensuite en une phrase BIP39.
Comment c'est généré
TRNG du MCU STM32 → 128 / 192 / 256 bit d'entropie → le MCU encode la phrase BIP39.
Dans l'ancien firmware du Mini, random32() lit directement le périphérique RNG du STM32 et rejette les sorties consécutives identiques. Le flux de création sur l'appareil utilise exactement cet aléa pour générer la phrase.
À propos de l'aléa
- Le MCU lit directement le périphérique RNG matériel du STM32, et le firmware rejette en outre les sorties consécutives identiques. Ce chemin n'utilise ni Yasmarang ni
libngu.
Conseils de sécurité pour les utilisateurs
- Peu importe d'où vient l'entropie : dès qu'une phrase de récupération fuite, n'importe qui peut restaurer le portefeuille. La sauvegarder hors ligne et sans erreur reste toujours ta responsabilité.
- Si une phrase de récupération est perdue, aucun appareil, aucune app et aucun fabricant ne pourra la récupérer à ta place.
Pour aller plus loin et sources
- Centre d'aide OneKey : comment un portefeuille matériel OneKey génère-t-il une phrase de récupération et garantit-il son aléa ?
- OneKey Pro :
reset_device - OneKey Pro : implémentation de la source d'aléa
- OneKey Pro : configuration de build qui active THD89 par défaut
- Classic 1S :
reset.c - Classic 1S :
config.c - OneKey Classic / Mini :
reset.c - Commit historique : le Mini utilisant le Microchip ATECC608






