Difficile de deviner votre phrase de récupération ? ColdCard a rendu ça facile

Points clés
• Une mise à jour défectueuse du micrologiciel de ColdCard est passée silencieusement du générateur de nombres aléatoires matériel à un générateur pseudo-aléatoire logiciel
• Cela a réduit l'ensemble des phrases de récupération possibles de 2^256 à environ 2^40 (soit environ 1 100 milliards) sur les modèles Mk2/Mk3, et à environ 2^72 sur les Mk4/Mk5/Q
• Les attaquants n'ont jamais compromis l'appareil : ils ont simplement deviné des phrases de récupération qui n'étaient plus difficiles à deviner
• Une phrase BIP-39 de 24 mots correctement générée est environ 5×10^60 fois plus difficile à deviner par collision qu'un sursaut gamma d'extinction massive dans la seconde à venir
• Un véritable générateur de nombres aléatoires puise dans le bruit physique, si bien que connaître le modèle de l'appareil, le numéro de série, l'heure de démarrage et le code source complet ne mène nulle part un attaquant
This article is written as a plain-language explainer. To keep things easy to follow, some technical details have been simplified or turned into analogies, and may differ from how things actually work under the hood. If you need to make decisions about securing real assets, please go by the official announcements and consult a professional.
Le 30 juillet 2026, un événement inhabituel s'est produit sur la chaîne Bitcoin : en l'espace de 15 minutes seulement, 500 adresses ont envoyé environ 594,48 BTC (soit environ 38 millions de dollars) vers une seule et même adresse. Peu de temps après, environ 562 BTC de cette somme ont été transférés vers une autre adresse. Il ne s'agissait manifestement pas d'une activité de transfert normale, et il a été confirmé par la suite qu'il s'agissait d'un pirate informatique déplaçant des fonds volés. Enregistrement on-chain
500 adresses sources → une adresse de consolidation (~594,48 BTC / ~$38M) → une seconde adresse (~562 BTC)
Alors que les victimes se manifestaient les unes après les autres, un point commun est apparu : elles avaient toutes utilisé un portefeuille matériel Coldcard. Le même jour, Coinkite, le fabricant de Coldcard, a émis un avertissement de sécurité, et leur enquête officielle ainsi que des analyses techniques indépendantes l'ont confirmé : un problème sérieux s'était effectivement produit avec le portefeuille ColdCard. Le problème résidait dans la façon dont les nombres aléatoires étaient générés, ce qui signifiait qu'un attaquant n'avait pas besoin de forcer un Coldcard. Il lui suffisait de deviner la phrase de récupération de l'utilisateur pour vider les fonds.
Que s'est-il réellement passé ici ?
Tout cet incident a dérapé à une étape spécifique : la génération de la phrase de récupération.
Voici une analogie. Normalement, lorsqu'un portefeuille matériel génère une phrase de récupération, c'est comme si l'on plongeait la main dans un coffre de clés presque infini, qu'on en tirait une au hasard pour vous la confier, et que cette clé ouvrait un coffre-fort qui n'appartient qu'à vous. Mais le logiciel de ColdCard comportait un bug, et la plage dans laquelle il puisait les clés est passée de ce coffre entier à un seul petit tiroir. Tout ce que vous avez à faire, c'est d'essayer les clés de ce tiroir une par une : dès qu'une clé ouvre quelque chose, vous le videz.
Bien sûr, cette analogie n'est pas tout à fait exacte, mais le principe demeure. Plus précisément : une mise à jour défectueuse de l'équipe du micrologiciel (firmware) de ColdCard signifiait que lors de la génération d'une phrase de récupération, le portefeuille ne pouvait pas faire appel au générateur de nombres aléatoires matériel, plus sûr, et utilisait à la place un générateur de nombres aléatoires « pseudo-aléatoires » logiciel. Le « mot de passe » produit, c'est-à-dire la phrase de récupération, n'était tout simplement pas assez sécurisé, et c'est ce qui a conduit à cet incident.
À ce stade, vous vous demandez peut-être : quel est le rapport entre ma phrase de récupération et des nombres aléatoires ? Comment le pirate a-t-il trouvé le mot de passe du coffre-fort ? Et qu'est-ce qu'un générateur de nombres aléatoires ? Attendez, laissez-moi vous expliquer tout cela.
Que se cache-t-il vraiment derrière une phrase de récupération ?
Pourquoi une phrase de récupération prouve-t-elle que les actifs vous appartiennent ?
Avant d'expliquer d'où vient une phrase de récupération, nous devons mettre les choses au clair : la relation entre vos actifs, votre portefeuille et votre phrase de récupération.
Une phrase de récupération ne ressemble pas vraiment à la clé d'un coffre-fort. Dans la conception fondamentale d'une blockchain, vos actifs sont exposés au grand jour sur la chaîne depuis le début, comme de l'argent liquide dans une banque. L'argent en lui-même ne porte pas le nom de son propriétaire, tout le monde peut le voir et, en théorie, tout le monde a le droit d'interagir avec. Mais il est évident que tout le monde ne peut pas retirer des montants illimités. C'est parce qu'avant de pouvoir effectuer un transfert, la chaîne vous demande de produire une « preuve » montrant que vous détenez ces actifs et qu'ils vous appartiennent, et cette « preuve » est votre phrase de récupération.
En d'autres termes, quiconque saisit la phrase de récupération sur la chaîne, les actifs vers lesquels elle pointe lui appartiennent, même si la personne qui l'utilise n'est pas vous, car tout ce que la chaîne voit, c'est que quelqu'un a soumis une preuve de propriété valide.
Quelqu'un initie un transfert → la chaîne demande une preuve → une signature dérivée de la phrase de récupération → vérifié, les actifs peuvent être déplacés
La chaîne fait confiance à la preuve, pas aux personnes.
Une phrase de récupération se rapproche donc davantage, par nature, d'un titre de propriété ou d'un sceau officiel portant un « numéro spécial ». Le sceau en soi est facile à falsifier ; ce qui le rend réellement inviolable, c'est le « numéro » spécial qu'il transporte et, par conception, il est pratiquement impossible pour quiconque de deviner ce numéro.
Toute la question se résume donc à cette chaîne de « chiffres ». D'où vient-elle ? Et comment protège-t-elle vos actifs ?
Comment une phrase de récupération passe-t-elle des chiffres aux mots ?
Nous savons tous que les ordinateurs fonctionnent en binaire. Texte, images, mots de passe : une fois à l'intérieur d'un ordinateur, ils finissent tous par n'être qu'une suite de 0 et de 1. Les phrases de récupération ne font pas exception.
Par exemple, à l'intérieur d'un ordinateur, cela pourrait ressembler à ceci :
010101000010
Mais vous vous demandez peut-être : une phrase de récupération est un ensemble de mots anglais, pas des chiffres. Comment diable cela peut-il sortir de cette suite de 0 et de 1 ?
Ce n'est vraiment pas si compliqué. Nous commençons par préparer un « dictionnaire » qui indique quel bloc de chiffres correspond à quel mot. Pour faciliter la compréhension, créons un tout petit dictionnaire de seulement 16 mots :
Ensuite, nous coupons cette chaîne de code en trois parties :
0101 | 0100 | 0010
Puis nous prenons ces trois morceaux et les cherchons dans le dictionnaire :
0101 → squirrel
0100 → coffee
0010 → moon
Et c'est ainsi qu'une chaîne binaire presque impossible à lire se transforme en trois mots faciles à noter :
écureuil café lune
C'est le principe fondamental d'une phrase de récupération : il ne s'agit pas d'un ensemble de mots apparus de nulle part. C'est un long nombre, découpé en plusieurs petits morceaux, chaque morceau étant traduit en un mot à l'aide d'une liste de mots fixe.
Bien sûr, une véritable phrase de récupération est un peu plus complexe que cet exemple : la liste de mots est plus grande, le nombre est plus long et des informations de somme de contrôle y sont ajoutées. Mais la logique fondamentale ne change pas. Une phrase de récupération est simplement une autre façon d'exprimer cette chaîne de nombres, une méthode plus facile pour les humains à noter, stocker et restaurer.
Est-il vraiment difficile de deviner 24 mots ?
Ceci étant dit, nous pouvons enfin aborder les véritables phrases de récupération. Il existe de nos jours pas mal de normes pour les générer, que l'on peut simplement voir comme de nombreux « dictionnaires » différents. Prenons la plus largement utilisée, le standard BIP-39, et voyons d'où vient réellement la sécurité d'une phrase de récupération.
Le dictionnaire BIP-39 contient un total de 2 048 mots, bien plus que celui utilisé dans notre exemple, mais il fonctionne essentiellement de la même manière. Il est également issu d'une très longue chaîne de code binaire. Plus précisément, il provient d'une chaîne de 264 bits, où chaque groupe de 11 bits représente un mot, et chaque mot offre 2^11, soit 2 048 possibilités, ce qui correspond exactement aux 2 048 mots du dictionnaire.
Mais les ordinateurs fonctionnent en binaire, et les nombres aléatoires qu'ils génèrent ne peuvent être qu'en multiples de 2, il est donc impossible de générer directement un nombre aléatoire de 264 bits. Ce que nous pouvons faire, c'est lui faire générer d'abord un nombre aléatoire de 256 bits, puis déplacer les 8 premiers chiffres à la fin. Nous disposons désormais de 264 bits, ce qui suffit pour une phrase de récupération de 24 mots.
Vous vous souvenez de ce que nous avons vu il y a uninstant ? La sécurité de la phrase de récupération, notre « sceau officiel », provient d'une chaîne de nombres spéciale, et ce nombre est le nombre aléatoire qui se cache derrière la phrase. Nous avons également dit que le sceau est sécurisé précisément parce que personne ne peut deviner le nombre qui s'y trouve. Il est évident que vous n'allez pas revendiquer les fonds de quelqu'un en devinant un mauvais nombre. Alors, est-il difficile de deviner ce nombre ? Tout dépend de la longueur du nombre aléatoire : un nombre aléatoire de 256 bits présente pas moins de 2^256 possibilités, ce qui donne 2^256 phrases de récupération possibles, ou 2^256 adresses de portefeuille possibles.
Ce nombre est-il vraiment si grand ? Le nombre de particules élémentaires dans l'univers observable est généralement estimé à environ 10^80, tandis que 2^256 ≈ 10^77. En d'autres termes, nous pourrions distribuer une adresse de portefeuille à pratiquement chaque particule observable dans l'univers. Et l'ensemble de la population humaine ne représente qu'environ 2^33 personnes, de sorte que chacun pourrait encore obtenir environ 2^223 adresses, ce qui correspond à un 1 suivi de 67 zéros :
10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
Donc, un pirate informatique essayant de deviner votre phrase de récupération revient à essayer de trouver la seule adresse détenant un solde parmi toutes les autres. C'est extrêmement difficile.
Mais à ce stade, quelqu'un pourrait se poser la question : un ordinateur pourrait-il générer accidentellement deux adresses de portefeuille identiques ? Dans ce cas, la deuxième personne pourrait s'emparer des fonds de la première, n'est-ce pas ? C'est une bonne question, et cette possibilité existe techniquement. Dans le monde réel, cependant, cela n'arrivera pas. Pour deux phrases de récupération BIP-39 de 24 mots générées indépendamment et correctement, la probabilité qu'elles soient identiques est de 1 / 2^256 ≈ 8.6 × 10^-78.
À titre de comparaison, des articles crédibles estiment qu'il y a environ 4.4 × 10^-17 de chances pour que la Terre soit frappée dans la seconde qui vient par un sursaut gamma suffisamment puissant pour provoquer une extinction de masse. Ce qui signifie qu'une collision de phrases de récupération est environ 5 × 10^60 fois moins probable qu'un événement d'extinction de masse.
Ce qui vous donne une idée de la difficulté à deviner une phrase de récupération.
Qu'est-ce que ColdCard a donc raté exactement ?
De 2^256 à 2^40
Une fois que l'on comprend ce qui se cache réellement derrière une phrase de récupération, il est facile de saisir l'erreur commise par ColdCard.
Une seule mise à jour défectueuse de l'équipe ColdCard a fait en sorte que lors de la génération des phrases de récupération, ce qui aurait dû donner 2^256 phrases possibles n'en a produit que 2^40, un gouffre vertigineux en termes d'échelle. Vous vous demandez peut-être comment un nombre aléatoire de 40 bits peut produire 24 mots, mais ne vous bloquez pas là-dessus. Tout ce qu'il faut retenir, c'est que ce bug a rendu beaucoup plus probable la possibilité de deviner une adresse de portefeuille générée par ColdCard.
Il est utile d'être précis sur la portée : différents modèles ont été touchés à des degrés divers. Les quelque 40 bits évoqués ici concernent principalement les Mk2 et Mk3, tandis que l'estimation pour les Mk4, Mk5 et Q se situe autour de 72 bits.
Mettez les deux côte à côte et la réponse saute aux yeux : il n'y avait en tout que 1 099 511 627 776 phrases de récupération possibles générées par ColdCard. Pour un pirate, il suffit d'une machine haute performance pour les tester une par une, et il y a une réelle chance de repartir avec les fonds. Cela reste un travail difficile, mais ce n'est plus une échelle que l'humanité ne peut pas surmonter à ce stade.
Même à ce stade, la situation n'était pas encore catastrophique. 1 099 511 627 776 reste un nombre assez élevé, et si l'on ajoute la latence du réseau, un pirate aurait pu avoir besoin d'années d'essais avant de tomber sur une adresse disposant d'un solde.
Malheureusement, l'erreur de ColdCard signifiait également que la méthode même de génération de ces valeurs possibles était traçable, ce qui a réduit la difficulté de manière considérable.
Pourquoi les nombres aléatoires générés par logiciel peuvent-ils être devinés ?
C'est parce que les nombres aléatoires utilisés par ColdCard pour les phrases de récupération provenaient d'un « générateur de nombres aléatoires logiciel », et à strictement parler, chaque générateur de ce type est « pseudo-aléatoire » et son algorithme peut être tracé. Pourquoi dis-je cela ?
Tout d'abord, pensez à ce qu'est réellement le hasard. Disons que nous lançons une pièce en l'air. Nous disons généralement que pile et face ont chacun une chance égale de 50 % et sortent de manière aléatoire. C'est parce que pendant que la pièce tourne dans les airs, sa trajectoire est façonnée par toutes sortes de facteurs : la force avec laquelle nous l'avons lancée, la gravité terrestre, la force et la direction de la climatisation dans la pièce, la force de Coriolis, et même de minuscules vibrations dues aux mouvements de la croûte terrestre, des facteurs que nous pouvons imaginer et beaucoup d'autres que nous ne pouvons pas. Mis bout à bout, ils font qu'il nous est impossible de calculer la trajectoire de la pièce dans les airs, de sorte que nous ne pouvons pas prédire le résultat et que nous acceptons qu'un lancer de pièce est « aléatoire ».
Mais un « générateur de nombres aléatoires logiciel » s'exécute sur un algorithme fixe. De manière générale, il prend une poignée de conditions initiales, les fait passer par un algorithme fixe et produit un nombre aléatoire fixe. En d'autres termes : tant que nous connaissons ces quelques conditions initiales, nous savons quel nombre aléatoire il produira, et par conséquent quelle sera la phrase de récupération.
Et comme par hasard, les conditions initiales que les gens utilisent généralement sont des éléments tels que l'horodatage lors de la génération, l'horodatage du démarrage de l'appareil, le numéro de série de l'appareil, etc. Cela signifie qu'un pirate n'a qu'à faire des suppositions raisonnables sur ces chiffres, puis à concevoir un algorithme pour casser les phrases de récupération générées par le ColdCard. En d'autres termes, le pirate n'a pas besoin de deviner à l'aveugle, car la manière dont la phrase est générée suit un schéma au départ.
Comment un générateur de nombres aléatoires matériel assure-t-il réellement la sécurité ?
À la base de tout cela, le ColdCard n'utilisait pas de « véritable générateur de nombres aléatoires », c'est-à-dire le générateur de nombres aléatoires matériel intégré à la puce de l'élément sécurisé. Comme nous l'avons mentionné plus haut, un PRNG logiciel ordinaire est une formule déterministe :
ID de l'appareil + heure + algorithme → nombre aléatoire
Si un attaquant peut énumérer les identifiants des appareils et le minutage, il peut recalculer chaque résultat.
Un véritable générateur de nombres aléatoires, en revanche, s'appuie sur des phénomènes physiques, tels que :
- le bruit thermique dans les circuits ;
- la gigue des oscillateurs (jitter) ;
- la métastabilité des transistors ;
- le bruit d'avalanche ;
- le bruit quantique dans certains appareils ;
- les erreurs de mémoire aléatoires causées par les rayons cosmiques.
et ainsi de suite, pour générer la phrase de récupération, un peu comme un lancer de pièce où de nombreux facteurs d'interférence échappent tout simplement à la prédiction humaine. Le processus devient alors :
bruit physique imprévisible → échantillonnage et numérisation → conditionnement et hachage → amorçage d'un PRNG cryptographiquement sécurisé → génération de la phrase de récupération
Même si un attaquant connaît le modèle de l'appareil, le numéro de série, l'heure de démarrage et l'intégralité du code source, il ne peut toujours pas remonter à la forme d'onde exacte du bruit du circuit à ce moment-là. C'est à cela que ressemble un aléa véritablement fiable.
L'entropie, l'étalon de l'aléatoire
Qu'est-ce que l'entropie ?
« L'entropie » a l'air compliqué, mais vous pouvez simplement la voir ainsi : avant que le résultat ne soit révélé, combien y a-t-il d'issues possibles ?
Une pièce de monnaie normale a deux issues possibles, pile et face. La lancer une seule fois produit 1 bit d'entropie, car 2^1 = 2. Lancez-la deux fois et il y a quatre possibilités, pile-pile, pile-face, face-pile et face-face, ce qui fait 2 bits d'entropie, car 2^2 = 4. Continuez ainsi et 256 lancers vous donnent 2^256 résultats différents, ce qui représente 256 bits d'aléatoire.
Mais la clé de l'entropie n'est pas seulement que les résultats ont l'air désordonnés. Ce qui importe le plus, c'est que personne ne puisse connaître le résultat à l'avance. Si une pièce a été truquée pour qu'elle tombe toujours sur pile, alors même la lancer 256 fois produit toujours zéro entropie, car le résultat était prévisible depuis le début.
Et si vous ne faites pas confiance au véritable générateur de nombres aléatoires ?
Si vous ne faites pas non plus confiance au véritable générateur de nombres aléatoires intégré à votre portefeuille matériel, il existe une option plus primitive : lancez une pièce et créez l'aléatoire de vos propres mains.
Enregistrez face comme 0 et pile comme 1, lancez la pièce 256 fois et notez chaque résultat. Cela vous donne un nombre binaire de 256 bits. Ensuite, dans un environnement totalement hors ligne, calculez la somme de contrôle pour ce nombre selon la norme BIP-39 et convertissez-le en 24 mots anglais. Il s'agit d'une phrase de récupération complète.
flip a coin 256 times → record heads and tails → a 256-bit binary number → compute the BIP-39 checksum → 24 recovery words → import into a hardware wallet
Une mise en garde ici : les lancers de pièces ne peuvent remplacer que l'étape « générer le nombre aléatoire ». Ils ne peuvent pas remplacer le portefeuille matériel. Le stockage du portefeuille, la dérivation des adresses et la signature des transactions doivent toujours avoir lieu dans l'environnement isolé d'un portefeuille matériel. Les appareils connectés doivent uniquement observer et diffuser les transactions, et ne doivent jamais entrer en contact avec votre phrase de récupération.
Ne tapez pas de vrais résultats de lancers de pièces dans une page web, et n'inventez pas simplement une chaîne de 0 et de 1 parce qu'elle vous semble aléatoire. Ce n'est que lorsque chaque résultat provient véritablement d'un lancer imprévisible que cette chaîne de chiffres porte un véritable aléatoire.
FAQ
Non. Les appareils eux-mêmes n'ont pas été fracturés. Un bogue dans le micrologiciel a fait en sorte que les phrases de récupération ont été générées à partir d'un ensemble de valeurs possibles beaucoup plus restreint, permettant aux attaquants de les deviner par force brute au lieu d'attaquer le matériel.
L'impact varie selon les modèles. Les quelque 40 bits d'entropie évoqués ici concernent principalement les Mk2 et Mk3 ; l'estimation pour les Mk4, Mk5 et Q se situe autour de 72 bits. Référez-vous aux annonces officielles de Coinkite pour connaître la portée exacte.
Un générateur logiciel est un algorithme fixe alimenté par quelques conditions initiales telles qu'un horodatage ou un numéro de série, de sorte qu'une personne capable de deviner ces entrées peut recalculer sa sortie. Un générateur matériel échantillonne un bruit physique imprévisible, comme le bruit thermique des circuits ou la gigue d'un oscillateur, qu'il est impossible de recalculer à partir d'informations publiques.
Une phrase BIP-39 de 24 mots repose sur un nombre aléatoire de 256 bits, offrant 2^256 possibilités — soit environ 10^77, ce qui est proche du nombre de particules élémentaires dans l'univers observable.
Oui. Notez pile comme 0 et face comme 1, lancez la pièce 256 fois, puis calculez la somme de contrôle BIP-39 hors ligne et convertissez le résultat en 24 mots. Les lancers de pièces remplacent uniquement l'étape de génération de l'aléa ; le stockage du portefeuille et la signature des transactions doivent toujours s'effectuer au sein d'un hardware wallet, et les résultats ne doivent jamais être saisis sur une page web connectée.






