Wie verschlüsselt der Bitcoin-Client die wallet.dat-Datei?

Welcher Algorithmus wird zum Verschlüsseln der Datei wallet.dat verwendet?

Antworten (2)

Eine ausführliche Erklärung finden Sie in der README der Anwendung: https://github.com/bitcoin/bitcoin/blob/6b8a5ab622e5c9386c872036646bf94da983b190/doc/README

Zusamenfassend:

  • Die Passphrase wird mit EVP in ein Schlüssel/iv-Paar umgewandelt, mit einer dynamischen Anzahl von Runden
  • Dieses Schlüssel/iv-Paar wird verwendet, um einen zufällig generierten Hauptschlüssel mit AES-256-CBC zu verschlüsseln
  • Der geheime Teil der Brieftaschenschlüssel wird dann mit diesem Hauptschlüssel verschlüsselt, wiederum mit AES-256-CBC
Hmm, die README scheint hin und wieder aktualisiert zu werden und die Beschreibung der Wallet-Verschlüsselung ist nicht mehr da. Ist das die Version, die du verlinkt hast? github.com/bitcoin/bitcoin/blob/…
@ThePiachu Danke für den aktualisierten Link, er hat mir ein paar Minuten gespart. Ich habe die Antwort aktualisiert, um den permanenten Link widerzuspiegeln.

Pieters Antwort deckt die technischen Details ab, daher werde ich nichts davon wiederholen. Ich möchte hinzufügen, dass Benutzer daran denken sollten, dass der schwächste Punkt in der Bitcoin-Core-Brieftasche oder jedem kryptografisch starken Verschlüsselungssystem die Passphrase ist. Das System wandelt eine Passphrase in einen AES-256-Schlüssel um und dieser vom Passwort abgeleitete Schlüssel wird verwendet, um einen zufällig generierten Master-Wallet-Schlüssel zu verschlüsseln. Der Master-Wallet-Schlüssel kann nicht brutal erzwungen werden, es sei denn, es handelt sich um einen kompromittierten oder fehlerhaften PRNG. Angreifer können jedoch versuchen, die Passphrase selbst brutal zu erzwingen.

Der Client fügt Versuche hinzu, sich gegen diesen Angriff abzusichern, indem er sowohl ein Salt (Zufallszahl) als auch mehrere Hash-Runden verwendet. Das Salt verhindert einen Precomputation-Angriff, da dieselbe Passphrase mit unterschiedlichen Salts unterschiedliche Schlüssel erzeugt. Die Verwendung mehrerer Hashing-Runden verlangsamt Brute-Force-Angriffe, da der Angreifer auch mehrere Runden für jede versuchte Passphrase durchführen muss.

Der Client verwendet dynamische Schlüsselhärtung. Dies bedeutet, dass die Anzahl der Runden je nach Rechenleistung des Clients variiert (um die Zeit zum Verschlüsseln oder Entschlüsseln unter 1 Sekunde zu halten). Je mehr Rechenleistung Ihre Hardware hat, desto mehr Runden führt sie aus und desto schwieriger wird es, das Passwort brutal zu erzwingen. Wenn Sie Ihre Passphrase ändern, passt der Client die Anzahl der dynamischen Runden basierend auf der Rechenleistung Ihrer aktuellen Hardware an. Indem Sie Ihr Passwort regelmäßig aktualisieren, können Sie sicherstellen, dass der vom Passwort abgeleitete Schlüssel mit dem Mooreschen Gesetz Schritt hält.

Key Hardening durch den Einsatz von Salt und Key Stretching kann nur so weit gehen. Wenn Ihr Passwort "p@ssw0rd!" oder ein anderes bekanntes, häufig verwendetes Passwort ist es immer noch trivial, die Brieftasche brutal zu erzwingen. Um zu veranschaulichen, warum nehmen wir an, der Angreifer hat Hardware, die 100 Millionen Hashes pro Sekunde versuchen kann, und Ihre Brieftasche verwendet 100.000 Hash-Runden. Das bedeutet, dass die Hardware des Angreifers (100 Millionen Hashes) 1.000 Passwörter pro Sekunde versuchen kann. Die Brieftasche verlangsamt den Angreifer also, aber wenn das Passwort schwach ist, kann es ihn nicht genug verlangsamen. Es gibt öffentlich zugängliche Listen von zuvor kompromittierten/gestohlenen/gehackten Passwörtern mit mehreren zehn Millionen Passwörtern. Ohne Key-Stretching könnte ein Angreifer alle möglichen bekannten Passwörter in weniger als einer Sekunde ausprobieren. Key Stretching verlangsamt das auf ein paar Stunden. Nehmen wir andererseits an, dass Ihr Passwort unbekannt und stark genug war, dass es mit einem einzigen Hash im Durchschnitt einen Tag dauern würde, bis es brutal erzwungen wird. Bei 100.000 Schuss erhöht sich die Zeit auf Jahrhunderte.

Ich möchte hinzufügen, dass die Passphrase aus einem bestimmten Grund als Passphrase bezeichnet wird. Die Verwendung von „Dies ist eine sehr lange – aber sehr einfache – zu merkende Passphrase“ ist um Tonnen sicherer als „fl@a%%zG“, selbst wenn ein Wörterbuchangriff verwendet wird.
@AndreasBonini: Dank Ihres Kommentars wird diese bestimmte Passphrase jetzt jedoch Teil des Wörterbuchs sein ;-)