NBitcoin und Mnemonik-Standards

Ich bin sehr neu in der Bitcoin-Entwicklung, also verzeihen Sie mir ...

Ich verwende NBitcoin in einer .Net-Konsolen-App, um einen Hauptschlüssel mit einer Mnemonik zu generieren und dann hierarchische Schlüssel abzuleiten. Hier ist der Code, den ich verwende:

Mnemonic mnemo = new Mnemonic(Wordlist.English, WordCount.Twelve);
ExtKey hdroot = mnemo.DeriveExtKey();
var wif = hdroot.GetWif(Network.Main);
var defaultAddress = hdroot.Derive(new KeyPath("m/0/0"));

Hier ist die Mnemonik, die ich als Ergebnis erhalte, sowie eine öffentliche Adresse, die vom Hauptschlüssel unter Verwendung des Pfads "m/0/0" abgeleitet wird:

Mnemonik: trockenes braunes Laufwerk Parade drastischer Glanz Umarmung hartes Berichtsdarlehen Falteneisen

Pfad: m/0/0/: 1GcchMaHAN1XRQsoi8gPg8TShqzN4sNGvu

Ich habe die Neuerstellung meiner Schlüssel mit der Mnemonik getestet und konnte immer genau die gleichen Schlüssel wie erwartet in meiner Konsolen-App ableiten.

Da ich neugierig war, wollte ich sehen, ob ich diese Mnemonik in bestehende Wallet-Software importieren und auch die gleichen Schlüssel erhalten könnte. Da die Exodus-Brieftasche eine Standard-Mnemonik mit zwölf Wörtern verwendet, habe ich sie gestartet und meine Brieftasche mit derselben Mnemonik generiert. Allerdings passt keiner der Schlüssel zusammen! Ich habe meinen öffentlichen Schlüssel exportiert und sichergestellt, dass es sich um den gleichen Pfad wie „m/0/0“ vom Master handelt. Wie Sie sehen können, ist es KEINE Übereinstimmung:

Exportierter öffentlicher Schlüssel von Exodus mit derselben Mnemonik:

Mnemonik: trockenes braunes Laufwerk Parade drastischer Glanz Umarmung hartes Berichtsdarlehen Falteneisen

Adresse: 1DMDJ266gxMCJiTcWk5MZFbfxxx4Ss3URN

Pfad: m/0/0

Ich habe auch die Mnemonik auf Jaxx sowie die Coinomi-Brieftasche auf Android getestet und sie hat die gleichen Schlüssel wie Exodus abgeleitet.

Also ich bin komplett verwirrt. Das einzige, was mir einfällt, ist, dass es eine Standardentropie gibt, die diese Brieftaschen verwenden, die in meiner Implementierung fehlt?

Meine Frage ist, wie kann ich NBitcoin verwenden, um denselben mnemonischen Standard zu erstellen, den Brieftaschen wie Exodus, Coinomi und Jaxx verwenden?

Antworten (1)

Der mnemonische Standard ist BIP 39, und das ist nicht das Problem. Das Problem sind die Ableitungspfade.

Exodus, Jaxx, Coinomi und viele andere Wallets verwenden die BIP 44-Spezifikation zum Ableiten von Schlüsseln. Das bedeutet, dass mfür diese Brieftaschen eigentlich der Schlüssel auf dem Weg ist m/44'/0'/0'. In Ihrem Code mit NBitcoin verwenden Sie jedoch direkte BIP 32-Pfade, also mist Ihr tatsächlich m. In NBitcoin ist Ihr Schlüsselpfad also tatsächlich m/0/0, aber in anderer Wallet-Software ist der Pfadm/44'/0'/0'/0/0