Ich bin verwirrt über die öffentlichen HD-Schlüssel für Kinder. Ist dieses Szenario richtig?
Werden alle Adressen mit dem Master-Private-Key verbunden? oder weil ich zufällige Indizes verwendet habe (Schritt 5), ist es vom privaten und öffentlichen Hauptschlüssel getrennt? Einfach gesagt, reicht es aus, den privaten Schlüssel (Schritt 3) in Bitcoin-Clients wie Electrum zu verwenden, um auf alle Adressen zuzugreifen, die mit untergeordneten Pub-Schlüsseln (nicht mit dem Hauptschlüssel) generiert wurden?
Zuallererst sollten Sie untergeordnete Adressen inkrementell statt zufällig generieren, da Wallets sie beginnend mit dem Index 0 neu generieren und die Indizes inkrementieren, bis sie anfangen, leere Adressen zu finden.
Aus dem Kapitel BIP44 Account Discovery :
Wenn der Master-Seed von einer externen Quelle importiert wird, sollte die Software beginnen, die Konten auf folgende Weise zu erkennen:
- den Knoten des ersten Kontos ableiten (Index = 0)
- den externen Kettenknoten dieses Kontos ableiten
- Adressen der externen Kette scannen; Beachten Sie die unten beschriebene Lückengrenze
- Wenn keine Transaktionen in der externen Kette gefunden werden, stoppen Sie die Erkennung
- Wenn es einige Transaktionen gibt, erhöhen Sie den Kontoindex und fahren Sie mit Schritt 1 fort
Grenze der Adresslücke
Das Adresslückenlimit ist derzeit auf 20 festgelegt. Wenn die Software 20 unbenutzte Adressen in Folge findet, erwartet sie, dass es über diesen Punkt hinaus keine verwendeten Adressen gibt, und stoppt die Suche in der Adresskette. Wir scannen nur die externen Chains, da interne Chains nur Coins erhalten, die von den zugehörigen externen Chains stammen. Wallet-Software sollte warnen, wenn der Benutzer versucht, das Lückenlimit auf einer externen Kette zu überschreiten, indem er eine neue Adresse generiert.
Wenn Sie Ihre untergeordneten Schlüssel mit zufälligen Indizes generieren, sind höchstwahrscheinlich die ersten 20 Indizes leer, sodass das Wallet die Erkennung stoppt und Ihnen ein leeres Wallet anzeigt.
Der Standard-Ableitungspfad (definiert im oben genannten BIP44-Standard) ist der folgende (M bezeichnet den privaten Hauptschlüssel):
m / Zweck' / Münztyp' / Konto' / Änderung / Adressindex
Die meisten Wallet-Implementierungen (Electrum ist eine bemerkenswerte Ausnahme) folgen diesem Standard. Das bedeutet, dass Sie für eine bestimmte Empfangsadresse einen Ableitungspfad wie diesen verwenden sollten:
m / 44' / 0' / 0' / 0 / 0
Was sich in bx-Befehle wie folgt übersetzt:
cat m | bx hd-private --index 44 --hard \ | bx hd-private --index 0 --hard \ | bx hd-private --index 0 --hard \ | bx hd-private --index 0 \ | bx hd-private --index 0
Da es sich bei den ersten drei Ebenen um eine gehärtete Ableitung handelt, müssen Sie den Master Private Key verwenden. Der öffentliche Hauptschlüssel kann nur für nicht gehärtete Ableitungspfade verwendet werden.
Electrum implementiert nicht den vollständigen BIP44-Standard, da es nur Einzelkonto-Wallets unterstützt. In Electrum sieht der Ableitungspfad wie folgt aus:
m / change / address_index
Da es auf Kontoebene keine gehärtete Ableitung gibt, können Sie den Master Public Key auch in Electrum importieren. Dies ähnelt der von Ihnen beschriebenen Kette, es gibt jedoch noch eine zusätzliche "Änderungs" -Ebene.
Electrum kann auch einen privaten BIP44-Hauptschlüssel importieren (es gibt ein Kontrollkästchen im Importdialogfeld), indem Sie beim Import einen Kontoindex auswählen müssen.
Ich schlage vor, sich an den BIP44-Standard zu halten, da er von anderen Wallets (wie Mycelium) als HD-Wallet importiert werden kann und auch in Electrum funktioniert, wenn Sie daran denken, ihn als BIP44-Schlüssel zu importieren.
Wenn Sie jedoch ausschließlich mit öffentlichen Hauptschlüsseln arbeiten müssen , können Sie immer noch die 2-Level-Ableitung verwenden und diese in Electrum importieren. Ich bin mir nicht sicher, ob andere Wallets den Import unterstützen.
Pieter Wuille
max