Der Raubzug dauerte 41 Minuten
Am 30. Juli arbeitete sich jemand durch 1.196 Bitcoin-Adressen und leerte sie, insgesamt 1.082,65 Bitcoin im Wert von etwa 70,2 Millionen Dollar, in einem Fenster von 41 Minuten. Niemand knackte ein Schloss. Kein Gerät wurde angefasst, kein Nutzer per Phishing getäuscht, kein Server kompromittiert. Der Angreifer brauchte nichts davon, denn die privaten Schlüssel dieser Adressen ließen sich von Grund auf errechnen. Erste Meldungen bezifferten den Schaden auf knapp 38 Millionen Dollar; als die Auswertung abgeschlossen war, lag die Zahl bei fast dem Doppelten.
Betroffen waren Coldcard-Hardware-Wallets von Coinkite, also genau jene Produktkategorie, die man kauft, um Schlüssel von Netzwerken fernzuhalten. Das macht den Vorfall für jeden Unternehmer eine Stunde Aufmerksamkeit wert, unabhängig davon, was er von Bitcoin hält. Das Versagen geschah nicht an der Außengrenze, für die alle budgetieren. Es geschah in dem Moment, in dem das Geheimnis erzeugt wurde, Jahre bevor jemand versuchte, es zu stehlen.
Ein auf null gesetztes Makro schaltete den Ersatz ein
Coinkites eigene technische Darstellung ist über den Mechanismus ungewöhnlich offen. Im März 2021 wurde die Seed-Erzeugung im Zuge einer Migration auf libsecp256k1 von Bitcoin Core aus der Routine, die den Hardware-Zufallsgenerator des Geräts aufrief, auf eine allgemeine Funktion umgeleitet. Dieser neue Pfad löste sich auf den Software-Ersatz von MicroPython auf statt auf Coldcards Hardware-Implementierung. Der Ersatzcode selbst bestand seit Mai 2018 und hatte die Seed-Erzeugung bis zu jener Migration nie berührt.
Warum er überhaupt einkompiliert wurde, gehört in jede eigene Prüfliste. Die Schutzabfrage um den Ersatz testete, ob ein Konfigurationsmakro definiert war, nicht ob es auf eins stand. Die Entwickler hatten es auf null gesetzt, weil der Hardware-Generator dort nicht gebraucht wurde, und ein auf null gesetztes Makro ist immer noch ein definiertes Makro. Die Abfrage las das Vorhandensein des Wertes statt den Wert selbst und schaltete den Ersatz ein. Niemand schrieb schwache Kryptografie. Der Hardware-Generator existierte und funktionierte. Er war nur nicht mehr das, woraus der Seed gezogen wurde.
Fünf Jahre vergingen, und jeder Test blieb grün
Auf Mk2- und Mk3-Geräten mit Firmware 4.0.1 bis 4.1.9 trugen die entstandenen Seeds etwa 40 Bit Entropie statt der 128, die eine zwölf Wörter lange Phrase haben sollte. Auf Mk4, Mk5 und Q sah es besser aus, aber nicht sicher: Entwickler hatten Werte aus den Sicherheitselementen in den Generatorzustand gemischt, in Coinkites Formulierung als Reserve der Reserve, was jene Seeds auf rund 72 Bit hob. Beide Zahlen sind auf dieselbe Weise katastrophal. Zufall lässt sich nicht ansehen. Ein Schlüssel mit 40 Bit signiert Transaktionen, prüft Adressen und stellt sich aus dem Backup wieder her, genau wie einer mit 128. Jeder Funktionstest, den das Unternehmen und seine Kunden fünf Jahre lang fuhren, bestand also zu Recht, während das Produkt kaputt war.
Coinkite nennt zudem eine Einzelheit, die die meisten Anbieter vergraben hätten. Vor einigen Wochen, schreibt das Unternehmen, habe man eines der besten verfügbaren KI-Modelle zur Sicherheitsprüfung des eigenen Codes eingesetzt, und es habe diesen Fehler nicht gefunden. Damit sollte man sich befassen, bevor der nächste Anbieter erklärt, sein Code sei von einem Modell geprüft worden. Der Defekt war im Rückblick nicht subtil und nicht versteckt, aber er lebte in der Fuge zwischen einer Build-Konfiguration und einer kryptografischen Annahme, also genau dort, wo ein auf Codequalität lesender Prüfer am wenigsten eine Sicherheitsgrenze vermutet.
Die Korrektur schützt den nächsten Schlüssel, nicht den letzten
Coinkite lieferte am 31. Juli korrigierte Firmware für jedes betroffene Modell und jeden Zweig aus: 4.2.0 für Mk2 und Mk3, 5.6.0 für Mk4 und Mk5, 1.5.0Q für Q sowie die entsprechenden Edge-Builds. Dann veröffentlichte es den Satz, der schwerer wiegt als der Patch. Ein Firmware-Update ändert oder repariert einen vorhandenen Seed nicht. Die Anweisung lautet, die korrigierte Firmware zu installieren, auf dem aktualisierten Gerät einen neuen Seed zu erzeugen, dessen Sicherung aufzuschreiben und zu prüfen, bevor irgendetwas eingezahlt wird, eine neue Empfangsadresse auf dem Gerätedisplay zu bestätigen, eine kleine Testüberweisung zu senden und erst dann die restlichen Mittel zu bewegen.
Das ist eine Migration, kein Update, und in dieser Unterscheidung liegt die ganze Lehre. Zwei Dinge konnten eine im betroffenen Zeitraum erzeugte Wallet retten: fünfzig unabhängige, private Würfelwürfe über die geräteeigene Würfelfunktion, da Coldcard diese in den Seed einrechnete, oder eine starke, einmalige Passphrase, die als eigene Barriere vor dem schwachen Seed steht. Coinkite rät selbst passphrasengeschützten Nutzern, sobald es praktikabel ist zu migrieren. TAPSIGNER, OPENDIME und SATSCARD nutzen andere Codebasen und sind nicht betroffen.
Inventarisieren Sie das Erzeugte, nicht nur das Laufende
Nahezu jeder Patch-Prozess, den ein Eigentümer je freigegeben hat, behandelt die Softwareversion als Einheit des Risikos. Man erfährt, dass eine Version verwundbar ist, aktualisiert sie, und die Gefährdung endet. Entropiefehler brechen dieses Modell vollständig, denn der Schaden steckt nicht im laufenden Code, sondern in Artefakten, die der Code ausgab und übergab: Schlüssel, Token, Sitzungskennungen, Wiederherstellungscodes, API-Geheimnisse, Zertifikate. Diese Objekte überleben die Version, die sie erzeugte, wandern in Sicherungen und Fremdsysteme und tragen die Schwäche dauerhaft mit sich. Ein aktualisierter Generator beendet die Produktion schlechter Geheimnisse. Am Bestand ändert er nichts.
Die Frage an jeden Anbieter, dessen Produkt in Ihrem Namen Geheimnisse erzeugt, lautet also nicht nur, welche Versionen betroffen sind. Sie lautet, welche Geheimnisse auf einer betroffenen Version entstanden, wie man sie auflistet und wie der Austauschpfad aussieht. Das gilt weit über Hardware-Wallets hinaus: für das HSM im Zahlungsstapel, die Zertifizierungsstelle, die Geräteproduktionslinie, den Identitätsdienst, der langlebige Token ausgibt. Überall, wo eine Maschine etwas prägt, worauf Sie sich später verlassen, ist das fehlerhafte Zeitfenster das Inventar, und fast niemand führt darüber Buch.
Weiterlesen: Drei Firmen entscheiden, ob Ihr Handy günstig bleibt | Siemens und Schneider kamen am 22. Juli dazu



