Wie stellt man eine MetaMask-Wallet wieder her? Verlorenes Passwort, Tresorspeicher, Verschlüsselung und Datenforensik

Peter CryptoRecovery Avatar
Wie stellt man eine MetaMask-Wallet wieder her? Verlorenes Passwort, Tresorspeicher, Verschlüsselung und Datenforensik

Wie stellt man eine MetaMask-Wallet wieder her? Verlorenes Passwort, Tresorspeicher, Verschlüsselung und Datenforensik

Wenn du das hier liest, hast du wahrscheinlich den Zugriff auf eine MetaMask-Wallet verloren und dir gehen langsam die Möglichkeiten aus. Ich habe jahrelang Wallets für andere Leute wiederhergestellt – von DeFi-Händlern, die ihre Laptops neu formatiert haben, bis hin zu Großeltern, die ihre Browser-Erweiterungen „aufgeräumt“ haben. Dieser Leitfaden deckt alles ab, was ich darüber weiß, wie MetaMask deine Schlüssel speichert, wo diese Daten tatsächlich auf der Festplatte liegen und wie du sie zurückbekommst, wenn etwas schiefgeht. Nichts davon ist theoretisch. Jede Technik hier stammt aus echten Wiederherstellungen.

Wie MetaMask Ihre Schlüssel tatsächlich speichert

Bevor Sie etwas wiederherstellen können, müssen Sie wissen, was Sie wiederherstellen. MetaMask speichert Ihre privaten Schlüssel nicht in einer Datei namens private_keys.txt. Es speichert sie in einem verschlüsselten Blob namens Tresor, das sich im Erweiterungsspeicher Ihres Browsers befindet.

Wenn Sie eine MetaMask-Wallet erstellen und ein Passwort festlegen, läuft im Hintergrund Folgendes ab: MetaMask generiert eine BIP-39-Mnemonik (Ihre 12 Wörter Geheime Wiederherstellungsphrase) und bündelt diese – zusammen mit etwaigen importierten privaten Schlüsseln – in einem JSON-Array aus „keyring“-Objekten. Dieses Array wird in eine Zeichenkette serialisiert und anschließend verschlüsselt unter Verwendung von AES-256-GCM mit einem Schlüssel, der über PBKDF2-HMAC-SHA256. Das Ergebnis ist ein JSON-Blob mit drei oder vier Feldern, der in chrome.storage.local (in Chromium-Browsern) oder IndexedDB (in Firefox).

In älteren Versionen sieht der verschlüsselte Tresor so aus:

{"data":"SGFuZGxlIHRoaXMgZW5jcnlwdGVkIGRhdGE=","iv":"MTIzNDU2Nzg5MDEyMzQ1Ng==","salt":"cmFuZG9tMzJieXRlc2FsdHZhbHVlaGVyZQ=="}

Und in neueren Versionen (ab v11.16.x) gibt es ein viertes Feld:

{"data":"...","iv":"...","keyMetadata":{"algorithm":"PBKDF2","params":{"iterations":600000}},"salt":"..."}

Das keyMetadata Das ist der Unterschied zwischen einer Genesung, die nur wenige Minuten dauert, und einer, die Wochen in Anspruch nimmt. Mehr dazu gleich.

Die Verschlüsselungskette ist zwar einfach, muss aber genau verstanden werden. Ihr UTF-8-Passwort wird über die Web Crypto API als roher PBKDF2-Schlüssel importiert. Ein 32-Byte-Zufalls-Salt (generiert aus crypto.getRandomValues()) wird zusammen mit dem Passwort verwendet, um einen 256-Bit-AES-GCM-Schlüssel abzuleiten. Anschließend wird ein 16-Byte-Zufalls-IV verschlüsselt die serialisierten Schlüsselbunddaten. Die data Das Feld enthält sowohl den Chiffretext als auch das GCM-Authentifizierungstag, beides Base64-kodiert. Eine erwähnenswerte Besonderheit: MetaMask verwendet ein 16-Byte-IV für AES-GCM, was nicht dem Standard entspricht – NIST SP 800-38D empfiehlt 12 Byte. Dies führt zu Kompatibilitätsproblemen mit einigen Krypto-Bibliotheken (Rubys OpenSSL beispielsweise weigert sich, damit zu arbeiten).

Wenn Sie MetaMask mit Ihrem Passwort entsperren, läuft der Vorgang umgekehrt ab. Die KeyringController ruft die verschlüsselte Vault-Zeichenkette aus dem persistenten Speicher ab und übergibt sie an browser-passworder‘s decrypt Funktion, die das JSON-Datenformat analysiert, das Salt extrahiert, den Schlüssel mithilfe von PBKDF2 mit denselben Parametern ableitet, mit AES-GCM entschlüsselt und das Ergebnis wieder in Schlüsselbundobjekte deserialisiert. Die entschlüsselten Schlüsselbunde befinden sich nur in Erinnerung – sie werden im memStore (ein ObservableStore (z. B.) und werden niemals im Klartext auf die Festplatte geschrieben.

Ein entschlüsselter Tresor enthält ein Array, das in der Regel wie folgt aussieht:

[
  {
    "type": "HD Key Tree",
    "data": {
      "mnemonic": "abandon ability able about above absent ...",
      "numberOfAccounts": 3,
      "hdPath": "m/44'/60'/0'/0"
    }
  },
  {
    "type": "Simple Key Pair",
    "data": ["0xabc123..."]
  }
]

Die HD Key Tree Der Schlüsselbund enthält deine Mnemonik und die Anzahl der abgeleiteten Konten. Simple Key Pair Die Einträge sind einzeln importierte private Schlüssel. Wenn Sie Hardware-Wallets verbunden haben, werden Ihnen außerdem Trezor Hardware und Ledger Hardware Schlüsselringtypen – diese speichern jedoch nur Ableitungspfade und öffentliche Adressen, nicht die privaten Schlüssel (diese verbleiben auf dem Hardwaregerät).

Mit Manifest V3 (der Service-Worker-Architektur, die Chrome ab 2023 einführt) hat MetaMask die Möglichkeit hinzugefügt, den Verschlüsselungsschlüssel als exportierten JWK zwischenzuspeichern, sodass der Tresor beim Neustart des Service-Workers wieder entschlüsselt werden kann, ohne dass erneut nach dem Passwort gefragt wird. Die encryptionKey und encryptionSalt Felder erscheinen in memStore wenn cacheEncryptionKey ist aktiviert.

Wo MetaMask Ihre Daten auf den verschiedenen Plattformen speichert

Den Tresor zu finden, ist schon die halbe Miete. MetaMask speichert Daten je nach Browser und Betriebssystem an unterschiedlichen Orten, und diese Unterschiede sind für die Wiederherstellung von Bedeutung.

Chromium-basierte Browser (Chrome, Brave, Edge)

In Chromium-basierten Browsern, chrome.storage.local wird in ein LevelDB-Datenbank auf der Festplatte. Die Erweiterungs-ID bestimmt den Ordnernamen.

Die Erweiterungs-ID von Chrome ist nkbihfbeogaeaoehlefnkodbefgpgknn – das hat sich jedem Rehabilitationsspezialisten tief ins Gedächtnis eingebrannt. Tapfer verwendet dieselbe ID, da es über den Chrome Web Store installiert wird. Kante erhält eine eigene ID, wenn es aus dem Edge-Add-ons-Store installiert wird: ejbalbakoplchlghecdalmeeeajnimhm. Hat ein Nutzer MetaMask jedoch über den Chrome Web Store (den Edge unterstützt) in Edge installiert, bleibt die Chrome-ID erhalten. Diese Unterscheidung sorgt immer wieder für Verwirrung.

Hier sind die vollständigen Pfade:

Chrome unter Windows:
C:\Users\<USER>\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn\

Chrome unter macOS:
~/Library/Application Support/Google/Chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/

Chrome unter Linux:
~/.config/google-chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/

Brave unter Windows:
C:\Users\<USER>\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn\

Brave unter macOS:
~/Library/Application Support/BraveSoftware/Brave-Browser/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/

Edge unter Windows (Installation über den Edge Store):
C:\Users\<USER>\AppData\Local\Microsoft\Edge\User Data\Default\Local Extension Settings\ejbalbakoplchlghecdalmeeeajnimhm\

Ein wichtiger Hinweis: Wenn der Nutzer mehrere Chrome-Profile hat, ersetzen Sie Default mit Profile 1, Profile 2usw. Ich habe schon erlebt, dass Leute stundenlang im falschen Profil gesucht haben.

Firefox – ein ganz anderes Kaliber

Firefox verwendet LevelDB nicht. Es speichert Erweiterungsdaten in IndexedDB, das Firefox auf Basis von SQLite implementiert. Die Erweiterungs-ID lautet webextension@metamask.io, aber Firefox weist jeder Installation eine eindeutige interne UUID zu – etwa so wie 196319ec-3a5e-4efe-9413-c327a770d874. Du findest es unter about:debugging unter „Dieser Firefox“

Die Daten befinden sich unter:

Windows: %APPDATA%\Mozilla\Firefox\Profiles\<PROFILE>\storage\default\moz-extension+++<UUID>^userContextId=4294967295\idb\

macOS: ~/Library/Application Support/Firefox/Profiles/<PROFILE>/storage/default/moz-extension+++<UUID>^userContextId=4294967295/idb/

Linux: ~/.mozilla/firefox/<PROFILE>/storage/default/moz-extension+++<UUID>^userContextId=4294967295/idb/

Im Inneren des idb/ In diesem Ordner finden Sie Binärdateien mit numerischen Namen. Dabei handelt es sich um Snappy-komprimiert – man kann sie nicht einfach wie LevelDB-Dateien mit `grep` durchsuchen. Man muss sie zunächst mit einem Tool wie snappy-fox bevor die Daten im Tresor extrahierbar sind. Das ist der häufigste Fehler, den ich bei der Wiederherstellung von Firefox-Daten beobachte: Die Nutzer öffnen die Binärdatei, sehen unlesbare Daten, die mit Fragmenten erkennbaren Textes vermischt sind, und gehen davon aus, dass der Tresor beschädigt ist. Das ist nicht der Fall. Die Daten sind lediglich komprimiert.

Vor Firefox 63 nutzte der Erweiterungsspeicher eine einfache JSON-Datei namens storage.js im Profilverzeichnis. Wenn Sie eine sehr alte Installation wiederherstellen, suchen Sie nach storage.js oder storage.js.migrated.

LevelDB und die Datei „0001.ldb“, nach der alle fragen

LevelDB ist Googles Key-Value-Speicher-Engine, und das Verständnis ihrer Dateistruktur ist für die Wiederherstellung von MetaMask in jedem Chromium-Browser unerlässlich.

Ein MetaMask-LevelDB-Verzeichnis enthält verschiedene Dateitypen. Das .ldb Dateien (Sorted String Tables, kurz SSTables) sind der permanente, sortierte Schlüssel-Wert-Speicher. .log Dateien sind das Write-Ahead-Log – ein temporärer Puffer für die zuletzt vorgenommenen Schreibvorgänge, bevor diese in den .ldb Dateien. Es gibt eine MANIFEST-###### Metadaten der Datei-Tracking-Datenbank, a CURRENT Datei, die auf das aktive Manifest verweist, und eine LOCK Datei, die gleichzeitigen Zugriff verhindert.

Die Vault-Daten werden in der Regel in einer mit niedrigen Nummern .ldb Datei - 000003.ldb, 000005.ldboder ähnliches. In der Dokumentation von MetaMask heißt es: „Es sollte sich um einen niedrigen Zahlenwert handeln. Handelt es sich um eine große Zahl, ist es nicht der Tresor.“ Die 0001.ldb Datei (oder 000001.ldb) ist eine der ersten SSTables, die bei der Erstinitialisierung von MetaMask erstellt wurden. Sie enthält oft den ursprünglichen Tresor, der bei der Erstellung der Wallet angelegt wurde.

Extrahieren von Tresordaten aus .ldb Dateien ist unter Chromium in der Regel ganz einfach. Öffne die Datei in einem Texteditor (Sublime Text, VS Code, sogar Notepad++) und suche nach der Zeichenfolge vault. Den verschlüsselten JSON-Blob findest du in der LevelDB-Datensatzstruktur eingebettet. Kopiere alles von {"data":" bis zum Abschluss "} – das ist dein Tresor.

Auf einem Mac oder unter Linux reicht dieser Einzeiler aus:

LC_ALL="C" egrep -roa 'vault":"(.*?\\"})' ~/Library/Application\ Support/Google/Chrome/Default/Local\ Extension\ Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/ | sed -E 's/.*({.*}).*/\1/g' | head -1

Ein Punkt, den man im Auge behalten sollte: .ldb Dateien können verwendet werden Schnelle Komprimierung auf Datenblöcke. Wenn die Zeichenfolgensuche fehlschlägt und Sie Blöcke mit binärem Datenmüll sehen, ist der benötigte Datenblock möglicherweise mit Snappy komprimiert. Der .log Die Datei hingegen ist immer unkomprimiert – es handelt sich um rohe Schlüssel-Wert-Daten in 32-KB-Blöcken. Wenn die .ldb der Ansatz scheitert, Überprüfen Sie immer die .log Datei. In der offiziellen Dokumentation von MetaMask heißt es dazu: „Wenn Sie Ihren Tresor nicht mithilfe der .ldb-Datei wiederherstellen können, prüfen Sie, ob eine .log-Datei vorhanden ist.“

Eine Eigenschaft von LevelDB, die für die Wiederherstellung äußerst nützlich ist: Es ist nur-Anhängen. Aktualisierungen und Löschungen ändern keine bestehenden Datensätze – sie fügen neue Einträge mit höheren Sequenznummern hinzu. Alte Datensätze bleiben erhalten, bis sie bei einer Komprimierung zusammengeführt werden. Das bedeutet: Wenn jemand einen neuen SRP über einen alten importiert hat, können die alten Vault-Daten in einer älteren .ldb Datei, die noch nicht komprimiert wurde. Ich habe auf diese Weise schon mehrmals „überschriebene“ Wallets wiederhergestellt.

Für die programmatische Extraktion wird die btcrecover Das Projekt umfasst extract-metamask-vaults.py, das die LevelDB-Datenbank ordnungsgemäß ausliest und alle Vault-Einträge abruft – einschließlich potenziell alter Einträge, die sich in nicht komprimierten Dateien verbergen. Das cyclone-github/metamask_extractor Das Tool erfüllt denselben Zweck und kann die Ausgabe direkt in ein mit Hashcat kompatibles Format ausgeben.

Wenn Vault-Dateien beschädigt werden

Eine Beschädigung des Vaults hat in der Regel eine der folgenden Ursachen: einen Browserabsturz während eines Schreibvorgangs (Stromausfall, Kernel Panic, erzwungenes Beenden), eine unterbrochene MetaMask-Aktualisierung, bei der der Speicher während des Vorgangs neu geschrieben wird, tatsächliche Festplattenfehler (fehlerhafte Sektoren, SSD-Verschleiß) oder – was immer häufiger vorkommt – Antivirensoftware, die die JavaScript-Dateien von MetaMask in Quarantäne verschiebt, was dazu führen kann, dass die LevelDB-Datenbank in einen inkonsistenten Zustand gerät, obwohl die Vault-Daten selbst intakt sind.

Du weißt, dass dein Vault beschädigt ist, wenn das JSON nicht geparst werden kann. Fehlende Klammern, abgeschnittene Base64-Zeichenfolgen, Null-Bytes, die mitten in das Datenfeld eingefügt wurden. Der MetaMask Vault Decryptor gibt die Fehlermeldung „Problem beim Dekodieren des Vaults“ aus oder bricht einfach ohne Meldung ab.

Die Wiederherstellung hängt von der Art und dem Ausmaß der Beschädigung ab. Wenn die JSON-Struktur beschädigt ist, die verschlüsselten Daten jedoch größtenteils intakt sind, ist es oft möglich, das Gewölbe manuell wiederherstellen. Das Format ist streng – man braucht genau die data, ivund salt Felder (sowie keyMetadata (für neuere Tresore). Entfernen Sie Null-Bytes und Steuerzeichen. Überprüfen Sie, ob die data, ivund salt Die Werte sind gültiges Base64. Wenn die data Wenn das Feld jedoch abgeschnitten wird, hast du ein Problem – AES-GCM erfordert den vollständigen Chiffretext sowie dessen Authentifizierungs-Tag (die letzten 16 Bytes der data (Feld) entschlüsseln. Schon ein einziges fehlendes Byte führt dazu, dass der gesamte Vorgang fehlschlägt.

Bei teilweise beschädigten LevelDB-Datenbanken, bei denen die .ldb Wenn die Dateien selbst beschädigt sind, versuche, die .log Stattdessen die Datei – sie hat ein einfacheres Format (sequenzielle 32-KB-Blöcke mit 7-Byte-Headern) und enthält möglicherweise eine aktuellere Kopie des Tresors, die den Beschädigungsvorfall überstanden hat. Wenn keiner der beiden Ansätze funktioniert, können Sie manchmal Python-LevelDB-Parsing-Bibliotheken verwenden (die CCL Solutions Group hat reine Python-Implementierungen für LevelDB-Parsing, Snappy-Dekomprimierung und V8-Deserialisierung veröffentlicht), um Datensätze präzise aus beschädigten Datenbankdateien zu extrahieren und dabei beschädigte Blöcke zu überspringen.

In einem einzelnen LevelDB-Verzeichnis können mehrere SRPs nebeneinander bestehen. Wenn ein Benutzer eine neue Seed-Phrase importiert hat, bleibt der alte Vault-Eintrag möglicherweise in einem separaten .ldb Datei oder sogar innerhalb derselben Datei an einer anderen Stelle. Suche immer nach alle Fälle des Gewölbemusters, nicht nur das erste.

Das Problem mit überschriebenen Dateien und wie man es löst

Das ist das Szenario, das am meisten Kummer bereitet. Jemand deinstalliert MetaMask – vielleicht, um ein Problem zu beheben, vielleicht, um seinen Browser „aufzuräumen“, vielleicht, weil er gar nicht bemerkt hat, was er da tat. Bei Chromium-Browsern führt die Deinstallation einer Erweiterung löscht den gesamten Ordner mit den Erweiterungsdaten, einschließlich aller .ldb, .logsowie Manifest-Dateien. In Firefox wird die moz-extension+++<UUID> Der Ordner wird gelöscht, und da bei jeder Neuinstallation eine neue UUID generiert wird, greift die neue Installation nicht auf den alten Speicherort zu (der alte Speicherort ist jedoch nicht mehr vorhanden).

Die Dokumentation von MetaMask drückt es ganz klar aus: „Die Daten der Browser-Erweiterung werden gelöscht, wenn die Erweiterung deinstalliert wird. In der Regel bedeutet dies, dass Ihre Tresordaten verloren gehen.“

Das Wort „im Allgemeinen“ hat eine große Bedeutung. Die Daten werden logisch gelöscht – das Dateisystem markiert diese Sektoren als frei –, aber die Bytes selbst werden nicht sofort mit Nullen überschrieben. Auf einer herkömmlichen Festplatte bleiben die Daten so lange erhalten, bis diese Sektoren zufällig von neuen Dateien wiederverwendet werden. Auf einer SSD können TRIM-Befehle gelöschte Daten innerhalb von Minuten, manchmal sogar Sekunden, unwiederherstellbar machen.

Die erste Regel bei der Wiederherstellung eines überschriebenen Tresors: Benutzen Sie den Computer sofort nicht mehr. Jede neue Datei, die auf das Laufwerk geschrieben wird, könnte die Sektoren überschreiben, auf denen sich Ihr Tresor befand. Wenn möglich, bauen Sie das Laufwerk aus und schließen Sie es schreibgeschützt an einen anderen Rechner an.

Wiederherstellungswerkzeuge für dieses Szenario, in der Reihenfolge, in der ich sie zuerst verwende:

  • Unsere maßgeschneiderte Software (plattformübergreifend) zur Wiederherstellung logisch gelöschter Dateien
  • extundelete oder ext4magic für Linux-Dateisysteme vom Typ ext3/ext4
  • Raw-Disk-Suche als letztes Mittel: grep -rboa "vault" /dev/sdX um das Raw-Disk-Gerät nach Vault-Zeichenfolgen zu durchsuchen
  • Unsere maßgeschneiderten Werkzeuge für die Dateiwiederherstellung, wenn die Metadaten des Dateisystems verloren gegangen sind – konfigurieren Sie es so, dass es nach {"data":" Muster

Ich habe bereits Wallets von Festplatten wiederhergestellt, die schon vor Wochen deinstalliert worden waren. Bei SSDs sinkt die Erfolgsquote jedoch schon nach wenigen Stunden fortgesetzter Nutzung drastisch. Eine Neuinstallation von MetaMask ist das Schlimmste, was man tun kann, da dabei eine neue LevelDB-Datenbank im exakt selben Verzeichnis angelegt wird, wodurch die alten Sektoren möglicherweise überschrieben werden.

Firefox hat hier einen Vorteil. Da jede Installation eine neue UUID erhält, werden bei einer Neuinstallation die Dateien in einem neuen Verzeichnispfad angelegt. Die alten moz-extension+++<OLD-UUID> Die Daten werden – selbst wenn der Ordner gelöscht wurde – nicht durch die Dateien der neuen Installation überschrieben. Außerdem gibt es zwei versteckte Firefox-Einstellungen – extensions.webextensions.keepUuidOnUninstall und extensions.webextensions.keepStorageOnUninstall – das, wenn es auf true in about:config Verhindern Sie vor der Deinstallation, dass der Browser den Speicher der Erweiterung löscht. Aber niemand richtet diese Einstellungen proaktiv ein.

MetaMask auf dem Handy ist eine ganz andere Sache

MetaMask Mobile basiert auf React Native und speichert Daten ganz anders als die Browser-Erweiterung. Der verschlüsselte Tresor durchläuft @react-native-async-storage/async-storage, das plattformspezifische Backends verwendet.

Auf Android, AsyncStorage schreibt in der Regel in eine SQLite-Datenbank bei /data/data/io.metamask/databases/RKStorage. Dieser Pfad erfordert Root-Zugriff, um direkt lesen zu können. Die Verschlüsselung des Tresors nutzt denselben PBKDF2-basierten Schlüsselansatz, weist jedoch wichtige Unterschiede zur Desktop-Erweiterung auf: Die mobile App verwendet seit jeher nur 5.000 PBKDF2-Iterationen und verschlüsselt mit AES-CBC anstelle von AES-GCM. Das bedeutet, dass mobile Tresore nicht mit Desktop-Tresoren austauschbar sind, selbst wenn das Passwort identisch ist.

Auf iOS, die Daten befinden sich in der App-Sandbox unter <AppSandbox>/Documents/. Für die Wiederherstellung eines iCloud-Backups lautet der entsprechende Pfad Apps → MetaMask → Documents → persistStore → persist-root – Sie benötigen ein Tool wie iMazing, um ein iOS-Backup auf einem Mac zu durchsuchen. Ob diese Methode funktioniert, hängt davon ab, ob der Nutzer das iCloud-Backup aktiviert hatte, während MetaMask aktiv war, und Änderungen seitens Apple haben diesen Ansatz Berichten zufolge zeitweise unbrauchbar gemacht.

MetaMask Mobile bietet außerdem eine SecureKeychain Modul (basierend auf react-native-keychain), das das Wallet-Passwort des Benutzers im iOS-Schlüsselbund oder im Android-Keystore für die biometrische Entsperrung speichert. Eine Sicherheitsprüfung ergab, dass SecureKeychain eine zusätzliche Verschlüsselungsebene unter Verwendung eines „foxCode“-Salts hinzufügt – bei dem es sich, wie sich herausstellte, um die fest codierte Zeichenfolge handelte "encrypt". Das Team von MetaMask räumte ein, dass es sich hierbei eher um eine mehrschichtige Sicherheitsstrategie als um ein sicherheitskritisches Geheimnis handelte.

Die grundlegende Herausforderung bei der Datenwiederherstellung auf Mobilgeräten besteht darin, dass Es gibt keine manuelle Entnahme aus dem Tresor entspricht dem Finden von .ldb Dateien auf dem Desktop. Man kann sich nicht per SSH in sein iPhone einloggen und dort nach Vault-Zeichenfolgen suchen. Ab MetaMask Mobile v6.3.0Die App verfügt über eine automatische Wiederherstellungsfunktion für den Tresor, die bei Feststellung einer Beschädigung ausgelöst wird – wenn die App jedoch gelöscht wird, gehen die lokalen Tresordaten verloren, sofern Sie kein Gerätesicherungs-Backup haben. Die Sicherungsmechanismen von Android sind besonders unzuverlässig, wenn es darum geht, alle app-internen Daten zu erfassen. Die offizielle Stellungnahme von MetaMask Es wird empfohlen, die Daten auf ein neues SRP zu übertragen, anstatt sich auf die Wiederherstellung über den Android-Tresor zu verlassen.

Die Änderung bei der PBKDF2-Iterationsanzahl, die alle Wiederherstellungstools lahmlegte

MetaMask hat jahrelang 10.000 PBKDF2-Iterationen – die fest codierte Standardeinstellung in der browser-passworder Bibliothek. Jedes Wiederherstellungstool, jedes Hashcat-Modul, jedes Brute-Force-Skript war auf 10.000 Iterationen ausgelegt. Doch Ende 2023 / Anfang 2024 änderte sich alles.

Die @metamask/browser-passworder Die Bibliothek v4.2.0 (veröffentlicht am 13. November 2023) führte die Unterstützung für konfigurierbare Optionen zur Schlüsselableitung ein. Der neue Standardwert der Bibliothek wurde auf 900.000 Iterationen, aber die MetaMask-Erweiterung hat sie so konfiguriert, dass sie 600.000 Iterationen – in Übereinstimmung mit der OWASP-Empfehlung für 2023 zu PBKDF2-HMAC-SHA256. Von der MetaMask-Erweiterung v11.16.11 (bestätigt in einer Hashcat-Ausgabe vom Juni 2024) wurden neue Tresore mit 600.000 Iterationen erstellt, und die neue keyMetadata Feld.

Dies bedeutet eine 60-fache Erhöhung des Rechenaufwands pro Passwortversuch. Ein Brute-Force-Angriff, der bei 10.000 Iterationen einen Tag dauerte, benötigt nun bei 600.000 Iterationen auf derselben Hardware zwei Monate. Die Hashcat-Community musste eigene Kernel entwickeln – den Modus 26620, beigesteuert von cyclone –, um das neue Format zu verarbeiten. Der Standardmodus 26600 hatte 10.000 Iterationen fest programmiert.

Wichtig: Alte Tresore werden NICHT automatisch neu verschlüsselt. Wenn Sie Ihre Wallet im Jahr 2021 erstellt haben, verwendet Ihr Tresor weiterhin 10.000 Iterationen, es sei denn, MetaMask hat explizit eine Neuverschlüsselung ausgelöst (die updateVault Es gibt zwar eine Funktion für diesen Zweck, aber es ist unklar, wie intensiv MetaMask diese beim Entsperren aufruft. Anhand des Vorhandenseins oder Fehlens des keyMetadata Feld. Nein keyMetadata? Es sind 10.000 Iterationen. Hat keyMetadata mit "iterations": 600000? Das ist das neue Format.

Hier ist die vollständige Übersicht über die Versionen der Verschlüsselungsbibliotheken, die für die Wiederherstellung relevant sind:

  • browser-passworder v1.x–v2.x (vor 2022): 10.000 Iterationen, fest codiert. Veröffentlicht ohne die @metamask Geltungsbereich.
  • v3.0.0 (August 2022): Umbenannt in @metamask/browser-passworder. Keine Änderung der Iteration.
  • v4.2.0 (November 2023): Hinzugefügt keyMetadata Unterstützung. Die Standardanzahl der Verschlüsselungsiterationen wurde auf 900.000 geändert. keyFromPassword abwärtskompatibel bei 10.000.
  • v4.3.0 (November 2023): Hinzugefügt isVaultUpdated um zu überprüfen, ob der Tresor die Zielparameter erfüllt.
  • v5.0.0 (April 2024): Mindestens Node.js v16 erforderlich. Keine Änderungen im Bereich Kryptografie.
  • v6.0.0 (Dezember 2024): Mindestens Node.js v18.18. Keine Änderungen im Bereich Kryptografie.

Für Wiederherstellungsspezialisten: Überprüfen Sie immer zuerst das Tresorformat. Davon hängt Ihre gesamte Vorgehensweise ab.

Die Passwortrichtlinie von MetaMask und was sie für Brute-Force-Angriffe bedeutet

MetaMask schreibt eine Mindestlänge von 8 Zeichen für Passwörter vor. Das ist alles. Keine Großbuchstaben, keine Zahlen, keine Sonderzeichen. Die Erweiterung zeigt eine visuelle Stärkeanzeige an („Schwach“ / „Gut“), blockiert jedoch keine schwachen Passwörter, die die Mindestlänge erfüllen. Es gibt auch keine maximale Länge – Unicode-Zeichen werden unterstützt. Diese Richtlinie gilt mindestens seit Anfang 2018 (siehe GitHub-Issue #3515).

Auf einigen Websites von Drittanbietern wird fälschlicherweise behauptet, dass MetaMask Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen erfordert. Das ist falsch. Die einzige zwingende Vorgabe ist eine Länge von 8 Zeichen.

Für die Brute-Force-Wiederherstellung ist dies von enormer Bedeutung. Ein Passwort aus acht Kleinbuchstaben hat einen Schlüsselraum von etwa 208 Milliarden Kombinationen (26^8). Bei einem alten Tresor mit 10.000 Iterationen kann Hashcat auf einer modernen GPU Tausende von Hashes pro Sekunde testen, wodurch dieser innerhalb weniger Tage geknackt werden kann. Bei einem Tresor mit 600.000 Iterationen verzehnfacht sich die Zeit. Ein starkes Passwort mit mehr als 12 Zeichen, Groß- und Kleinbuchstaben sowie Sonderzeichen? Mit aktueller Hardware praktisch unknackbar für beide Formate.

Das praktische Wiederherstellungstool der Wahl ist btcrecover – MetaMask selbst empfiehlt diese Methode für Nutzer, die eine ungefähre Vorstellung von ihrem Passwort haben. Sie unterstützt das Erraten auf Basis von Token und Mustern, sodass Sie eine Vorlage definieren können, wie zum Beispiel "my" + [dog|cat|bird] + [2019|2020|2021] + ["!"|"@"|"#"] und alle Permutationen effizient zu testen. Bei GPU-beschleunigten Angriffen behandelt der Hashcat-Modus 26600 ältere Tresore, der Modus 26610 mobile Tresore und der Modus 26620 (oder ein neu kompilierter Modus 26600 mit aktualisierten Iterationen) das neue Format mit 600.000 Iterationen.

Herkunftswege und die „Fehlbetrags“-Epidemie

Der Abrechnungspfad ist der Ort, an dem die meisten Probleme mit dem Verschwinden von Geldern ihren Ursprung haben. MetaMask verwendet den BIP-44-Standardpfad für Ethereum: m/44'/60'/0'/0. Die Werte werden durch Inkrementieren des Endindexes ermittelt: m/44'/60'/0'/0/0 (erster Bericht), m/44'/60'/0'/0/1 (zweitens), m/44'/60'/0'/0/2 (drittens) und so weiter. Dieser Pfad gilt für alle EVM-kompatiblen Blockchains – dieselbe Adresse auf Ethereum, Polygon, Arbitrum und BSC.

Das Problem ist, dass nicht jeder denselben Pfad verwendet. Ledger Live Verwendungszwecke m/44'/60'/x'/0/0, wobei die account Feld anstelle des address_index. Ledger-Erbe (der alte MEW/MyCrypto-Pfad) verwendet m/44'/60'/0'/x – nur vier statt fünf Stufen. Die erste Adresse (m/44'/60'/0'/0/0) ist in MetaMask, Ledger Live und Trezor identisch. Aber die ab dem zweiten Konto weichen sie völlig voneinander ab, da jede Wallet einen anderen Teil des Pfades erhöht.

Dies führt zu einem ganz bestimmten Fehlerbild: Jemand stellt seinen Ledger-Seed in MetaMask wieder her, sieht sein erstes Konto und dessen Guthaben, fügt dann ein zweites Konto hinzu und sieht … null. Das Guthaben ist nicht verschwunden. Es befindet sich auf der Adresse, die aus m/44'/60'/1'/0/0 (im Stil von Ledger Live), aber MetaMask prüft m/44'/60'/0'/0/1. Völlig unterschiedliche Schlüssel, völlig unterschiedliche Adressen.

Der Standard-Derivationspfad für Ethereum bei Trezor entspricht dem von MetaMask: m/44'/60'/0'/0/x. Die Wiederherstellung von Trezor zu MetaMask funktioniert also im Allgemeinen für alle Konten. Die Probleme beim Austausch zwischen verschiedenen Wallets betreffen vor allem Ledger ↔ MetaMask und Ledger ↔ Trezor.

Um Mittel auf dem „falschen“ Abgrenzungspfad zu finden, haben Sie folgende Möglichkeiten:

  • Schreiben Sie uns eine E-Mail an contact@cryptorecovery.io, und wir werden versuchen, Ihnen weiterzuhelfen.
  • MyEtherWallet (MEW): Unterstützt benutzerdefinierte Ableitungspfade über „Pfad hinzufügen“. Geben Sie diese manuell ein m/44'/60'/1'/0/0, m/44'/60'/2'/0/0usw., um Adressen im Ledger-Live-Format zu überprüfen.
  • MyCrypto: Unterstützung für ähnliche benutzerdefinierte Ableitungspfade.
  • Ian Colemans BIP-39-Tool (Offline-Ausführung): Geben Sie die Mnemonik ein, wählen Sie ETH aus, wechseln Sie zwischen den BIP-44-Registerkarten und passen Sie die Pfadkomponenten manuell an.
  • btcrecover: Kann Tests über verschiedene Ableitungsschemata hinweg automatisieren.

Eine frustrierende Einschränkung: Die Trezor-Integration von MetaMask unterstützt keine benutzerdefinierten Ableitungspfade. Eine Option für benutzerdefinierte Ableitungspfade wurde für Ledger integriert (PR #9367), doch nach den neuesten Informationen ist das entsprechende Ticket für Trezor (GitHub-Issue #11197) weiterhin offen. Wenn Sie versuchen, über MetaMask + Trezor auf von Ledger abgeleitete Konten zuzugreifen, müssen Sie stattdessen MEW oder MyCrypto verwenden.

MetaMask und Trezor: eine schwierige Verbindung

Die Integration von MetaMask und Trezor funktioniert über Trezor Bridge – ein lokal installierter Hintergrundprozess (trezord), das auf http://127.0.0.1:21325/ und schließt die Lücke zwischen der Browser-Sandbox und dem Zugriff auf USB-Hardware. Du kannst überprüfen, ob es läuft, indem du auf http://127.0.0.1:21325/status/.

Der häufigste Fehlergrund ist trügerisch einfach: Die Trezor Suite ist geöffnet. Die Trezor Suite sperrt die USB-Verbindung zum Gerät und verhindert so die Kommunikation mit MetaMask. Sie müssen die Suite vollständig beenden – sie nicht nur minimieren, sondern über die Taskleiste schließen. Ich schätze, dass dies auf 40 % der Supportanfragen zurückzuführen ist, bei denen es heißt: „MetaMask findet meinen Trezor nicht“.

Weitere häufige Probleme und deren Lösungen:

„Auf der Suche nach deinem Trezor…“ – dreht sich endlos – Überprüfen Sie, ob Bridge installiert ist, und trezord läuft. Probieren Sie ein anderes USB-Kabel und einen anderen Anschluss aus. Deaktivieren Sie VPN, Firewall und Browser-Erweiterungen (Werbeblocker und Datenschutz-Erweiterungen verursachen häufig Störungen). Im Inkognito-Modus werden Konflikte mit Erweiterungen vermieden.

„Geräteverbindung wird hergestellt“ – Eine andere Anwendung oder ein anderer Browser-Tab kommuniziert bereits mit dem Trezor. Schließen Sie alle anderen Tabs und Anwendungen, die möglicherweise auf das Gerät zugreifen.

Einschränkungen von WebUSB – Firefox unterstützt WebUSB überhaupt nicht, was bedeutet, dass die Trezor-Verbindung in Firefox vollständig über Bridge läuft. Chrome, Brave und Edge funktionieren über die Chromium-Implementierung von WebUSB/WebHID.

Die Warnung zum Ableitungspfad beim Trezor Safe 5 – Nutzer berichten, dass während der Transaktionsvalidierung auf dem Trezor-Bildschirm die Meldung „Falscher Ableitungspfad für das ausgewählte Konto. m/44’/60’/0’/0“ angezeigt wird. Diese Warnung kann in der Regel getrost ignoriert werden – die Wallet funktioniert trotz dieser Meldung einwandfrei. Es handelt sich um ein rein optisches Problem, das damit zusammenhängt, wie die Trezor-Firmware nicht standardmäßig aussehende Pfade validiert.

Im Jahr 2025 begann Trezor damit, die Bridge-Funktionalität in die Trezor Suite selbst zu integrieren. Dieser Übergang führte zu einer Reihe von Verbindungsproblemen, da einige Nutzer die Suite für MetaMask-Verbindungen im Hintergrund laufen lassen mussten, während andere sie vollständig geschlossen halten mussten. Überprüfen Sie die entsprechenden Einstellungen unter Trezor Suite → Einstellungen → Anwendung → Trezor Connect.

Wenn MetaMask eine Verbindung zu einem Trezor herstellt, unterscheiden sich die daraus resultierenden Konten grundlegend von den Konten der MetaMask-Software-Wallet. Bei Trezor-abgeleiteten Konten werden im Tresor lediglich öffentliche Schlüssel und Ableitungspfade gespeichert – die privaten Schlüssel verbleiben auf dem Hardwaregerät. MetaMask kann Guthaben (schreibgeschützt über öffentliche Schlüssel) anzeigen, ohne dass der Trezor angeschlossen ist, kann jedoch keine Transaktionen signieren, ohne dass das physische Gerät vorhanden ist. Wenn bei der Erstellung von Trezor-Konten eine Passphrase verwendet wurde, muss genau dieselbe Passphrase eingegeben werden, um dieselben Adressen neu zu generieren.

Erholungsmethoden, die in der Praxis tatsächlich funktionieren

Nach Hunderten von Datenwiederherstellungen sind dies die Szenarien, denen ich am häufigsten begegne, und so gehe ich damit um.

Szenario 1: Passwort vorhanden, Seed-Phrase verloren, Erweiterung weiterhin installiert

Das ist ganz einfach. Öffne die Hintergrundseite von MetaMask über chrome://extensions → Entwicklermodus → Klicken Sie auf „Service Worker“ (MV3) oder „Hintergrundseite“ (MV2). In der Konsole:

chrome.storage.local.get('data', result => {
    console.log(result.data.KeyringController.vault);
});

Kopieren Sie die JSON-Datei des Tresors und fügen Sie sie in die MetaMask-Vault-Entschlüsseler (metamask.github.io/vault-decryptor), gib dein Passwort ein, und das Programm zeigt dir deine Mnemonik sowie alle importierten privaten Schlüssel an. Der Vault Decryptor wurde von Dan Finlay, dem Mitbegründer von MetaMask, entwickelt – er unterstützt außerdem .ldb Dateien direkt per Datei-Upload.

Szenario 2: Passwort vorhanden, Erweiterung wurde deinstalliert, aber Daten könnten noch auf der Festplatte vorhanden sein

Wechseln Sie in das Datenverzeichnis der Erweiterung. Falls der Ordner noch vorhanden ist (manchmal wird er bei der Deinstallation nicht vollständig gelöscht, oder der Benutzer hat die Erweiterung nur deaktiviert, anstatt sie zu entfernen), kopieren Sie die .ldb und .log Dateien. Entpacken Sie das Archiv mit grep, einem Texteditor oder btcrecover‘s extract-metamask-vaults.py. Entschlüsseln Sie die Dateien mit dem Vault Decryptor.

Sollte der Ordner nicht mehr vorhanden sein, kontaktieren Sie uns bitte unter contact@cryptorecovery.io. Wir helfen Ihnen dann bei der Datenwiederherstellung.

Sie können das Laufwerk auch schreibgeschützt einbinden und eine Rohdatensuche nach Mustern in den Vault-Zeichenfolgen durchführen. Unter Linux: grep -rboa '{"data":"' /dev/sdX. Der Erfolg hängt stark davon ab, wie viel Festplattenaktivität nach dem Löschen stattgefunden hat und ob es sich bei dem Laufwerk um eine SSD oder eine HDD handelt.

Szenario 3: Passwort vergessen, habe die Tresordatei

Dies ist ein Brute-Force-Szenario. Extrahieren Sie den Tresor und konvertieren Sie ihn mithilfe von metamask2hashcat.py oder cyclone-github/metamask_extractor. Führen Sie dann hashcat (Modus 26600 für alte Tresore, 26620 für neue) oder btcrecover mit einer Token-Datei aus, in der Sie Ihre Erinnerungen an das Passwort festgehalten haben. Wenn Sie wissen, dass Ihr Passwort etwa aus „myDog“ plus einer Jahreszahl plus einem Sonderzeichen bestand, kann btcrecover diese Kombinationen effizient durchprobieren.

Szenario 4: Firefox-Wiederherstellung

Die MetaMask-UUID findest du unter about:debugging. Wechseln Sie in das Speicherverzeichnis. Entpacken Sie die IndexedDB-Binärdateien mit snappy-fox:

./snappy-fox input_file.snappy output.txt

Durchsuchen Sie die entpackte Ausgabe nach der Vault-JSON-Datei. Fahren Sie anschließend mit dem Vault Decryptor fort. Die JesseBusman/FirefoxMetamaskWalletSeedRecovery Ein Python-Skript automatisiert diesen gesamten Vorgang – es durchsucht das Firefox-Profil, findet die Tresordaten und gibt sie als formatierte JSON-Datei aus, die zur Entschlüsselung bereit ist.

Szenario 5: Nach dem Import der Startguthaben scheinen Gelder zu fehlen

Überprüfen Sie die Ableitungspfade. Wenn Sie einen Ledger-Seed in MetaMask importieren, werden ab dem zweiten Konto unterschiedliche Adressen und ein Guthaben von null angezeigt. Verwenden Sie MEW oder MyCrypto mit benutzerdefinierten Ableitungspfaden, um Ihre Guthaben in Ledger Live zu finden (m/44'/60'/x'/0/0) oder Ledger Legacy (m/44'/60'/0'/x) Pfade. Falls eine Trezor-Passphrase verwendet wurde, stellen Sie sicher, dass Sie genau dieselbe Passphrase eingeben – eine andere Passphrase erzeugt aus demselben Seed einen völlig anderen Satz von Adressen.

Forensische Tools, die in Ihrem Werkzeugkasten nicht fehlen sollten

  • MetaMask-Vault-Entschlüsseler – offiziell, kann offline betrieben werden, unterstützt Direktverbindungen .ldb Datei hochladen
  • btcrecover – Passwortwiederherstellung mit Musterabgleich, von MetaMask empfohlen
  • hashcat – GPU-beschleunigte Brute-Force-Angriffe (Modi 26600, 26610, 26620)
  • snappy-fox – Firefox Snappy-Entpackung
  • Python-Tools der CCL Solutions Group – LevelDB-Parsing in reinem Python, Snappy-Dekomprimierung, V8-Deserialisierung

Fazit: Was erfolgreiche Sanierungen von gescheiterten unterscheidet

Ob man seine Wallet zurückbekommt oder sie für immer verliert, hängt fast immer davon ab, was in den ersten Minuten nach der Entdeckung des Problems passiert ist. Die schädlichste Maßnahme ist die Neuinstallation von MetaMask im selben Browserprofil – dadurch wird das LevelDB-Verzeichnis mit neuen Dateien überschrieben. Die zweitgrößte Gefahr besteht darin, den Computer nach dem Löschen des Tresors weiterhin normal auf einer SSD zu nutzen, da dies den TRIM-Befehl auslöst und eine Wiederherstellung auf Sektorebene unmöglich macht.

Wenn Sie drei Dinge aus diesem Leitfaden mitnehmen sollten: Sichern Sie Ihre Seed-Phrase auf Papier, machen Sie sich bewusst, dass sich Ihr Tresor in einem bestimmten Ordner befindet, den Sie kopieren und aufbewahren können, und sollten Probleme auftreten, stellen Sie die Nutzung dieses Computers sofort ein, bevor Sie versuchen, Daten wiederherzustellen. Die Verschlüsselung ist solide – AES-256-GCM mit 600.000 PBKDF2-Iterationen lässt sich nicht durch Brute-Force-Angriffe knacken, es sei denn, das Passwort ist schwach –, aber die Daten selbst sind überraschend anfällig. Es handelt sich lediglich um wenige Kilobyte in einer LevelDB-Datenbank, die mit einem einzigen Klick zum Löschen des Browser-Caches verschwinden können.

Jede Wallet, die ich nicht wiederherstellen konnte, hatte denselben Grund: Der Nutzer hat das Gerät nach dem Datenverlust weiter benutzt. Jede Wallet, die ich erfolgreich wiederherstellen konnte, war eine, bei der die Daten noch auf der Festplatte vorhanden waren – manchmal an überraschenden Orten, manchmal in mehreren Kopien dank der „Append-only“-Architektur von LevelDB, aber immer deshalb, weil jemand innegehalten und nachgedacht hat, bevor er handelte.

Wenn Sie Hilfe bei der Wiederherstellung Ihrer Metamask-Wallet benötigen, kontaktieren Sie uns bitte per E-Mail: contact@cryptorecovery.io für eine professionelle, kostenlose Beratung oder besuchen Sie unsere Kontaktseite