Leser und Leserinnen von Mastering Bitcoin aufgepasst: Bitcoin-Wallets, die mit dem sogenannten Libbitcoin-Explorer erstellt wurden, sind durch einen kryptografisch schlecht implementierten Zufallszahlengenerator sehr unsicher und sollten schleunigst geräumt werden. Der Libbitcoin-Explorer, eher bekannt unter dem Kürzel bx, ist ein handliches Tool für die Kommandozeile, mit allerlei Funktionen zur Bitcoin Schlüssel- und Walletverwaltung. Darunter auch die Möglichkeit, mit dem bx seed Befehl, eine vermeintlich sichere, neue Wallet mit 12 bzw. 24 Wiederherstellungswörtern zu erzeugen.

Bekannt ist der Libbitcoin-Explorer vor allem durch die prominente Erwähnung im technischen Bitcoin-Buch Mastering Bitcoin. Ein ganzer Anhang widmet sich der Funktionsweise und Nutzung des Tools. David A. Harding, der gerade mit dem Schreiben der überarbeiteten und dritten Auflage der beliebten "Bitcoin-Bibel" beschäftigt ist, warnt dazu auf X bzw. Twitter:

Auszug der Stelle aus Mastering Bitcoin (Appendix A)

Wenn ihr mithilfe des Bitcoin Explorer von Libbitcoin eine Wallet generiert habt, wie im Anhang von "Mastering Bitcoin" beschrieben, sind eure Bestände gefährdet (oder bereits gestohlen).

David A. Harding auf X

Milk Sad

Die Autoren tauften ihre Schwachstelle mit einem eher unkonventionellen, aber dennoch passenden Namen. Denn erstellt man mit dem Libbitcoin-Explorer eine neue Wallet, und zwar mit einer auf null gesetzten Systemzeit, erhält man jedes Mal die exakt gleiche Mnemonic:

milk sad wage cup reward umbrella raven visa give list decorate bulb gold raise twenty fly manual stand float super gentle climb fold park

Grund dafür ist die Verwendung eines kryptografisch unsicheren Pseudozufallszahlengenerators (PRNG). Anders als ursprünglich in Mastering Bitcoin beschrieben, bedient sich das bx-Tool nämlich nicht an vom Betriebssystem bereitgestellten Zufallszahlen, welche in der Regel eine ausreichend gute Qualität bieten, sondern am PRNG Mersenne Twister der hier lediglich die Systemzeit als Eingabewert nimmt, und daraus "zufällige" Zahlen berechnet, die natürlich alles andere als zufällig sind. Es ist nicht eindeutig klar, ob dies schon immer der Fall war, oder erst mit späteren Versionen zum Schlechteren geändert wurde. Betroffen sein sollen Versionen ab 3.0.0, also ungefähr seit 2017, wobei sich auch frühere Versionen in bestimmten Systemumgebungen als unsicher herausstellten.

Da es sich bei der Systemzeit um einen 32 Bit großen Wert handelt, ist jede mit dem Tool erstellte Wallet nur eine von 232, also von ungefähr vier Milliarden Möglichkeiten. Was zunächst nach viel klingt, ist für einen Computer ein Kinderspiel. Die Autoren sprechen davon, dass ein üblicher Gaming-PC in "unter einem Tag" den gesamten Suchraum abgrasen, und auf dem Weg natürlich sämtliche Wallets leerräumen könnte. Wobei dies durch die Verwendung der Zeit, welche sich entsprechend auf die letzten Jahre einschränken lässt, nicht einmal nötig wäre.

Nutzer einer mit dem Libbitcoin-Explorer erstellten Wallet sind also dringend dazu angeraten, ihre Bitcoin, sofern nicht schon geschehen, von dieser abzuziehen und in Sicherheit zu bringen!

Schlechter Pseudozufall

Zufall ist auf einem Computer eine tückische Sache. Denn auf einem Mikrochip kann streng genommen eigentlich gar nichts "zufällig" geschehen. Daher unterscheidet man vereinfacht gesagt zwischen "echten" Zufallszahlengeneratoren (TRNG bzw. HRNG) und solchen, dessen Zufallszahlen eindeutig und mathematisch von einem Startwert berechnet werden können, also nur pseudozufällig sind (PRNG).

Letztere sind allerdings nicht automatisch unsicher. Es gibt durchaus Pseudozufall, der bei korrekter Implementierung als kryptografisch sicher gelten kann. Man spricht dann explizit von kryptografisch sicheren Pseudozufallszahlengeneratoren (CSPRNG). Wie man sich bereits denken kann, ist der im Libbitcoin-Explorer verwendete PRNG davon natürlich weit entfernt.

Doch auch über die Milk Sad Schwachstelle hinaus, von der wahrscheinlich verhältnismäßig wenig Nutzer betroffen sind, lässt sich ein entscheidendes Fazit ziehen: Die Nutzung eines "Offline-Computers", der extra zur vermeintlich sicheren Erstellung einer Bitcoin-Wallet genutzt wird, ist kein Garant für Sicherheit. Auch bei einer aktiv betreuten Open-Source Bibliothek wie Libbitcoin kann es zu gravierenden Implementierungsfehlern kommen. Als einfacher Nutzer hat man in der Regel keine Chance etwas davon mitzubekommen, weshalb gerade im Open-Source Bereich sogenannte Bug-Bounty Programme extrem wichtig sind.

Sicherheit kann nie perfekt sein, auch nicht bei einer Hardware-Wallet, doch bei diesen profitiert man im direkten Vergleich von einer deutlich übersichtlicheren und damit auch sichereren Umgebung. Wie einige andere Hardware-Wallets auch, bezieht die von Blocktrainer.de empfohlene BitBox02 ihre Zufallszahlen aus gleich mehreren Quellen, darunter zwei voneinander unabhängige echte Zufallszahlengeneratoren (TRNG), die nicht vorhersehbare Prozesse wie thermisches Rauschen aus der Umgebung zur Zufallserzeugung nutzen. Wer hier trotzdem noch misstrauisch ist, kann sogar zu einem besonders "handlichen" TRNG greifen: einem handelsüblichen Würfel.