
Quelqu'un a vidé des portefeuilles Bitcoin qui n'auraient jamais dû être accessibles.
Les coins se trouvaient sur des appareils Coldcard — des portefeuilles matériels du fabricant canadien Coinkite, du type qui ne touchent jamais à internet. Pas de lien de phishing. Pas de malware. Pas d'ordinateur portable volé. Les attaquants ont simplement découvert quelles étaient les clés privées.
Galaxy Research a désormais retracé plus de 1 596 BTC volés en trois vagues confirmées, avec une quatrième vague suspectée qui porterait le total à environ 2 055 BTC – soit environ 130 millions de dollars aux prix actuels. Un seul balayage a transféré 70 millions de dollars en 41 minutes. Coinkite affirme qu'au moins 15 attaquants distincts sont intervenus.
L'entreprise a publié un document technique le 1er août expliquant ce qui n'allait pas. C'est un document d'une franchise inhabituelle, et la version courte est que le portefeuille jouait aux dés pipés pendant huit ans sans que personne ne s'en aperçoive.
En 2021, Coinkite a migré la cryptographie de Coldcard vers libsecp256k1, la même bibliothèque utilisée par Bitcoin Core. Bonne décision. L'intégration est l'endroit où tout a échoué.
La migration a discrètement détourné la génération de seed du générateur de nombres aléatoires matériel de Coldcard vers le fallback logiciel de MicroPython — un petit algorithme appelé Yasmarang qui existe pour les appareils ne possédant pas de puce de génération aléatoire du tout.
🚨LES PERTES DUES AU HACK COLDCARD DÉPASSENT 100M$
Grande confiance : 1 596 BTC ont été volés à environ 7300 adresses au cours de 3 vagues confirmées + 14 incidents mineurs supplémentaires.
Si nous ajoutons les montants suspectés (mais non confirmés), le total monte à 130 millions de dollars (2k BTC).
Plus de détails dans le fil ci-dessous 👇 pic.twitter.com/RAl3ib67qa
— Galaxy Research (@glxyresearch) August 3, 2026
Coldcard possède une puce de génération aléatoire. On a simplement cessé de l'utiliser.
La raison est presque trop invraisemblable. Une clause de protection de compilation utilisait #ifndef, qui vérifie si un paramètre existe plutôt que s'il est activé. Coinkite avait défini ce paramètre comme zéro, ce qui signifie "désactivé". Comme zéro est toujours considéré comme défini, le contrôle de sécurité a réussi et la compilation s'est achevée. Les deux versions de la fonction avaient des signatures identiques, donc rien ne semblait anormal.
"La majeure partie de l'aléatoire sur le COLDCARD provenait d'un PRNG dont j'ignorais qu'il était réellement dans la base de code source", a écrit Coinkite, faisant référence à un générateur de nombres pseudo-aléatoires – un logiciel qui produit des nombres qui semblent aléatoires mais suivent une recette fixe à partir d'une valeur de départ.
Donnez la même valeur de départ à la recette et vous obtiendrez le même résultat. À chaque fois.
Sur les appareils Mk2 et Mk3 exécutant le firmware 4.0.1 à 4.1.9, cette valeur de départ provenait du numéro de série de la puce et de son horloge. Coinkite estime l'espace de recherche résultant à environ 40 bits. Les modèles plus récents intégraient un peu d'entropie d'élément sécurisé, les faisant passer à environ 72 bits.
Aucun n'atteint 128, l'objectif.
L'écart est plus important qu'il n'y paraît. Les bits sont des exposants. Un espace de recherche de 128 bits contient plus de combinaisons qu'il n'y a d'atomes dans l'univers observable, et personne ne le recherche. Quarante bits représentent environ un trillion — un nombre qu'un ordinateur portable correct peut traiter. Chaque bit perdu divise le travail par deux.
L'équipe d'ingénierie de Block, qui a publié sa propre analyse, a estimé l'espace de recherche effectif de l'élément sécurisé des appareils plus récents à 2^32 candidats, avec une moyenne d'environ 2^31 tentatives. Leur évaluation pour les cartes plus anciennes est plus directe : pour un ID d'appareil connu, un état de minuterie et un historique d'appels, la génération de portefeuille est déterministe.
Et déterministe est l'opposé d'aléatoire, ce qui est essentiel à la cryptographie.
Coinkite soupçonne que la faille a été découverte par une machine. "Nous devons supposer que quelqu'un a utilisé l'IA pour examiner les versions précédentes de notre firmware et est tombé sur ce problème", a écrit l'entreprise, ajoutant qu'elle avait récemment passé l'un des meilleurs modèles d'IA disponibles sur le même code sans rien trouver. "Les attaquants et les défenseurs disposent des mêmes outils d'IA, mais aujourd'hui, cela ne nous a pas aidés, et a seulement aidé les méchants."
Un firmware corrigé est disponible pour chaque modèle affecté. Il ne répare pas les seeds existantes ; ces portefeuilles doivent être régénérés et les fonds déplacés. Decrypt a expliqué comment le stockage air-gapped change après un exploit de ce type et a suivi les pertes qui ont dépassé les 114 millions de dollars.
L'entropie est la mesure de ce qu'un attaquant ignore.
En d'autres termes, c'est essentiellement de l'incertitude, comptée en bits. Un bit correspond à un lancer de pièce : deux résultats, et celui qui devine a raison la moitié du temps. Dix bits donnent 1 024 résultats. Chaque bit double la charge de travail de celui qui devine.
Un portefeuille Bitcoin est un très grand nombre gardé secret. L'adresse à laquelle les gens envoient des coins en est dérivée mathématiquement, et la dérivation ne fonctionne que dans un sens – vous pouvez aller de la clé à l'adresse, mais jamais l'inverse.
Ainsi, la sécurité de chaque portefeuille repose sur une seule question : Combien de nombres un attaquant devrait-il essayer ?
Si le nombre a été choisi avec 128 bits d'entropie, la réponse est "plus que ce que la physique permet". S'il a été choisi avec 40, la réponse est "donnez-moi un peu de temps".
C'est la même propriété qui rend la menace de l'informatique quantique digne de débat – une machine quantique attaquerait les mathématiques qui lient la clé à l'adresse. Le bug de Coldcard n'a jamais eu besoin de cela. Il a rendu les clés devinables avant même que ces calculs n'interviennent.
C'est ici que le vocabulaire devient glissant. Un générateur pseudo-aléatoire produit une sortie qui réussit les tests statistiques de hasard, donc en gros, rien qu'une feuille de calcul ne signalerait. Cette sortie est toujours entièrement déterminée par sa valeur de seed. Elle semble aléatoire mais ne l'est pas.
L'aléatoire statistique et l'imprévisibilité cryptographique sont des propriétés différentes, et la sortie de Coldcard aurait passé le premier test haut la main tout en échouant complètement au second.
Le véritable aléatoire doit provenir du bruit physique : la gigue électrique dans un circuit, les fluctuations thermiques, la désintégration radioactive. C'est à cela que servait la puce matérielle sur le Coldcard. C'est cette puce que le drapeau de compilation a déconnectée.
Alors que les utilisateurs se dépêchaient de régénérer leurs seeds, beaucoup se sont tournés vers la solution simple et de faible technologie. Les Coldcard vous permettent de lancer des dés physiques et d'utiliser les résultats comme entropie. Les propres directives de Coinkite considèrent que les seeds créées avec au moins 50 lancers de dés indépendants et privés ne sont pas à risque à cause du bug.
Cela peut paraître stupide, mais l'entreprise vend en fait un sac avec "100 petits dés mignons et minuscules" pour vous faciliter l'ensemble du processus.
Le 31 juillet, le développeur de Bitcoin Core, Luke Dashjr, a publié un avertissement : "Pas mal de gens suggèrent/utilisent des dés pour atténuer la vulnérabilité de Coldcard. Notez que les dés courants ne sont pas conçus pour être cryptographiquement sécurisés. Si vous comptez le faire, vous devriez probablement acheter des dés de casino de précision. Et même dans ce cas, ayez une autre source d'entropie."
Bitcoin Twitter n'a pas pris cela calmement.
"lol maintenant tu ne peux même plus lancer de dés", a écrit un utilisateur. "L'auto-garde, c'est fini…" Un autre a demandé s'il devait engager quelqu'un atteint de la maladie de Parkinson pour les lancer. (Pas sympa.)
dois-je engager quelqu'un atteint de parkinson pour lancer les dés?
— Murern (@Bitcoin_Murern) July 31, 2026
La réponse la plus utile est probablement venue avec l'arithmétique. Le développeur Justin Sharp a calculé le coût exact d'un mauvais dé :
"Exagéré. Un d6 parfait donne 2,585 bits par lancer. Un dé visiblement biaisé, par exemple avec une face qui tombe 20 % du temps au lieu de 16,7 %, donne quand même environ 2,55 bits. Sur 99 lancers, c'est la différence entre environ 256 bits et environ 252 bits d'entropie."
Quatre bits sur 256. C'est la seule pénalité pour un dé visiblement injuste.
Dashjr n'a pas tort de dire que les dés bon marché ont un biais mesurable – les points moulés par injection retirent des quantités de plastique légèrement différentes de chaque face, ce qui est précisément la raison pour laquelle les casinos utilisent des dés de précision à remplissage affleurant. Il a raison sur la physique et tort sur l'enjeu. Perdre quatre bits sur 256 vous laisse à 252. Le bug de Coldcard a laissé les utilisateurs à 40.
Il y a cependant un argument plus pointu enfoui dans son conseil, et il ne concerne pas la tolérance de fabrication. Il s'agit de ne faire confiance à aucune source unique. L'échec de Coldcard n'était pas que son entropie était légèrement biaisée – c'était qu'un composant a cessé de contribuer en silence et que rien ne l'a détecté.
Si vous avez généré une seed sur un Coldcard affecté sans lancer de dés (vraiment) ou sans une phrase de passe BIP-39 forte, cette seed est compromise.
Mettez à jour le firmware, générez une nouvelle seed, vérifiez l'empreinte, envoyez une transaction test, puis déplacez tous les fonds. L'avis de Coinkite explique la procédure modèle par modèle. Les seeds exportées emportent la faille avec elles – déplacer une mauvaise seed vers une autre application de portefeuille ne résout rien.
Pour tous les autres, la leçon à retenir n'est pas que les portefeuilles matériels sont cassés ou que les dés sont un piège.
C'est que le terme "aléatoire" est une affirmation, et les affirmations doivent être vérifiées. Le code source de Coldcard était public tout ce temps. Le générateur de nombres aléatoires matériel prévu était là, dans le binaire. Les examinateurs ont confirmé son existence mais n'ont jamais confirmé que le générateur de seed l'appelait réellement.
Huit ans d'audits ont examiné le bon code. Personne n'a vérifié s'il fonctionnait.