Glossar / Adressen und Schlüssel
Chain-Code
- Was ist ein Chain-Code?
- Ein Chain-Code sind die 32 Bytes zusätzlicher Entropie, die in einer HD-Wallet neben jedem Schlüssel mitgeführt werden und in jede Kind-Ableitung einfließen, sodass Schlüssel nicht aus ihren Geschwisterschlüsseln erraten werden können.
Spezifiziert im BIP-32.
Die Hälfte jedes erweiterten Schlüssels ist überhaupt kein Schlüssel. BIP-32 teilt einen 512-Bit-Hash in einen 256-Bit-Schlüssel und einen 256-Bit-Chain-Code auf, und eine xpub-Zeichenkette trägt beides, insgesamt 111 Zeichen. Wenn Sie jemals eine xpub herausgeben, geben Sie den Chain-Code damit mit heraus, und genau das ermöglicht dem Empfänger, Ihre künftigen Adressen abzuleiten.
Wie er funktioniert
Ein Chain-Code verrichtet seine Arbeit innerhalb eines einzigen HMAC-Aufrufs. Die Ableitung eines Kindes führt HMAC-SHA512 aus, mit dem Chain-Code des Elternteils als Schlüssel und dem öffentlichen Schlüssel des Elternteils plus einem Vier-Byte-Index als Nachricht. Das Ergebnis von 64 Bytes teilt sich in der Mitte: Die linken 32 Bytes werden modulo der Kurvenordnung zum privaten Schlüssel des Elternteils addiert und ergeben den privaten Schlüssel des Kindes, und die rechten 32 Bytes werden zum eigenen Chain-Code des Kindes, den es für seine eigenen Kinder verwenden wird.
Der Sinn des Salzes liegt darin, wer den Baum durchlaufen darf. Ein öffentlicher Schlüssel allein leitet nichts ab, weil die Ableitungsfunktion ohne den passenden Chain-Code nicht ausgeführt wird. Deshalb ist ein erweiterter öffentlicher Schlüssel nicht einfach ein öffentlicher Schlüssel mit einem längeren Namen. Er ist ein öffentlicher Schlüssel plus sein Chain-Code, und wer dieses Paar erhält, verwandelt einen Punkt auf einer Kurve in einen unbegrenzten, aufzählbaren Zweig von Adressen, die Sie noch nicht verwendet haben.
BIP-32 dokumentiert die Gefahr, die daraus folgt. Wenn ein Angreifer Ihren erweiterten öffentlichen Schlüssel besitzt und zusätzlich einen nicht gehärteten privaten Kindschlüssel erlangt, stellt das Subtrahieren des abgeleiteten Versatzes den privaten Schlüssel des Elternteils wieder her, und mit ihm jeden Geschwisterschlüssel und jeden Nachkommen. Die gehärtete Ableitung existiert, um diesen Weg zu kappen: Bei einem gehärteten Schritt enthält die gehashte Nachricht den privaten Schlüssel des Elternteils statt des öffentlichen, sodass niemand mit noch so viel öffentlichem Material nach oben steigen kann.
Wo er auftritt
Sie tippen einen Chain-Code nie ein, und keine Wallet für Endnutzer zeigt einen für sich allein an. Er reist in einem erweiterten Schlüssel mit. Base58Check-Zeichenketten, die mit xpub oder xprv beginnen, dekodieren zu 78 Bytes, aufgeteilt in 4 Bytes Version, 1 Byte Tiefe, einen 4 Byte großen Fingerabdruck des Elternteils, eine 4 Byte große Kindnummer, den 32 Byte großen Chain-Code und schließlich den 33 Byte großen Schlüssel, weshalb eine xpub 111 Zeichen Text umfasst.
In Entwicklerwerkzeugen wird das Feld als Feld sichtbar. Der RPC deriveaddresses von Bitcoin Core arbeitet mit Deskriptoren, die erweiterte Schlüssel einbetten, Bibliotheken wie python-bip32 geben den Chain-Code als separates Attribut zurück, und ein Signaturgerät, das ein Konto für eine Watch-Only-Einrichtung exportiert, exportiert genau dieses Paar.
Das richtige Maß an Vorsicht ist das, das Sie einer vollständigen Transaktionshistorie entgegenbringen würden, nicht das, das Sie einem Passwort entgegenbringen würden. Ein Chain-Code kann nicht signieren, allein verliert man damit also nichts. In den Händen eines Analyseunternehmens, einer Cloud-Sicherung oder von irgendjemandem, der eine xpub in ein Support-Ticket eingefügt hat, legt er jede Zahlung auf diesem Zweig offen, vergangene und künftige, und der Zugriff lässt sich danach nicht widerrufen.
Chain-Code vs. privater Schlüssel
Ein Chain-Code und ein privater Schlüssel sind beide 32 zufällig wirkende Bytes, und nur einer von beiden kann ausgeben. Der private Schlüssel erzeugt Signaturen. Der Chain-Code erzeugt nichts außer weiterer Ableitung, und genau deshalb wird er unterschätzt: Weil er kein Geld bewegen kann, werden erweiterte öffentliche Schlüssel von Leuten in gemeinsam genutzte Tabellen, Fehlerberichte und Smartphone-Apps eingefügt, die dasselbe mit einem Schlüssel nie tun würden. Das Ergebnis ist ein dauerhaftes Fenster in ihre Finanzen statt eines Diebstahls, und die beiden Fehler verdienen unterschiedliche Namen.