Wie kann ein 24-Wörter-Seed wissen, wann ich Wallets zu einem späteren Zeitpunkt hinzugefügt oder entfernt habe?

Da ich keine 50 Rep-Punkte habe, musste ich meine Frage hier posten!

Dies ist eine Antwort von " https://bitcoin.stackexchange.com/users/56917/rstack " auf die Frage " Wie werden Ledger Backups gespeichert? "

„Die Verwendung von Wörtern zur Sicherung von Brieftaschen ist ein Prozess, der in BIP 39 beschrieben wird.

Grundsätzlich wird die Mnemonik in einen Seed umgewandelt. Dieser Seed wird dann als Seed für ein Heirarchical Deterministic (HD) Wallet verwendet, wie in BIP 32 dargelegt. Der Seed wird verwendet, um einen Master Extended Private Key zu generieren, aus dem alle anderen privaten Schlüssel generiert werden können. Die Kinderschlüsselgenerierung folgt dem Standard von BIP 44, sodass sie auch mit anderen Wallets kompatibel ist.

Indem Sie Ihre mnemonischen Wörter sichern, kann sie jedes Mal, wenn Sie sie in eine Brieftasche eingeben, den Seed neu erstellen, dann den privaten Hauptschlüssel und dann alle Ihre anderen Schlüssel, sodass Ihre Brieftasche wieder da ist.


Wenn ich mein Ledger zum ersten Mal starte, erhalte ich einen generierten 24-Wörter-Seed. An diesem Punkt hat mein Ledger die Standard-Wallets (BTC, ETH, LTC), falls vorhanden. Aus der Antwort von Rstack erfahre ich, wie das funktioniert oder bisher funktionieren könnte, ABER wie weiß mein 24-Wörter-Seed die Zukunft, wenn ich Brieftaschen hinzufüge oder entferne? Der Seed mit 24 Wörtern ändert sich nicht, nachdem ich Brieftaschen hinzugefügt oder entfernt habe. Zufällig generierte öffentliche und private Schlüssel, die in der Zukunft erstellt werden, können keinesfalls Verbindungen zu einem zuvor generierten 24-Wörter-Seed haben. Macht keinen Sinn!

Wenn dies nicht erklärt werden kann, muss ich davon ausgehen, dass meine öffentlichen und privaten Schlüssel irgendwo gespeichert und vom 24-Wörter-Seed abgerufen werden.

Kann jemand Licht ins Dunkel bringen? Danke im Voraus und Prost an alle.

Antworten (3)

Ich kenne Ledger nicht speziell, aber für HD-Wallets im Allgemeinen werden private und öffentliche Schlüssel nicht zufällig generiert. Vielmehr werden sie von einem deterministischen Algorithmus aus dem Seed (in diesem Fall die 24 Wörter) generiert. Sie sind also absolut an das Saatgut „gebunden“.

Wenn Sie eine Brieftasche für eine andere Münze hinzufügen, werden die Schlüssel für diese Brieftasche vermutlich aus demselben Seed generiert (unter Verwendung unterschiedlicher Parameter, damit Sie nicht in allen Ihren Brieftaschen dieselben Schlüssel haben). Der Seed selbst bleibt gleich und muss nicht geändert werden, um die Erstellung der neuen Brieftasche widerzuspiegeln.

Sollten Sie jemals eine Wiederherstellung benötigen, müssen Sie dem Gerät vermutlich mitteilen, für welche Münzen Sie Brieftaschen hatten. Es wird dann alle Schlüssel für diese Brieftaschen aus dem Master-Seed neu generieren, wobei derselbe Algorithmus verwendet wird, der ursprünglich verwendet wurde, und Sie haben dieselben Schlüssel, die Sie zuvor hatten. (Wenn Sie versuchen, einige Brieftaschen wiederherzustellen, die Sie nicht verwendet haben oder die Sie entfernt hatten, werden Sie lediglich keine Münzen in dieser Brieftasche finden.)

Ihre öffentlichen und privaten Schlüssel werden nirgendwo außer im Gerät selbst gespeichert.

Ja, das macht jetzt total Sinn! Ich dachte immer, der Seed wird für das Ledger generiert und nicht um Schlüssel zu erstellen. Cool, danke Nate.

Die kurze Antwort ist, dass der gesamte Prozess von Wörtern bis zu abgeleiteten privaten Schlüsseln und Adressen vollständig deterministisch ist. Weitere Informationen finden Sie in den folgenden Schritten.

Entropie-zu-Mnemonik

Der Prozess für eine BIP39-konforme 12-Wort-Mnemonik besteht beispielsweise darin, dass zuerst eine (idealerweise) 128 Bit lange zufällige Binärzahl mit einem kryptografisch sicheren Verfahren generiert wird, dann wird eine deterministische Prüfsumme berechnet, indem die ersten 4 Bit genommen werden eines SHA256-Hash-Digest der 128 Bits, formatiert als Byte-Array.

Dann haben wir 132 Bits, die in 12 Gruppen aufgeteilt sind, wobei jede Gruppe auf ein Wort auf einem Index von 2^11 Wörtern (insgesamt 2048) zeigt.

Mnemonik zum Samen:

Diese 12 Wörter stellen den Root-Seed dar, der dann in eine HMAC-SHA512-Hash-Funktion (mit 2048 Runden) eingespeist wird, und die 256 Bits ganz links des 512-Bit-Hash-Digest sind der Master Private Key, während die 256 Bits ganz rechts des 512-Bit-Hash-Digest ist der Master Chain Code gemäß BIP32 für Hierarchical Deterministic (HD) Wallets .

Erweiterte Schlüssel (xPub/xPrv):

Der private Master-Schlüssel wird als privater Schlüssel mit elliptischer Kurve verwendet, um den öffentlichen Master-Schlüssel zu berechnen, der 264 Bit umfasst.

Der Chaincode, zusammen mit einem bei 0 beginnenden Indexwert, ermöglicht es Ihnen, den Ableitungsprozess zu durchlaufen, um jedes Mal ein anderes untergeordnetes privat-öffentliches Schlüsselpaar zu erzeugen (und somit zu erweitern), wenn sich der Indexwert ändert, während der Chaincode konstant ist (als Entropie).

Abgeleitete untergeordnete private-öffentliche Schlüssel:

Dieser Prozess funktioniert so, dass der übergeordnete öffentliche Schlüssel mit dem übergeordneten Chaincode zusammen mit dem Indexwert verkettet und erneut in die HMAC-SHA512-Funktion eingespeist wird, wo die 512-Bit-Ausgabe die Verkettung des untergeordneten privaten Schlüssels und der untergeordneten Kette darstellt Code (wobei der private Schlüssel verwendet wird, um den untergeordneten öffentlichen Schlüssel zu berechnen).

HMAC-SHA512(xPub+Chaincode+index0) = (512bits= child_privatekey_0 || childchaincode0)

childprivatekey_0 * Secp256k1 Generator point = childpublickey_0

HMAC-SHA512(xPub+Chaincode+index2) = (512bits= child_privatekey_1 || childchaincode1)

childprivatekey_1 * Secp256k1 Generator point = childpublickey_1

Dieser Prozess kann wiederholt werden, um fast 2 Milliarden untergeordnete Schlüssel aus dem erweiterten privaten Schlüssel abzuleiten (in Bezug auf den maximal möglichen Indexwert).

Daher sind Mnemoniken unglaublich praktisch, verglichen mit der Notwendigkeit, so viele verschiedene private Schlüssel zu speichern, da die Mnemonik es Ihnen ermöglicht, alle abgeleiteten Schlüssel neu zu erstellen, und sogar mehrere Kryptowährungen mit der Verwendung von BIP44 unterstützen kann . Ich bezeichne Mnemonics gerne als Cryptovaults und nicht als Wallets, da sie mehrere Wallets und möglicherweise für mehrere Konten (Kryptowährungen) beherbergen. Der Kompromiss bei der Sicherheit besteht jedoch darin, dass alle Ihre Vermögenswerte an einen potenziellen Fehlerpunkt gebunden sein können, wenn die Mnemonik nicht richtig gesichert/abgeleitet wird. Daher ist es üblich, dass Benutzer mehrere Mnemonics haben, z. B. für Hot Wallets und andere für Cold Storage.

Es hat also zunächst keine Möglichkeit zu wissen, ob Sie beispielsweise eine LTC-Wallet erstellt haben oder nicht. Aber es verwendet die seed, die derivation pathund die , gap limitum zu sehen, ob es irgendwelche Adressen entlang der öffentlichen Schlüsselkurve gibt, die verwendet wurden. Wenn dies der Fall ist, wird die Brieftasche als aktiv markiert.

Jede Kryptowährung hat ihren Ableitungspfad. Sie können mit diesem Tool spielen , um sich einige davon anzusehen.

Sobald Sie den Seed wiederhergestellt haben, beginnt die Wallet-Software mit der Iteration über den öffentlichen Schlüssel + Ableitungspfad, um alle Transaktionen in der Wallet dieser Kryptowährung zu finden. Dadurch werden wahrscheinlich einige Ihrer Adressdaten an den verwendeten Explorer / vollständigen Knoten weitergegeben, da Sie einfach Adresse für Adresse gehen und nach dem Rest fragen. ABER ES TEILT IHREN PRIVATEN SCHLÜSSEL NICHT und vermittelt Ihnen den Eindruck, dass das Wallet die ganze Zeit wusste, welche Kryptos Sie dort hatten.

Beachten Sie jedoch, dass die Einschränkung dieser Methode darin besteht, dass Adressen in jeder Währung verwendet werden müssen, damit das Wallet sie erkennen kann. Andernfalls kann es nicht unterscheiden, ob Sie eine Währung aktiviert haben oder nicht.

Das gap limithängt nicht genau mit Ihrer speziellen Frage zusammen, sondern ist, wie viele Iterationen die Software vor der letzten bekanntermaßen verwendeten Adresse durchführen wird. Andernfalls könnte es in einer Endlosschleife bleiben und versuchen, alle Adressen zu generieren, die zu Ihrem Schlüssel gehören.