Hacker knackt Bitcoin-Adresse – und demonstriert damit, wie extrem sicher Bitcoin ist

Eine GPU. Bild von Binary Koala via flickr.com. Lizenz: Creative Commons

Der Hacker und Lightning-Entwickler John Cantrell hat eine Bitcoin-Adresse geknackt, auf der ein Bitcoin lag. Befürchtungen, dass Bitcoins damit unsicher sind, sind aber unnötig. Ganz im Gegenteil. Denn Cantrell hatte einen entscheidenden Hinweis.

Es begann damit, dass John Cantrell auf einen Wettbewerb einstieg, den Alistair Milne auf Twitter gepostet hatte:

Milne postete eine Adresse, auf der ein Bitcoin liegt. Er erklärte, diese Adresse mit einer 12-Wörter-Mnemonik generiert zu haben, und kündigte an, im Lauf der folgenden 30 Tage die Wörter zu veröffentlichen.

Cantrell ist vor allem als Lightning-Entwickler bekannt. Er hat beispielsweise Juggernaut entwickelt, ein Tool, um im Lightning-Netzwerk verschlüsselte Nachrichten zu versenden. Der Lightning-Node wird dabei zum Chat-Server. Als er von dem Wettbewerb hörte, beschloss er, den Bitcoin mitzunehmen. Also begann er zu kalkulieren.

In einem Blogpost erzählt er, wie es ihm gelang, die Adresse zu knacken.

Mathematik und Grafikkarten

Wenn die Mnemonik mit BIP39 geschaffen wurde, besteht sie aus zwölf von 2048 möglichen Wörtern. „Das bedeutet, wenn wir alle möglichen Phrasen iterieren würden, müssten wir von 0 zu  2^128−1 zählen. Jede Zahl wäre eine einzelne Mnemonik, die in eine Adresse übersetzt werden würde.“ Das „^“ steht für „hoch“. Die Zahl 2^128−1 ist verwirrend, weil ein Nicht-Mathematiker kaum erkennt, ob sie nun groß, sehr groß oder extrem groß ist.

Man könnte an die arabische Legende vom Schachbrett denken. Ein König erfüllt einem Diener einen Wunsch, und der möchte, dass sein König ein Reiskorn auf ein Feld eines Schachbretts legt, und dann die Anzahl der Körner bei jedem weiteren Feld verdoppelt. Ein Schachbrett hat 64 Felder, daher wäre die Formel für die Anzahl an Reiskörnern, die auf das letzte Feld gelangen, 2^64−1. Das sind mehr als 9 Trillionen Reiskörner. Die gesamte Menge auf dem Schachbrett wären 18 Trillionen Reiskörner, was laut Wikipedia mehr als tausend Mal so viel Reis ist, wie die gesamte Erde 2017 produziert hat.

Und diese Zahl ist nur ein Bruchteil der Anzahl an Möglichkeiten einer Seed. Mit jeder weiteren Hochzahl verdoppelt sich die Summe etwa. 2^128 wäre diese Zahl:

340.282.366.920.938.463.463.374.607.431.768.211.456

Wenn ich richtig gezählt habe, wären das 340 Quintilliarden. Ich habe keine Ahnung, ob es dafür irgendeine Entsprechung in der Wirklichkeit gibt. Für die Computer, die wir heute benutzen, ist es in jedem Fall unendlich viel zu viel.

Aber zum Glück für Cantrell hat Milne im Lauf der Zeit immer weitere Wörter der Seedphrase verlautbart. „Jedes Wort, das wir kennen, reduziert die Möglichkeiten, die wir prüfen müssen, um den Faktor 2^11 oder 2048“. Die Schwelle, ab der es für Cantrell realistisch war, waren acht Wörter. „Mit acht Wörten kennen wie 8*11 oder 88 Bits der 128 Bits, die wir rausfinden wollen. Das bedeutet, es gibt ’nur‘ noch 2^(128-88) oder 2^40 mögliche Mnemoniks, die wir prüfen müssen.“ Das sind etwa 1,1 Trillionen Optionen. Wir haben also eine Zahl, die deutlich kleiner ist, als die am Ende des berühmten Schachbretts.

Also hat Cantrell es versucht. Er schrieb ein Script in Rust, um die Hashes und elliptischen Kurven, die involviert sind, zu berechnen. Aber mit der CPU seines Laptops konnte er damit nur etwa 1.250 Seeds je Sekunde berechnen, womit er 25 Jahre gebraucht hätte, um alle Kombinationen durchzugehen. Also mietete er einen CPU-Server mit 32 Kernen. Das brachte ihn auf 8.000 Seeds je Sekunde. Aber das war immer noch lange nicht genug.

Der nächste Schritt war es, von der CPU auf eine GPU umzusteigen. CPUs, die Kernrecheneinheiten aller Computer, sind nicht sehr schnell, können dafür aber alles. GPUs, wie sie in Grafikkarten verbaut sind, sind sehr viel schneller, aber nur für Aufgaben zu gebrauchen, die man gut parallelisieren kann – wie das Abarbeiten von Seeds. Cantrell lernte also, für GPUs zu programmieren. Nachdem er ein Script dafür geschrieben hatte, konnte er mit einer nVidia 2080Ti Grafikkarte 12 Milliarden Seeds am Tag ausrechnen. Das war schon mal gut, aber er würde noch immer 83 Tage brauchen. Er schrieb noch eine Bibliothek um, um einen Rechenvorgang zu beschleunigen, aber das senkte den Zeitraum nur um drei Tage. Um den Schlüssel also innerhalb von 24 Stunden zu finden, musste er mit 80 Grafikkarten arbeiten.

Diese GPU-Farm konnte er über einen digitalen Marktplatz anmieten. Er ließ sein Programm laufen und wartete gespannt darauf, ob es funktionierte und ob seine Kalkulationen korrekt gewesen waren. Und, ja, sie waren es, zumindest im Groben. Nach etwa 30 Stunden fand er den Schlüssel zu der genannten Adresse. Er überwies sich den Bitcoin und fügte eine hohe Transaktionsgebühr hinzu, um sicherzugehen, dass ihn niemand anderes überbot, der den Schlüssel vielleicht ebenfalls gefunden hatte.

Konsequenzen für die Sicherheit

Eine oberflächliche Lesart des Hacks könnte dazu verleiten, zu denken, Bitcoin wäre nicht sicher. Tatsächlich aber zeigt der Fall, dass eine Seed unglaublich sicher ist. Wenn es schon so aufwändig ist, die Seed zu vervollständigen, wenn man acht Wörter hat – dann wird es beinah unmöglich, in einem vernünftigen Zeitraum und zu vernünftigen Kosten einen Seed zu knacken, selbst wenn man 5 oder 6 Wörter hat. Für einen kompletten Seed wäre man in Zahlenbereichen, bei denen man vermutlich Sterne verglühen lassen müsste.

Vor allem hatte Cantrell einen entscheidenden Vorteil: er wusste, um welche Adresse es sich handelt. Daher konnte er sein Script danach schauen lassen, ob sich aus einem Seed diese eine Adresse ableitete. Was aber, wenn man die Adresse nicht kennt? In dem Fall muss man einen Bitcoin-Node fragen, ob auf den Adressen ein Guthaben ist, und das bei jeder der eine Trillion Adressen. Die API des Bitcoin-Nodes würde eine solche Last nicht mitmachen; eventuell könnte man die Blockchain in eine andere Datenbank überspielen und sie dann fragen. Aber auch das würde gewaltige Ressourcen erfordern, da die Datenbank auf demselben System sein müsste die GPU; selbst eine Abfrage in einem lokalen Netzwerk würde vermutlich die Performance empfindlich stören.

Für das Speichern von Bitcoins hat das nun einige interessante Konsequenzen:

1. Ist es gar nicht so blöd, beispielsweise 4 oder 5 oder vielleicht sogar 6 Wörter in der Cloud zu speichern. Solange die Adresse nicht bekannt ist, weiß ein Hacker nicht, ob es sich lohnt, 100 Grafikkarten über Tage hin laufen zu lassen. Man könnte daraus neue Sicherheitskonzepte generieren, beispielsweise dass man 6 Wörter in der Cloud dupliziert speichert, und sich den Rest ins Gedächtnis einprägt oder verschlüsselt abspeichert. Eine solche hybride Methode könnte Brainwallets wieder attraktiv machen.

2. Wenn Sie eine Seed haben, und einige Wörter nicht lesen können, aber bei mindestens acht Wörtern sicher sind: Sie können die Scripte verwenden, die Cantrell am Ende seines Posts verlinkt. Wenn Sie nicht in der Lage sind, 80 GPUs zu koordinieren oder die Scripte auf Ihrem System 80 Tage laufen zu lassen – je nach Inhalt der Wallet lohnt es sich, einen Experten zu engagieren.

Über Christoph Bergmann (1817 Beiträge)
Das Bitcoinblog wird von Bitcoin.de gesponsort, ist inhaltlich aber unabhängig und gibt die Meinung des Redakteurs Christoph Bergmann wieder. Christoph hat vor kurzem ein Buch geschrieben: Bitcoin: Die verrückte Geschichte vom Aufstieg eines neuen Geldes. Das Buch stellt Bitcoin in seiner ganzen Pracht dar. Ihr könnt es direkt auf der Webseite Bitcoin-Buch.org bestellen - natürlich auch mit Bitcoin - oder auch per Amazon. Natürlich freuen wir uns auch über Spenden in Bitcoin, Bitcoin Cash oder Bitcoin SV an die folgende Adresse: 1BergmanNpFqZwALMRe8GHJqGhtEFD3xMw. Wer will, kann uns auch Hier mit Lightning spenden. Tipps für Stories sind an christoph.bergmann@mailbox.org immer erwünscht. Wer dies privat machen möchte, sollte meinen PGP-Schlüssel verwenden.

6 Kommentare zu Hacker knackt Bitcoin-Adresse – und demonstriert damit, wie extrem sicher Bitcoin ist

  1. Wie so oft, super Bericht, super Zusammenfassung, danke Christoph Bergmann.

  2. Gott sei dank habe ich im Medium-Artikel folgende Annahme gefunden:
    „I assumed the words he was releasing were in the correct order. If they were not in order there would have been 8! (factorial) more possibilities (making 8 words basically impossible to brute force) and my code wasn’t trying the different permutations anyway.“
    Dann lege ich mich wieder schlafen.

  3. 340 Sextillionen, lieber Christoph.

  4. hahhahahahah // 27. Juni 2020 um 10:54 // Antworten

    „Jedes Wort, das wir kennen, reduziert die Möglichkeiten, die wir prüfen müssen, um 2^11 oder 2048“.

    Ist falsch (übersetzt?)!
    Es geht nicht um 2^11 weniger Möglichkeiten sondern um einen FAKTOR 2^11.

Schreiben Sie einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Wechseln )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Wechseln )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Wechseln )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Wechseln )

Verbinde mit %s