Ich habe eine Electrum-Wallet-Datei (von Electrum 1.9.6 für Windows, falls es darauf ankommt) durchgesehen und versucht zu verstehen, welche Informationen darin enthalten sind, und ich konnte anfangs nicht genau herausfinden, wo die privaten Schlüssel gespeichert waren (oder sogar, ob sie wurden vielleicht in einer anderen Datei gespeichert). Ich vermute, dass das Feld "seed" in der default_wallet-Datei genügend Informationen enthält, damit die privaten Schlüssel, die öffentlichen Schlüssel und die 12-Wort-Mnemonik generiert werden können. Habe ich soweit recht?
Um ein bisschen mehr zu experimentieren, wollte ich sehen, ob 2 Wallet-Dateien, die dieselbe 12-Wörter-Mnemonik verwenden, identisch wären. Es überrascht nicht, dass, als ich die Brieftaschen nicht verschlüsselte, dieselbe Mnemonik zu identischen Brieftaschendateien zu führen schien. Ich habe jedoch auch versucht, jede Wallet mit demselben Passwort zu verschlüsseln, und zu meiner Überraschung hatten die Dateien unterschiedliche Werte im Feld „Seed“. Das hat mich überrascht, also frage ich mich, ob das ein erwartetes Verhalten ist und warum das passiert?
Es ist eigentlich eine gute Frage. Werfen wir einen Blick auf das, was passiert. Zuerst hasht Electrum Ihre Mnemonik, um einen Seed zu generieren. Der Seed enthält tatsächlich alle Informationen, die zum Generieren des öffentlichen Master-Schlüssels und des geheimen Master-Schlüssels erforderlich sind, wobei der erste verwendet wird, um die Sequenz öffentlicher Schlüssel (Adressen) zu generieren, und der zweite verwendet wird, um einen geheimen Schlüssel aus einem öffentlichen Schlüssel abzuleiten (eigentlich ist es etwas komplexer). Dann speichert Electrum die Wallet-Datei, die den Seed und die tatsächlich verwendeten Schlüssel enthält, die gesamte Sequenz der Schlüsselpaare, es sei denn, sie trifft auf 5 aufeinanderfolgende unbenutzte Adressen. Es kann es entweder unverschlüsselt oder verschlüsselt speichern. Im ersten Fall sieht der Seed-Wert in der Datei immer gleich aus, ebenso wie private Schlüssel. Im zweiten Fall jedoch nicht. Wieso den? Die Electrum-Dokumentation sagt:
Electrum verwendet AES-256-CBC, um den Seed und die privaten Schlüssel in der Brieftasche zu verschlüsseln.
Was bedeutet das? AES-256 ist einfach eine Blockverschlüsselung. Es nimmt einen Datenblock (in diesem Fall 128 Bit) und einen Schlüsselblock (256 Bit) und gibt 128 Bit verschlüsselter Daten aus. Aber es ist nicht das, was Electrum tut. Tatsächlich verwendet niemand solche Blockchiffren und niemand sollte es jemals tun. Stattdessen werden sogenannte Modi verwendet.In unserem Fall ist es der Modus Cipher Block Chaining (CBC). Electrum generiert zuerst einen zufälligen Initialisierungsvektor (IV), mischt ihn (durch exklusive oder Operation) mit den ersten 128 Bit der Eingabe und verwendet AES-256 auf diesem gemischten Block, um den ersten verschlüsselten Block zu erzeugen. Für jeden nachfolgenden Block macht es dasselbe, außer dass anstelle von IV der vorherige verschlüsselte Block verwendet wird, um ihn mit dem Klartextblock zu mischen. Die IV wird zusammen mit der Datei gespeichert. Das ist schließlich der Grund, warum Sie in einer Datei immer einen anderen Seed-Wert haben, selbst wenn Sie dasselbe Passwort verwenden (was zu demselben Schlüssel für die AES-256-CBC-Verschlüsselung führt [1]) – es wird jedes Mal ein anderer IV verwendet.
[1] Dies ist wahrscheinlich auch nicht der Fall, da die Schlüsselableitungsfunktion wahrscheinlich verwendet wird, um einen Schlüssel aus Ihrer Passphrase zu liefern. In diesem Fall wird der Passphrase ein zusätzlicher zufälliger Salt-Wert hinzugefügt, bevor sie gehasht und nebenher gespeichert wird, ähnlich wie bei IV.
Der Seed ist der Schlüssel, der verwendet wird, um alle Ihre Adressen deterministisch abzuleiten. Die Verschlüsselung dient zum Schutz des Seeds https://electrum.org/faq.html#wallet-encryption
Johannes T
Michael McGowan
CodesInChaos
Michael McGowan
David Schwarz