L'exploit Bitcoin Coldcard expliqué : comment un bug firmware a réduit l'entropie des clés et permis un vol de 130 millions de dollars
Points clés
- •Une erreur de configuration de compilation a conduit les portefeuilles Coldcard à utiliser un générateur de nombres pseudo-aléatoires logiciel au lieu de la puce matérielle d'aléatoire prévue, réduisant l'entropie de 128 bits à environ 40 bits sur les appareils Mk2 et Mk3.
- •Galaxy Research a confirmé le vol d'au moins 1 596 BTC lors de trois vagues d'attaques, une quatrième vague suspectée pouvant porter le total des pertes à environ 2 055 BTC, soit environ 130 millions de dollars.
- •La vulnérabilité est restée indétectée pendant environ huit ans malgré la disponibilité publique du code open-source de Coldcard pour examen communautaire.
- •Coinkite a publié un firmware corrigé pour tous les modèles concernés, mais le correctif ne peut pas réparer les graines existantes, ce qui signifie que les utilisateurs doivent générer de nouveaux portefeuilles et transférer manuellement tous les fonds.
- •Coinkite soupçonne que les attaquants ont découvert la faille grâce à une analyse de code assistée par IA, notant que le propre examen par IA de l'entreprise sur le même code n'avait pas identifié le problème.

Un bug firmware a conduit les portefeuilles matériels Coldcard à générer des graines à partir d'un générateur de nombres pseudo-aléatoires logiciel plutôt que de la puce matérielle de génération d'aléa dédiée à cette tâche. La faille a effectivement réduit l'espace de recherche de 128 bits à environ 40 bits sur les modèles plus anciens, permettant aux attaquants de calculer les clés privées et de vider des portefeuilles qui n'auraient jamais dû être accessibles.
Les pièces se trouvaient sur des appareils Coldcard — des portefeuilles matériels fabriqués par l'entreprise canadienne Coinkite, conçus pour rester hors ligne. Les Coldcard ont été largement recommandés dans les cercles de sécurité Bitcoin pour leur conception air-gapped et leur architecture transparente, ce qui rend cet échec particulièrement significatif pour les utilisateurs qui avaient précisément choisi cet appareil pour sa réputation en matière de sécurité. Aucun lien de phishing, logiciel malveillant ou appareil volé n'était en cause. Les attaquants ont simplement déduit les clés privées.
Galaxy Research a recensé plus de 1 596 BTC volés lors de trois vagues confirmées, une quatrième vague suspectée pouvant porter le total à environ 2 055 BTC — soit environ 130 millions de dollars aux prix actuels. Une seule opération de balayage a transféré 70 millions de dollars en 41 minutes. Coinkite indique qu'au moins 15 attaquants distincts ont participé. La grande majorité des vols de cryptomonnaies à grande échelle reposent sur l'ingénierie sociale, des compromissions d'échanges ou des exploits de contrats intelligents ; une vulnérabilité permettant aux attaquants de calculer des clés uniquement à partir de métadonnées d'appareils représente une surface d'attaque fondamentalement différente.
L'entreprise a publié un document technique de référence le 1er août expliquant ce qui n'a pas fonctionné. Il s'agit d'un document inhabituellement franc ; en résumé, le portefeuille a effectivement lancé des dés pipés pendant huit ans sans que personne ne s'en aperçoive.
Zéro, c'est toujours quelque chose
En 2021, Coinkite a migré la cryptographie de Coldcard vers libsecp256k1, la même bibliothèque utilisée par Bitcoin Core. C'est lors de cette intégration que le problème a commencé.
La migration a silencieusement redirigé la génération de graines, l'éloignant du générateur de nombres aléatoires matériel de Coldcard pour la reporter sur le mécanisme de secours logiciel de MicroPython — un petit algorithme appelé Yasmarang, conçu pour les appareils dépourvus de puce d'aléatoire.
🚨LOSSES FROM COLDCARD HACK EXCEED $100M
High confidence 1,596 BTC has been stolen from ~7300 addresses across 3 confirmed waves + more 14 smaller incidents.
If we add suspected (but unconfirmed), the total balloons to $130m (2k BTC).
More in the thread below 👇 pic.twitter.com/RAl3ib67qa
— Galaxy Research (@glxyresearch) August 3, 2026
Coldcard dispose bien d'une puce d'aléatoire. Elle a simplement cessé d'être appelée.
La raison est presque trop petite pour y croire. Une protection de compilation utilisait #ifndef, qui vérifie si un paramètre est défini plutôt que s'il est activé. Coinkite avait défini ce paramètre à zéro, c'est-à-dire « désactivé ». Comme zéro compte toujours comme une valeur définie, la vérification de sécurité a réussi et la compilation s'est terminée normalement. Les deux versions de la fonction ayant des signatures identiques, rien ne semblait anormal. Les erreurs de configuration de compilation de ce type — où une directive de préprocesseur sélectionne silencieusement le mauvais chemin de code — constituent une catégorie de défauts reconnue en développement C et C++, mais elles sont notoirement difficiles à détecter par les tests car le binaire compilé se comporte normalement à tous les égards observables.
« L'essentiel de l'aléatoire sur le COLDCARD provenait d'un PRNG dont j'ignorais qu'il était réellement présent 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 ayant l'apparence d'être aléatoires mais suivant une recette fixe à partir d'une valeur initiale. Fournissez à la recette la même valeur initiale et le résultat sera identique, à chaque fois.
Sur les appareils Mk2 et Mk3 exécutant les firmware 4.0.1 à 4.1.9, cette valeur initiale était dérivée 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 ont incorporé une petite quantité d'entropie de l'élément sécurisé, portant l'espace de recherche à environ 72 bits.
Aucun des deux chiffres n'atteint 128, l'objectif visé.
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'existe d'atomes dans l'univers observable, rendant la recherche par force brute effectivement impossible. Quarante bits représentent environ mille milliards de possibilités — un nombre qu'un ordinateur portable standard peut traiter. Chaque bit perdu divise par deux le travail nécessaire à l'attaquant.
L'équipe d'ingénierie de Block, qui a publié sa propre analyse, a évalué 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 essais. Leur évaluation pour les cartes plus anciennes est plus directe : étant donné un identifiant d'appareil connu, un état de minuterie et un historique d'appels, la génération de portefeuille est déterministe. Or, déterministe est l'opposé d'aléatoire — la propriété essentielle à la cryptographie.
Pas « faible ». Prévisible.
Coinkite soupçonne que la vulnérabilité a été découverte par analyse automatisée du code. « 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 soumis le même code à l'un des meilleurs modèles d'IA disponibles 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 n'a profité qu'aux mauvais acteurs. »
Un firmware corrigé a été publié pour tous les modèles concernés. Il ne répare pas les graines existantes ; ces portefeuilles doivent être régénérés et les fonds déplacés. Decrypt a expliqué comment le stockage air-gapped évolue après un exploit de ce type et suivi l'escalade des pertes au-delà de 114 millions de dollars.
Ce qu'est réellement l'entropie
L'entropie mesure ce qu'un attaquant ne sait pas — en d'autres termes, l'incertitude comptée en bits. Un bit équivaut à un tir à pile ou face : deux résultats, le devineur ayant raison une fois sur deux. Dix bits équivalent à 1 024 résultats. Chaque bit supplémentaire double la charge de travail du devineur.
Un portefeuille Bitcoin est fondamentalement un très grand nombre gardé secret. L'adresse à laquelle les gens envoient des pièces en est dérivée mathématiquement, et cette dérivation fonctionne dans un seul sens — on peut passer de la clé à l'adresse, mais jamais l'inverse.
La sécurité de chaque portefeuille repose donc 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 la physique ne le permet ». S'il a été choisi avec 40 bits, 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 le lien mathématique entre clé et adresse. Le bug Coldcard n'a jamais rien nécessifié d'aussi sophistiqué. Il a rendu les clés devinables avant même que ces mathématiques n'entrent en jeu.
Le vocabulaire devient ici glissant. Un générateur pseudo-aléatoire produit un résultat qui réussit les tests statistiques d'aléatoire — rien qu'un tableur signalerait. Ce résultat, cependant, reste entièrement déterminé par sa valeur de graine. Il a l'air aléatoire mais ne l'est pas.
L'aléatoire statistique et l'imprévisibilité cryptographique sont des propriétés différentes. Le résultat de Coldcard aurait réussi le premier test sans difficulté tout en échouant complètement au second.
Le véritable aléatoire doit provenir de bruit physique : fluctuations électriques dans un circuit, variations thermiques, désintégration radioactive. C'est précisément à cela que servait la puce matérielle du Coldcard. C'est la puce que l'indicateur de compilation a déconnectée.
Puis Luke Dashjr a évoqué les dés
Alors que les utilisateurs se précipitaient pour régénérer leurs graines, beaucoup se sont tournés vers la solution low-tech évidente. Les Coldcard permettent de lancer des dés physiques et d'intégrer les résultats comme entropie. Les propres recommandations de Coinkite considèrent les graines créées avec au moins 50 lancés de dés indépendants et privés comme non exposées au bug. L'entreprise vend même un sachet de « 100 petits dés mignons » pour faciliter le processus.
Le 31 juillet, le développeur Bitcoin Core Luke Dashjr a publié un avertissement : « Pas mal de gens suggèrent/utilisent des dés pour atténuer la vulnérabilité Coldcard. Notez que les dés ordinaires ne sont pas conçus pour être cryptographiquement sécurisés. Si vous allez faire ça, vous devriez probablement acheter des dés de casino de précision. Et même dans ce cas, ajoutez une autre source d'entropie. »
Bitcoin Twitter ne l'a pas pris calmement.
« mdr maintenant on ne peut même plus lancer de dés », a écrit un utilisateur. « L'auto-garde est finie… » Un autre a demandé s'il devrait engager quelqu'un atteint de Parkinson pour les lancer.
should I hire someone with parkinsons to throw the dice? — Murern (@Bitcoin_Murern) July 31, 2026
La réponse la plus utile techniquement est arrivée avec des calculs. Le développeur Justin Sharp a calculé exactement combien un dé biaisé coûte en entropie :
« Exagéré. Un d6 parfait donne 2,585 bits par lancer. Un dé visiblement biaisé, par exemple avec une face tombant 20 % du temps au lieu de 16,7 %, donne encore environ 2,55 bits. Sur 99 lancers, cela fait la différence entre ~256 bits et ~252 bits d'entropie. »
Quatre bits sur 256. C'est là toute la pénalité pour un dé visiblement injuste.
Dashjr n'a pas tort sur le fait que les dés bon marché présentent 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 les enjeux. Perdre quatre bits sur 256 laisse 252. Le bug de Coldcard a laissé les utilisateurs à 40.
Il y a un argument plus pointu enfoui dans son conseil, et il ne porte pas sur la tolérance de fabrication. Il s'agit de ne faire confiance à aucune source unique d'entropie. L'échec de Coldcard n'était pas que son aléatoire était légèrement biaisé — c'est qu'un composant a silencieusement cessé de contribuer et que rien ne l'a détecté.
Que faire
Si vous avez généré une graine sur un Coldcard concerné sans lancés de dés ou sans phrase secrète BIP-39 robuste, cette graine doit être considérée comme compromise.
Les étapes recommandées : mettre à jour le firmware, générer une nouvelle graine, vérifier l'empreinte, envoyer une transaction test, puis transférer tous les fonds. L'avis de Coinkite détaille la procédure modèle par modèle. Les graines exportées emportent la faille avec elles — importer une graine compromise dans une autre application de portefeuille ne résout rien.
Pour tous les autres, la leçon n'est pas que les portefeuilles matériels sont défectueux ou que les dés sont un piège. C'est que « aléatoire » est une affirmation, et que 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 présent dans le binaire. Les examinateurs ont confirmé son existence mais n'ont jamais vérifié que le générateur de graines l'appelait réellement. Le modèle open-source que Coldcard a adopté repose précisément sur ce type de scrutin communautaire pour détecter les failles avant les attaquants. Huit ans d'audits ont examiné le bon code. Personne n'a vérifié s'il s'exécutait.