mnemonic phrase 12 words brute force

lordg2009

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.503
Hi,

ich beschäftige mich gerade mit der wallet metaMask und der mnemonic phrase. Bevor ich diese wallet nutze würde ich natürlich gern verstehen, wie die mnemonic phrase funktioniert, aus der wohl der private Schlüssel abgeleitet wird.

Laut MetaMask-Dokumentation wird eine Wortliste mit 2048 verschiedenen Wörtern genutzt, also 2^11 Möglichkeiten. Bei 12 Wörtern müsste es doch 2^11^12 Möglichkeiten geben. Im Prinzip entspricht das einem 132 bit Schlüssel. Dieser ist ja dann deutlich kürzer, als z.B. der private Schlüssel einer Bitcoin Adresse mit 256 bit.

Wie schwierig wäre es denn, einen solchen Schlüssel zu brute forcen, wenn man z.B. ein Rechenzentrum verwenden würde?
Wie lange ist das ganze denn noch sicher gegen Angriffe von Quantencomputern? Wie ich hörte spielt dort vor allem die Länge des Schlüssels die Hauptrolle. Wenn ich es richtig verstanden habe, können alle Schlüssel bis zu einer bestimmten Länge gleichzeitig errechnet werden, sobald einmal genug qbits verschränkt wurden. Ständig gibt es hier neue Rekorde an der Menge an gleichzeitig verschränkter qbits.

Vielen Dank für eure Erklärungen.
 
Deine Mathematik zur äquivalenten Schlüssellänge ist soweit richtig.
Da die Wortliste nicht komplett zufällig ist, entspricht eine 12 word phrase eher einem 128bit schlüssel.

128bit gelten aber nach wie vor als sehr sicher.
Meta Mask ist als hot wallet eher eine Wallet in der man nicht seine Lebensersparnisse speichert.
Viele wallets nutzen 24 Wörter.

Bitcoin ist nicht "quantensicher".
Wenn das ein realistisches angriffsszenario wird, dann wird mit sicherheit auf quantensichere Algorithmen umgestellt.

quelle zur 128bit Aussage
 
Da gibt es echt viele Randbedingungen. Und über die habe ich mir dies Jahr auch viele Gedanken gemacht.

Ein Seed besteht ja in deinem Beispiel aus 11 Wörtern, das 12 Wort ist die Checksumme der ersten 11 Wörter.
Das 12 Wort kann frei aus 8 Wörtern die der Prüfsumme entsprechen ausgewählt werden.
Siehe dazu auch Seedpicker für 24-Wort-Seeds, da kannst du 23 Wörter frei eingeben und Seedpicker berechnet die Checksumme. Seedpicker macht das so das immer einfach das erste der 8 möglichen Wörter ausgewählt wird.

Die Sicherheit liegt aber vor allem in der Auswahl der ersten Wörter. Hierfür wird eine Entropie benötigt.
Das kann z.b. ein Zufallszahlengenerator machen. Genau da liegt eigentlich das Problem. Ein normaler Pseudozufallszahlengenerator (PRNG) ist unsicher. Die Entropie täuscht da eine Sicherheit vor die es so nicht gibt. Nur ein Cryptografisch sicherer Zufallszahlengenerator CSPRNG ist sicher genug.

Und nein, dev/urandom ist (meiner Meinung nach) auch nicht so sicher wie es könnte. Denn der benutzt auch die Systemzeit als erste Basis. Es kommen dann noch Mauszeigerbewegungen des Nutzers hinzu, doch die sind beim ersten Systemstart des Computers so ziemlich gleich bei allen Nutzern. Nämlich die Einführung durchklicken, dann Firefox und dann Laufwerksordner öffnen... usw. Das ist ja auch nicht wirklich viel Zufall dann. Ich würde dann schon eher ein Diodenrauschen bzw. Stromrauschen des Computers benutzen. Aber darüber lässt sich streiten.

Das beweisen immer mehr geknackte uralte Wallets die mit einem schlechten Zufall generiert wurden.
Leider gab es auch in jüngerer Zeit Wallets die noch einen schlechten Zufall nutzten. So z.b. AtomicWallet und Trustwallet. Dort wurde die Systemzeit als Ausgangsbasis für die Entropie benutzt.
Bei beiden wurde das aber sehr schnell behoben und es waren nur wenige Wallets betroffen die tatsächlich Guthaben drauf hatten. Dies wurde den Besitzern ersetzt.

Der zweite Punkt ist das zuviele Leute ihren Seed online erstellen. Es gibt Zahlreiche Seiten wo man dies tun kann. Es gibt auch eine Seite die man offline einfach speichern kann um dann an einem Offline-Computer einen Seed zu erstellen den man dann in Wallets nutzen kann.
https://iancoleman.io/bip39/

Ich würfel mir meine Seeds mittlerweile auch lieber selbst udn hab mir dafür ein Excelblatt gemacht damit ich den Seed nicht immer per Hand ausrechnen muss.
https://github.com/Cftok-Main/Dice-Seed

Aber auch da gibt es Fallstricke. z.b. mit besch.... Würfeln.
Ich konnte das anfangs auch nicht so recht glauben und habe lange mit verschidensten billigen RPG-Würfeln rumprobiert, da gibt es gefühlt eine Million verschiedene Würfel.
Bis mir die Zahlen die herauskamen irgendwie seltsam erschienen.
Dann hab ich Würfel einzeln durchprobiert und da waren wirklich welche bei die quasi nur zwei Zahlen würfeln konnten. Einer konnte fast nur eine 4 Würfeln, nur zufällig kam auch mal eine 2.

Also... machte ich eine Formel mit der sich die Präzision von Würfeln prüfen lässt. Der CHI-Quadrat-Test
https://github.com/Cftok-Main/Diceprecision-check

Denn wirkliche Zufallszahlen lassen sich nur würfeln wenn jeder Würfel auch wirklich jede Zahl gleich oft würfeln kann, in einem gewissen Toleranzrahmen weil ja auch die Umgebungsbedingungen wichtig sind.
Da stellte sich raus das ich die besten Ergebnisse tatsächlich mit Präzisions Casinowürfeln hatte und auf einer Tischplatte die ich mit einem 3mm Filz belegt hatt und drumherum aus Pappe eine 25cm hohe gerundete Bande die mit dem Filz beklebt ist.
Das ist dann ein Aufbau wie ein Casino Würfeltisch und die Würfel können dann richtig schön in die Kurve und frei rollen.

Ich würfel mir also einen Seed, die ersten 23 Wörter.
Das 24 Wort suche ich mir dann mit Seedpicker raus.
Den fertigen Seed füge ich bei iancoleman ein und hab dadurch meine Keys und Adressen.

Ja, bissel umständlich. Funktioniert aber sehr gut.

Die Seeds habe ich immer auf Normalverteilung geprüft und alle waren gut im Bereich der Nicht-Normalverteilung. Das heisst sie folgen keinem Normalverteilten Schema, was bei sehr unsicheren "per Hand" erstellten Seeds eigentlich IMMER der Fall ist.
Anhand des Tests ist also zu sehen ob ein Seed sicher genug erstellt wurde, er darf nicht Normalverteilt sein.
https://github.com/Cftok-Main/23-Numbers-Test-Standard-Distribution/releases/tag/v0.5
Ergänzung ()

lordg2009 schrieb:
Wie schwierig wäre es denn, einen solchen Schlüssel zu brute forcen, wenn man z.B. ein Rechenzentrum verwenden würde?
So um das nochmal zu erläutern,
Schau mal hier, da gibts ein paar gesammelte Infos dazu

https://forum.blocktrainer.de/t/wallet-seed-sicherheit/2322/32
https://forum.blocktrainer.de/t/reichen-12-woerter/20834/29

Mit einem Rechenzentrum meinst du warscheinlich Supercomputer. Das dauert dann schon so zwischen 10 und 1000 Millionen Jahre, je nachdem wann man halt den ersten Schlüssel hat.

Dabei ist dann aber natürlich nicht gesagt das der gefundene Schlüssel dann auch Coins enthält. Das ist ja dann eben der nächste Schwierigkeitsgrad, was nutzen gefundene Schlüssel wenn da nix zu holen ist.

Um die mal einen Eindruck von der Menge zu verschaffen kannst du ja auch mal Privatekeys anschauen.
https://allprivatekeys.com/all-bitcoin-private-keys-list

Da sind alle möglichen Schlüssel aufgelistet und die kann man da gleich abfragen ob da Coins drauf sind.
Da dankt man erstmal.. oh mein Gott dann weiss ja jeder die Privatekeys von jedem...
Klar, aber das ist halt Mathematik. Jeder weiss das 1+1 dann mal 2 ergibt. Nicht erst in dem Moment wo ich das ausrechne.

Es sind also quasi bereits alle möglichen Seeds und alle möglichen Keys die es jemals geben kann bekannt.

Aber du wirst feststellen das es einfach die Menge ist die es unmöglich macht die alle zu durchsuchen nach ein paar Coins.

Die nötige energie um das zu leisten ist auf dem Planeten einfach nicht vorhanden. Und selbst wenn sie vorhanden wäre dann würde sie ja weit mehr Kosten wie ein paar Bitcoin die man sich kauft.
 
Zuletzt bearbeitet:
fudelnotze schrieb:
Und nein, dev/urandom ist (meiner Meinung nach) auch nicht so sicher wie es könnte. Denn der benutzt auch die Systemzeit als erste Basis. Es kommen dann noch Mauszeigerbewegungen des Nutzers hinzu, doch die sind beim ersten Systemstart des Computers so ziemlich gleich bei allen Nutzern.
/dev/urandom hat, sobald du es benutzen kannst (weil das System vollständig gestartet wurde) genug Entropie. Siehe z.B. hier.
fudelnotze schrieb:
Es gibt auch eine Seite die man offline einfach speichern kann
Das bringt natürlich nichts, wenn nur ein PRNG verwendet wird.

fudelnotze schrieb:
Die Seeds habe ich immer auf Normalverteilung geprüft und alle waren gut im Bereich der Nicht-Normalverteilung. Das heisst sie folgen keinem Normalverteilten Schema, was bei sehr unsicheren "per Hand" erstellten Seeds eigentlich IMMER der Fall ist.
Das ist keine gute Idee, denn auch mit wenig Entropie ist das Ergebnis nicht unbedingt normalverteilt.
 
Ja natürlich ist das immer ein Gesamtkonzept wo alles ineinandergehen muss.

BeBur schrieb:
Das ist keine gute Idee, denn auch mit wenig Entropie ist das Ergebnis nicht unbedingt normalverteilt
Das Ergebnis sollte auch nicht normalverteilt sein. Deswegen sollte man schauen wie weit ein Wert in die Verteilung jeweils reingeht.

Zur Normalverteilung gibts auch ein Excelblatt in dem git. Da hab ich z.b. zusätzlich eine Belkenanzeige drin die den Wert anzeigt und signalisiert wie weit das Ergebnis in der Verteilung ist.

Kannste ja probieren wie ein Seed mit per Hand ausgewählten Wörtern so ist. Z.b. die Wortliste durchscrollen und einfach immer Wörter rauspicken.
 
Zurück
Oben