Aufwand um einen Seed zu bruteforcen wenn x Wörter vorhanden sind?

Genau dieses Experiment wurde schon in Form eines Wettbewerbs durchgeführt.

Der Gewinner John Cantrell hat die letzten 4 Wörter einer 12-Wort-Seedphrase gebruteforced. Dafür brauchte er 30 Stunden, bei Verwendung eines Pools von Graphikkarten auf dem Level von Nvidia GeForce GTX 1080-Ti bis RTX 2080-Ti. Schätzungsweise waren im Mittel 50…100 Graphikkarten beteiligt. Die Kosten lagen bei ca. 400 USD.

Er hat dabei wie gesagt keinen der bekannten Cloud Computing Provider genutzt, sondern einen Marktplatz, auf dem jeder freie Rechenleistung seiner GPU anbieten kann. Über einen zentralen Rechner wurde die Rechenarbeit dann auf diese einzelnen GPUs verteilt.

Der Artikel ist 4 Jahre alt. Heutzutage sind die Graphikkarten nochmal schneller. Eine GeForce RTX 4090 hat z.B. auch 4x mehr Kerne als eine RTX 2080-Ti. Es gibt noch schnellere „Profi-Karten“ bei den Cloud Providern.

Bruteforcen von Passwörtern heutzutage

Wenn man die Bruteforce-Dauer heutzutage für verschiedene Anzahl fehlender Wörter abschätzen möchte, kann man sich auch an diesem Passwort-Artikel orientieren:

Das Ergebnis ist die bunte Tabelle oben, ganz am Anfang des Artikels.

Zur Einordnung ein kurzer Vergleich dieser Passwort-Tabelle mit dem Wettbewerb von oben:

Beim Bruteforcen der 4 Wörter im Wettbewerb musste am Ende eine Anzahl von 2^{40} Seedphrases geprüft werden (40 fehlende Bits in der Entropie der Seephrase). Bei jedem Seedphrase-Kandidat besteht der teuerste Rechenvorgang darin, den Seed mittels PBKDF2 (2048 Runden) aus der Seedphrase abzuleiten. Pro PBKDF2-Ableitung sind 4096 SHA-512-Hashes zu berechnen.

Für die Tabelle des Passwort-Artikels hingegen, wurde pro Passwort-Kandidat nicht 4096x mit SHA-512, sondern nur 32x mit bcrypt gehasht. Im Gegenzug ist bcrypt aber absichtlich langsamer als SHA-512.

Die GPU-Leistung sollte vergleichbar sein. Im Passwort-Artikel wurden 12 GeForce RTX 4090 eingesetzt. John Cantrell hat im Mittel wahrscheinlich 4…8 Mal so viele Karten eingesetzt, wobei diese aber auch um einen ähnlichen Faktor langsamer waren.

Im Passwort-Artikel wurden nur 8 Sonderzeichen berücksichtigt, was ca. 6,13 Bit Sicherheit pro Zeichen des Passworts entspricht. Ein Passwort mit 6 Zeichen entspricht damit ca. 2^{37} Bruteforce-Versuchen. Laut Tabelle dauert das Knacken 12 Stunden.
John Cantrell’s 2^{40} Versuche haben nicht ganz 2^{3} = 8 Mal länger gedauert, sondern nur etwas mehr als 1 Tag. Bei den entsprechenden Rundenzahlen ist PBKDF2 also immer noch schneller als bcrypt.

Aber die Größenordnungen der Gesamtdauer passen mehr oder weniger zufällig hervorragend zusammen. Beide Artikel scheinen also plausibel zu sein.

Zusammenfassend lässt sich sagen, dass sowohl John Cantrell als auch der Passwort-Artikel sich an dem Equipment orientieren, was für Privatpersonen noch als realistisch machbar angenommen wird.


Abschätzung auf Basis der Artikel

Da sich die Artikel grob entsprechen, verwende ich die entsprechenden Werte als Basis.

John Cantrell hat 2^{40}10^{12} Seedphrases in 30 Stunden ≈ 10^{5} Sekunden geprüft. Da der Wettbewerb 4 Jahre her ist, könnte man mit einer vergleichbaren Anzahl an Graphikkarten aktuellen Typs wahrscheinlich grob eine Größenordnung schneller bruteforcen.

Statt John Cantrells 10^{7} Seedphrases pro Sekunde rechne ich deshalb mit 10^{8} Seedphrases pro Sekunde. Das würde dann einem GPU-Pool mit 50…100 aktuellen Graphikkarten wie der GeForce RTX 4090 oder der professionellen A100 entsprechen.

Pro Wort der Seedphrase hat man 11 Bit Sicherheit. Das letzte Wort besteht zum Teil aus der Checksumme, bietet also weniger Sicherheit.
Bei einer 24-Wort-Seedphrase hat das letzte Wort nur 3 freie Bit und die Checksumme 8 Bit. Für das letzte zu bruteforcende Wort gibt es also im Mittel nur 2^{3} = 8 statt 2^{11} = 2048 Möglichkeiten, egal ob es sich am Ende befindet oder nicht.
Bei einer 12-Wort-Seedphrase hat das letzte Wort 7 freie Bit und die Checksumme nur 4 Bit, weshalb das Bruteforcen bei gleich vielen fehlenden Wörtern 16 Mal länger dauert.

Man erhält damit folgende Formel für die Bruteforce-Dauer:

Dauer = 2^{(11 \cdot Anzahl\ fehlende\ Wörter - Anzahl\ Checksum\ Bits)} \cdot 10^{-8}\ s

Das entspricht grob folgenden Größenordnungen:

                   	│ bei 24 Wörtern  │   bei 12 Wörtern
────────────────────┼─────────────────┼─────────────────
1 fehlendes Wort    │    < 1 Sekunde  │      < 1 Sekunde
2 fehlende Wörter   │    < 1 Sekunde  │      < 1 Sekunde
3 fehlende Wörter   │    < 1 Sekunde  │         Sekunden
4 fehlende Wörter   │        Minuten  │          Stunden
5 fehlende Wörter   │           Tage  │           Monate
6 fehlende Wörter   │     10^2 Jahre  │       10^3 Jahre
7 fehlende Wörter   │     10^5 Jahre  │       10^6 Jahre
8 fehlende Wörter   │     10^9 Jahre  │  Alter Universum

Das Ergebnis kann man auf eine vereinfachte Bruteforce-Faustformel herunterbrechen.

Bruteforce- Faustformel

Für 4 fehlende Wörter braucht man eine 1 Stunde. Für jedes weitere fehlende Wort braucht man einen Faktor 2000 länger. Für jedes Wort weniger entsprechend einen Faktor 2000 kürzer.

Beispiele:
Für drei fehlende Wörter braucht man in der Größenordnung von Sekunden (1/2000 Stunde).
Für sechs fehlende Wörter in der Größenordnung von einigen 100 Jahren (2000 * 2000 Stunden).

Man sieht, dass man ab ca. 6 fehlenden Wörtern aktuell noch einigermaßen sicher ist. Besser natürlich 8, wie beim Mnemonic Split (2/3) einer 24-Wort-Seedphrase.
Sollte sich die Rechenleistung jedes Jahr verdoppeln, wären 6 fehlende Wörter schon in 10 Jahren gefährlich, 8 Wörter in 30…40 Jahren. Aber evtl. geht es durch neue Technologien ja sogar schneller.

Natürlich würde das Ganze anders aussehen, wenn nicht Privatleute, sondern Institutionen solch einen Angriff durchführen würden. Alleine ChatGPT wurde z.B. auf 1000x mehr Graphikkarten trainiert. Was die NSA hat, will ich gar nicht wissen.

Noch schlimmer wäre es, ASICS für das Hashing einzusetzen. John Cantrell hat mehr als 10^{15} Hashes berechnet. Ein einzelner moderner Mining-ASIC schafft das in Sekunden. Allerdings kann man mit Mining-ASICS keine Seeds bruteforcen; man bräuchte spezialisierte Hardware.

Interessanter ist außerdem wie du richtig fragst, was die Kosten und der erwartete Gewinn eines Angriffs sind. Das ist aufgrund der vielen Unbekannten schwer abzuschätzen.
Man nimmt oben an, dass eine Privatperson sich zum Bruteforcen 50…100 Top-Graphikkarten wie die GeForce RTX 4090 oder die professionelle A100 mietet.
Bei der GPU-Börse hatte John Cantrell dafür vor vier Jahren ca. 10 USD pro Stunde gezahlt. Die Preise, die ich bei Google oder AWS gefunden habe, bewegen sich eine Größenordnung darüber.

@brycen, sind deine Fragen damit beantwortet?

Edit: Ich habe die Rechnung nochmal etwas angepasst

7 „Gefällt mir“