Von untergeordneten Schlüsseln generierte Adressen spiegeln sich in der Brieftasche wider?

Ich bin verwirrt über die öffentlichen HD-Schlüssel für Kinder. Ist dieses Szenario richtig?

  1. Ich verwende bx (libbitcoin) für alle Aktionen unten.
  2. Generieren Sie einen Seed (bx-Seed).
  3. privaten Hauptschlüssel mit Seed erstellen (bx hd-new)
  4. öffentlichen Hauptschlüssel aus privatem Schlüssel erstellen (bx hd-to-public)
  5. Generieren mehrerer untergeordneter öffentlicher BIP32-Schlüssel mit zufälligen Indizes (bx hd-public)
  6. Verwenden Sie generierte untergeordnete Schlüssel und generieren Sie mehrere Adressen
  7. jetzt mit generierten Adressen

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?

Es hängt von der Brieftasche ab, also sollten Sie dies in Ihrer Frage explizit machen.
insbesondere bitcoin client und electrum. aber auch wenn ich keine Brieftasche verwenden möchte, was wird benötigt? Reicht der private Hauptschlüssel aus oder sollte ich auch den untergeordneten privaten Schlüssel generieren und speichern?

Antworten (1)

Verwenden Sie inkrementelle statt zufällige Indizes

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:

  1. den Knoten des ersten Kontos ableiten (Index = 0)
  2. den externen Kettenknoten dieses Kontos ableiten
  3. Adressen der externen Kette scannen; Beachten Sie die unten beschriebene Lückengrenze
  4. Wenn keine Transaktionen in der externen Kette gefunden werden, stoppen Sie die Erkennung
  5. 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.

Standardableitungspfade

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.