Zum Hauptinhalt springen

Was ist BIP39?

U
Verfasst von UKey Wallet

Die BIP-39-Spezifikation beschreibt hauptsächlich den Algorithmus und den Prozess zur Generierung deterministischer Wallets auf der Grundlage von Mnemoniken (einer Reihe leicht zu merkender Wörter).

Die Spezifikation besteht aus zwei Hauptteilen:

  1. So generieren Sie die Mnemonik.

  2. So wandeln Sie die generierte Mnemonik in einen binären Startwert um.

Im Folgenden wird erläutert, wie man deterministische Wallets generiert, indem zunächst jeder dieser beiden Teile beschrieben wird.

Generieren einer Mnemonik

Der algorithmische Prozess zum Generieren einer Mnemonik ist wie folgt:

Der Prozess ist wie folgt:

  1. Erstellen Sie eine Zufallsfolge (Entropie) von 128 bis 256 Bit (Schrittweite 32 Bit).

  2. Führen Sie SHA256 für die im vorherigen Schritt generierte Zufallssequenz durch, um einen Hash-Wert zu generieren, und verwenden Sie die ersten N Bits des Hash-Werts (Entropielänge / 32, z. B. 128 Bits, dann N = 4) als Prüfsumme der Zufallssequenz.

  3. Fügen Sie am Ende der im ersten Schritt generierten Zufallssequenz eine Prüfsumme hinzu, sodass für das Beispiel in der Abbildung die Zufallssequenz mit Prüfsumme 128 + 4 = 132 Bit beträgt.

  4. Trennen Sie die Zufallssequenz aus dem vorherigen Schritt durch 11-Bit-Segmente (aufteilen), sodass für eine Sequenz mit 128-Bit-Entropielänge 12 Segmente generiert werden (132 / 11 = 12).

  5. Zu diesem Zeitpunkt wird jeder Wert, der ein 11-Bit-Segment enthält, einem vordefinierten Wörterbuch mit 2048 Wörtern zugeordnet.

  6. Die letzte Wortgruppe, die in der Reihenfolge des Schnitts generiert wird, ist die Mnemonik.

Seed-Generierung aus Mnemonik

Nach der mnemonischen Generierung können wir den Seed generieren, indem wir den Algorithmus der Schlüsselgenerierungsfunktion PBKDF2 verwenden.

PBKDF2 erfordert zwei Parameter: eine Mnemonik und ein Salt. Der Zweck von Salz besteht darin, das Knacken zu erschweren, und in BIP-39 können wir eine Passphrase als zusätzlichen Sicherheitsfaktor zum Schutz der Samen einführen.

„PBKDF2 ist Teil der Public-Key Cryptography Standards (PKCS)-Reihe von RSA Laboratories. insbesondere PKCS #5 v2.0, auch veröffentlicht als RFC 2898 der Internet Engineering Task Force.“

Im Anschluss an die obige mnemonische Generierung zeigt das folgende Diagramm den Algorithmus für die Seed-Generierung.

  • Der erste Parameter von PBKDF2 ist die oben generierte Mnemonik.

  • Der zweite Parameter von PBKDF2 ist der Salt, der im Allgemeinen aus einer Zeichenfolge und einer optionalen Verkettung von vom Benutzer bereitgestellten Verschlüsselungszeichenfolgen besteht.

  • PBKDF2 verwendet den HMAC-SHA512-Algorithmus, der 2048 Hashes verwendet, um einen 512-Bit-Wert als Startwert zu erzeugen.

HD-Wallet aus Seed generieren

Der oben generierte Seed wird als Root-Seed des HD-Wallets verwendet, und der Root-Seed eines beliebigen HD-Wallets kann das gesamte HD-Wallet neu erstellen.

Die Eingabe des Root-Seeds in den HMAC-SHA512-Algorithmus ergibt einen 512-Bit-Hash, dessen linke 256 Bit als Master Private Key und die rechten 256 Bit als Master Chain Code verwendet werden. Danach kann der Master Public Key (264 Bit) durch den Master Private Key generiert werden.

Wie Sie der obigen Abbildung entnehmen können, wird der HD-Schlüssel mit den folgenden Parametern generiert.

  • Übergeordneter privater Schlüssel oder übergeordneter öffentlicher Schlüssel; (beides sind unkomprimierte 256-Bit-ECDSA-Schlüssel).

  • Elternkettencode von 256 Bit.

  • Eine 32-Bit-Ganzzahlindexnummer.

Darüber hinaus ist der obige Prozess rekursiv und der untergeordnete private Schlüssel im Diagramm kann als übergeordneter privater Schlüssel auf der nächsten Ebene verwendet werden.

Durch die Eingabe von (übergeordneter öffentlicher Schlüssel, übergeordneter Kettencode, Indexnummer) in den HMAC-SHA512-Algorithmus können wir seine Unterschlüssel generieren und die Indexnummer anpassen, um mehrere Unterschlüssel auf derselben Ebene zu generieren.

Über den erweiterten Schlüssel

Da diese Schlüsselableitungsfunktion unidirektional ist, können nicht alle Unterschlüssel zum Ableiten ihrer übergeordneten Schlüssel oder Schwesterschlüssel auf derselben Ebene verwendet werden. Nur der übergeordnete Schlüssel und der übergeordnete Kettencode (die aus dem Schlüssel und Kettencode der übergeordneten Ebene des übergeordneten Schlüssels generiert werden) können zum Ableiten aller Unterschlüssel und Unterkettencodes und anschließenden Generieren der entsprechenden untergeordneten öffentlichen Schlüssel und Adressen zum Signieren von Transaktionen verwendet werden.

Die Kombination aus Schlüssel und Kettencode wird als erweiterter Schlüssel bezeichnet, und der erweiterte Schlüssel kann verwendet werden, um von da an alle Zweige zu generieren.

Der im erweiterten Schlüssel bereitgestellte Schlüssel kann entweder ein privater Schlüssel oder ein öffentlicher Schlüssel sein, kombiniert mit dem Kettencode Erweiterter privater Schlüssel bzw. Erweiterter öffentlicher Schlüssel und notiert als (k, c) bzw. (K, c), wobei der öffentliche Schlüssel K = Punkt(k) ist.

Wir können den erweiterten öffentlichen Schlüssel vom erweiterten privaten Schlüssel ableiten und nicht umgekehrt. Daher kann für einige Transaktionsszenarien (z. B. E-Commerce) ein neuer öffentlicher Schlüssel und eine neue Adresse für jede Transaktion generiert werden, um die Zahlung zu erhalten, während der erweiterte private Schlüssel in einer Papiergeldbörse oder einer Hardware-Geldbörse gespeichert werden kann, um Transaktionen sicher offline zu signieren. Wie wir sehen können, ist die Sicherheit des erweiterten öffentlichen Schlüssels relativ hoch, und das folgende Diagramm zeigt den Übertragungsmechanismus des erweiterten übergeordneten öffentlichen Schlüssels, um den untergeordneten privaten Schlüssel abzuleiten und den untergeordneten öffentlichen Schlüssel zu generieren:

Hat dies deine Frage beantwortet?