Generieren eines privaten Schlüssels aus bip39-Seed

laut bip39 habe ich das gemacht 12 mnemonic wordsund dann eine 512 bit seedvon denen bekommen.

Jetzt möchte ich wissen, wie ich diesen Seed in einen privaten Schlüssel umwandeln muss ?

Welche Funktionen muss ich verwenden?

Bitte stellen Sie mir Bibliotheken für browser javascript.

obwohl ich weiß, dass ich ECDSAund verwenden muss secp256k1.

aber ich weiß nicht genau, was die Schritte sind?

Welche Probleme haben Sie, wenn Sie der Referenzimplementierung oder den Javascript-Implementierungen folgen, die in dem Link aufgeführt sind, den Sie in Ihrer Frage angegeben haben?
@RedGrittyBrick Mein aktuelles Problem ist, dass ich nicht weiß, basierend auf welchem ​​Algorithmus ich einen 512-Bit-Seed in einen privaten 256-Bit-Schlüssel konvertieren muss.

Antworten (1)

Ich weiß nicht, basierend auf welchem ​​Algorithmus ich einen 512-Bit-Seed in einen privaten 256-Bit-Schlüssel konvertieren muss.

Apropos Algorithmen :

BIP-0039 sagt:

Von der Gedächtnisstütze zum Samen

Ein Benutzer kann entscheiden, seine Mnemonik mit einer Passphrase zu schützen. Wenn keine Passphrase vorhanden ist, wird stattdessen eine leere Zeichenfolge "" verwendet.

Um einen binären Seed aus der Mnemonik zu erstellen, verwenden wir die PBKDF2-Funktion mit einem mnemonischen Satz (in UTF-8 NFKD) als Passwort und der Zeichenfolge „mnemonic“ + Passphrase (wieder in UTF-8 NFKD) als Salt. Der Iterationszähler wird auf 2048 gesetzt und HMAC-SHA512 wird als Pseudozufallsfunktion verwendet. Die Länge des abgeleiteten Schlüssels beträgt 512 Bit (= 64 Byte).

Die bisherigen Algorithmen werden also beschrieben durch

Laut dem Bkitcoin-Wiki-Eintrag für Private Key :

Wallet-Software kann einen BIP 32 Seed verwenden, um viele private Schlüssel und entsprechende öffentliche Schlüssel aus einem einzigen geheimen Wert zu generieren. Dies wird als hierarchisches deterministisches Wallet oder kurz HD-Wallet bezeichnet. Der Seed-Wert oder erweiterte Master-Schlüssel besteht aus einem 256-Bit-Privatschlüssel und einem 256-Bit-Kettencode, also insgesamt 512 Bit. Der Seed-Wert sollte nicht mit den privaten Schlüsseln verwechselt werden, die direkt zum Signieren von Bitcoin-Transaktionen verwendet werden.

BIP-0032 sagt:

Erweiterte Tasten

Im Folgenden definieren wir eine Funktion, die mehrere untergeordnete Schlüssel von einem übergeordneten Schlüssel ableitet. Um zu verhindern, dass diese allein vom Schlüssel selbst abhängen, erweitern wir sowohl private als auch öffentliche Schlüssel zunächst um zusätzliche 256 Bit Entropie. Diese als Kettencode bezeichnete Erweiterung ist für entsprechende private und öffentliche Schlüssel identisch und besteht aus 32 Bytes.

Wir stellen einen erweiterten privaten Schlüssel als (k, c) dar, wobei k der normale private Schlüssel und c der Kettencode ist. Ein erweiterter öffentlicher Schlüssel wird als (K, c) dargestellt, wobei K = Punkt(k) und c der Kettencode ist.

Anschließend wird der verwendete Algorithmus beschrieben.


In Bezug auf Javascript- Bibliotheken


Es scheint mir, dass dies eine Menge Graben in Dokumentation und Quellcode erfordert.

Es scheint zunächst nicht etwas zu sein, das in dem Raum, der den Antworten in diesem Q&A-Forum zugewiesen ist, vollständig erfasst werden kann.


Also, basierend auf dem, was Sie sagen: Ich sollte das Produzierte 512 bits seedin zwei 256 bitsTeile aufteilen, den ersten Teil als verwenden master private keyund den zweiten Teil als verwenden chain code (entropy). Rechts?
@saeidezzati: so kommt es mir vor.