Warum können die gleichen 12 Wörter unterschiedliche Seeds in einer Electrum-Wallet-Datei erzeugen?

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?

Wenn die 12-Wort-Mnemonik eine andere Brieftasche erzeugt, macht dies die Mnemonik nutzlos. Bist du sicher, dass du dich nicht bei den Wörtern vertippt hast oder so?
Ich habe kopiert und eingefügt und den gleichen Effekt mehrmals gesehen. Die Brieftaschen sind insofern gleich, als sie die gleichen Adressen haben.
Vielleicht ist der "Seed" ein Salt/IV, das zur Verschlüsselung verwendet wird. Die Transformation von Passphrase zu privaten Schlüsseln muss deterministisch sein, die Verschlüsselung muss es nicht sein.
@CodesInChaos Das ist meine Vermutung, aber ich hatte gehofft, dass jemand mit mehr Vertrautheit mit dem Innenleben dies überprüfen kann. Ein sehr, sehr flüchtiger Blick auf den Code machte es mir nicht klar, ob dies der Fall war oder nicht.
Die Verschlüsselung enthält fast immer ein zufälliges Element.

Antworten (2)

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.

"wird verwendet, um einen geheimen Schlüssel von einem öffentlichen Schlüssel abzuleiten". Wenn man das kann, gibt es nicht viel Sicherheit? Umgekehrt ist es doch sicher?
@Eichhörnchen Nicht wirklich. Man kann jeden privaten Schlüssel mit zusätzlichem Wissen von seinem entsprechenden öffentlichen Schlüssel ableiten. Es ist sicher, solange der Benutzer dieses zusätzliche Wissen nicht preisgibt.
Ah, ich habe gerade darüber gelesen - "gehärtete Ableitung" schützt davor. Das "zusätzliche Wissen", auf das Sie sich beziehen, ist der Kettencode?
Zuerst entschuldigen Sie die späte Antwort, es war eine arbeitsreiche Zeit für mich. Nein, die gehärtete Ableitung soll vor diesem "Angriff" schützen, aber das zusätzliche Wissen ist etwas ganz anderes: Es ist der Master Private Key, der effektiv aus dem Master Public Key und jedem der einzelnen Private Keys extrahiert werden kann. Ich würde dies gerne ausführlicher erklären, wenn Sie eine Frage stellen, da es nicht so gut in einen Kommentar passt und Kommentare nicht alle mathematischen Formatierungen zulassen. Lassen Sie mich einfach wissen, dass Sie danach gefragt haben.

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

https://electrom.org/faq.html#seed

Ich habe diese Links gelesen, bevor ich meine Frage gestellt habe. Es scheint, dass wahrscheinlich etwas Entropie vom Benutzer zu einer Art Salz hinzugefügt wird, aber ich hätte gerne eine Bestätigung dazu.
Sie liegen in den meisten Inhalten Ihrer Frage einfach falsch. Wenn Sie also wirklich den gesamten Inhalt dieser Links gelesen haben, haben Sie nichts verstanden. Warum sollte das eine Rolle spielen, wenn der verschlüsselte Seed nicht übereinstimmt? Es ist nur wichtig, dass die Samen nach dem Entschlüsseln gleich sind, so funktioniert die Verschlüsselung.
Wenn ich mit einer meiner Annahmen falsch liege, dann erkläre mich bitte ... deshalb gibt es diese Seite.
Warum es wichtig ist, wenn der verschlüsselte Seed nicht übereinstimmt, ist sehr wichtig, um mein Verständnis darüber zu bestätigen, welche Informationen in der default_wallet-Datei enthalten sind und welche nicht. Zu sehen, dass sie unterschiedlich waren, überraschte mich und ließ mich fragen, ob mein Verständnis der Datei falsch war oder ob es vielleicht einen Fehler in der Implementierung gab.