Laut Block entstand die Schwachstelle durch einen Firmware-Integrationsfehler aus dem März 2021. Dadurch wurde die Seed-Erzeugung an einen deterministischen Software-Pseudozufallszahlengenerator weitergeleitet statt an den Hardware-Zufallszahlengenerator des STM32. Ein Angreifer, der die Geräte-UID, den Zustand des Timers und den Verlauf früherer RNG-Aufrufe bestimmen oder ausreichend eingrenzen kann, soll nach Darstellung von Block mögliche Ausgabeströme offline nachbilden können. Die so erzeugten Kandidaten lassen sich anschließend über die Ableitung ihrer Adressen mit öffentlichen Blockchain-Daten abgleichen.
Block führt den Fehler auf die Produktionskonfiguration von Coldcard zurück. Dort ist MICROPY_HW_ENABLE_RNG auf null gesetzt, weil Coinkite einen eigenen Hardware-RNG-Wrapper bereitstellt. Die Bibliothek libngu habe jedoch nur geprüft, ob das Makro existiert, nicht ob es aktiviert ist. Dadurch sei der Build an MicroPythons Yasmarang-Fallback gebunden worden. Dieser Fallback wurde mit der eindeutigen Chip-ID und Timer-Registern initialisiert und sammelte nach der Initialisierung keine neue Entropie mehr ein.
Coinkite beziffert die effektive Entropie auf etwa 40 Bit beim Mk3 sowie auf rund 72 Bit bei Mk4, Mk5 und Q. Zum Vergleich nennt das Unternehmen 128 Bit für einen 12-Wort-BIP-39-Seed. Block nennt keine einzelne praktische Kennzahl, setzt aber bedingte Obergrenzen unterhalb von 2 hoch 40,7 beziehungsweise 2 hoch 73,3 und warnt ausdrücklich, dass Letzteres nicht mit 73 Bit kryptografischer Sicherheit gleichzusetzen ist. Einen Brute-Force-Benchmark hat Block nicht veröffentlicht.
Wie aufwendig ein Angriff praktisch ist, hängt Block zufolge von mehreren Faktoren ab: von verfügbaren Informationen zur UID, vom Boot-Zeitpunkt, von früheren RNG-Aufrufen und von den Kosten der Ableitung. Bei späteren Modellen erhöht ein erneutes Seeding zwar die Zahl möglicher Kandidaten, beseitigt das Grundproblem aber nicht. Entscheidend ist nach Angaben von Coinkite die Firmware, die zum Zeitpunkt der Seed-Erzeugung lief, nicht die Version, die heute installiert ist.
Coinkite hat am 31. Juli Notfall-Firmware für alle betroffenen Modelle und Release-Kanäle ausgeliefert. Das Unternehmen betont jedoch, dass die Installation keinen bereits existierenden Seed repariert. Wer einen betroffenen Seed nutzt, soll auf gepatchter Firmware einen neuen Seed erzeugen und die Coins transferieren. Auch das Wiederherstellen des alten Seeds in aktualisierter Firmware oder in einer anderen Wallet schleppt die Schwäche weiter mit.
Nicht betroffen sind laut Coinkite Seeds, die mit mindestens 50 fairen, unabhängigen und geheimen Würfelwürfen erzeugt wurden. Wenn Zahl oder Vertraulichkeit der Würfe unklar sind, empfiehlt das Unternehmen eine Migration. Eine starke, einzigartige BIP-39-Passphrase erzeugt zwar eine separate Wallet, die mit den Seed-Wörtern allein nicht erreichbar ist, dennoch rät Coinkite auch dann zum Austausch des Seeds. Multisig hilft nur, wenn das Quorum nicht vollständig aus betroffenen Geräten besteht. TAPSIGNER, OPENDIME und SATSCARD verwenden andere Codebasen und sind laut Coinkite nicht betroffen.
Einen Namen für den Angreifer gibt es nicht. Galaxy, das die Bereinigung über 1.196 Adressen kartiert hat, erklärte, in den vorausgegangenen 30 Tagen keine anderen Bitcoin-Transaktionen mit derselben Signatur aus 30 sat/vB und ohne Wechselgeld gefunden zu haben. Zugleich warnte das Unternehmen davor, das Muster mit dem Diebstahl selbst gleichzusetzen: Ein solcher Sweep sehe „genauso aus, als hätte sich ein Coin-Besitzer entschieden, seine Coins zu verschieben“.
Die Offenlegung folgt auf Coinspects Forschung „Ill Bloom“ von Anfang Juli. Dabei ging es um einen separaten Fehler mit schwachem PRNG in älteren Software-Wallets, der seit Mai mit mehr als 5 Millionen US-Dollar in Verbindung gebracht wird, die aus Adressen bei Bitcoin, Ethereum, Tron, Rootstock und Polygon abgezogen wurden.
