HD Wallet mit BIP44 - Problemumgehung zum Ableiten öffentlicher Schlüssel, die nur einen xpub kennen

Mein Ziel: Ich möchte keinen privaten Schlüssel benötigen, um hierarchisch neue Adressen abzuleiten.

Sicher, ich kann zunächst einen Stapel von Adressen erstellen, wenn ich einen privaten Schlüssel habe. Aber sobald ich diesen Stapel überschritten habe, benötige ich den privaten Schlüssel erneut, um weitere Adressen zu generieren.

Ich möchte Adressen ableiten, die nur einen öffentlichen Schlüssel kennen. Ich weiß, dass dies mit BIP39 möglich ist, verstehe aber, dass es Sicherheitsbedenken geben kann, dh. Wenn ein Angreifer auf xpub und xprv stößt, kann er beliebig viele Adressen ableiten und damit Transaktionen signieren.

Der Versuch, mit BIP44 von einem öffentlichen HD-Schlüssel abzuleiten, führt zu einer Ausnahme, die besagt, dass ein gehärteter Pfad einen privaten HD-Schlüssel erfordert. Ich habe jedoch eine Problemumgehung gefunden, aber ich befürchte, dass sie betrügt und die Vorteile der Pfadhärtung in BIP44 opfern könnte.

Hier ist ein Beispiel:

// It starts off with a `userCode` that represents a BIP39 Mnemonic code.
const codeUser = new Mnemonic('select scout crash enforce riot rival spring whale hollow radar rule sentence')

// Convert to HD private key...
const hdUserPrivateKey = codeUser.toHDPrivateKey()

console.log(hdUserPrivateKey.hdPublicKey.toString())
// Gives: `xpub661MyMwAqRbcEngoXGfFNahZ5FzSDGqY8pWKTqo6vtXxK15otDNLXJmbeHV7DUjvPc7CAFhYp6hzBiTanr8rgoHPHf6NSgZAyejK5bk8MiW`
// But we won't use it...

// Instead, I can then derive a BIP44 without the `change`, `address_index` segments from `hdUserPrivateKey`...
console.log(hdUserPrivateKey.deriveChild(`m/44'/0'/0'`).hdPublicKey.toString())
// Gives: `xpub6CsrEMgU2f8uEGfFMvsPjKB9ekHuZiesLqSHLwCJuNFkP2uJGm7WjTo2gy95S4KEBc4etdodNQXAvn5Vsf4kupJQ1DKR4DMfcHwKdhQ3k6h`
// This is the xpub I can use to derive addresses without requiring the initial private key.

// So knowing this, I can build a HD public key given that xpub...
const hdPublicKey = Mnemonic.bitcore.HDPublicKey('xpub6CsrEMgU2f8uEGfFMvsPjKB9ekHuZiesLqSHLwCJuNFkP2uJGm7WjTo2gy95S4KEBc4etdodNQXAvn5Vsf4kupJQ1DKR4DMfcHwKdhQ3k6h')

const derivative = 0

// We can derive from it this path, but what is this path defined as? Are we back in BIP39 territory now?
const publicKey = hdPublicKey.deriveChild(`m/0/${derivative}`).publicKey

const address = new Mnemonic.bitcore.Address(publicKey)

console.log(address.toString()) // 12XyHwtmoq5w4VQ5mzcu6BQzdLqCLxUv5e

... und natürlich kann ich den derivativeso oft erhöhen, wie ich möchte, um neue Adressen aus dem öffentlichen Schlüssel zu erstellen.

Wann immer ich eine Transaktion unterschreiben möchte...

const codeUser = new Mnemonic('select scout crash enforce riot rival spring whale hollow radar rule sentence')
const hdUserPrivateKey = codeUser.toHDPrivateKey()
const derivative = 0

// BIP 44 derivation path for private key...
const privateKey = hdUserPrivateKey.deriveChild(`m/44'/0'/0'/0/${derivative}`).privateKey

Ist dieser Ansatz gültig oder weiche ich den BIP44-Standards aus?

Antworten (1)

Dies ist tatsächlich der beabsichtigte Ansatz und die beabsichtigte Verwendung von BIP 44.

Der Zweck besteht darin, mit gehärteter Ableitung auf Kontoebene abzuleiten. Exportieren Sie dann dieses xpub, um es in andere Software zu importieren, die die Empfangs- und Änderungsadressen ableitet. Beim Signieren einer Transaktion kann das Wallet mit den privaten Schlüsseln den gesamten Pfad ableiten, um die einzelnen untergeordneten privaten Schlüssel zu erhalten, die zum Signieren benötigt werden.

Ah süß, danke für die klare Klarstellung. Mein Hauptziel ist es, dass exportiertes Saatgut mit verschiedenen bekannten Wallets funktioniert. Würde das bedeuten, dass der anfängliche Seed beim Import bei BIP39 klassifiziert wird? Aber dann zu BIP44 abgeleitet, um ein neues xpub zu bekommen. Von dort aus werden dann weitere Ableitungen ausgearbeitet, was ist in Ordnung? Ich denke, ich suche irgendwie nach einer Definition der Schritte, die ich gemacht habe.
Sie beginnen mit einer BIP 39-Mnemonik. Wenn dies in ein Wallet importiert wird, erzeugt das Wallet einen BIP 32 Seed und BIP 32 xprvs und xpubs. Sie verwenden den BIP 44-Ableitungspfad, um bestimmte xpubs vom BIP 32 xprv abzuleiten. Diese xpubs werden dann als BIP 32 xpubs in eine andere Brieftasche importiert.
Damit ist meine Frage beantwortet.