Ein Output Descriptor beschreibt als Text, aus welchen Schlüsseln und nach welchen Regeln eine Wallet Bitcoin-Transaktionsausgänge erzeugen soll: Datensätze mit Beträgen und den Bedingungen für das spätere Ausgeben der Mittel. Er hilft, die richtigen Adressen wiederherzustellen und zugehörige Zahlungen zu erkennen. Er ist weder Transaktion noch vollständiges Backup und kann nur öffentliche Daten oder auch geheime Schlüssel enthalten.
Anna wechselt die Anwendung, mit der sie ihre Hardware-Wallet beobachtet. Sie möchte ihre Mittel auch in der neuen Anwendung verfolgen, ohne Wiederherstellungswörter am Computer einzugeben. Diese Wiederherstellungswörter, die Seed Phrase, bilden eine Sicherung, aus der sich die Wallet-Schlüssel wiederherstellen lassen. Ein öffentlicher Descriptor sagt der neuen Anwendung, welche öffentlichen Schlüssel sie verwenden und wie sie daraus dieselben Adressen bilden soll. Stell ihn dir als genaue Bauanleitung für Adressen vor, nicht als weiteres Passwort. Bei einer üblichen Wallet erkennt Software die Standardeinstellungen oft selbst. Bei ungewöhnlichen Konfigurationen oder Multisig (einer Wallet-Konfiguration mit mehreren Signierschlüsseln) genügt Raten jedoch nicht. Ein Descriptor überweist nichts und verändert keine bereits eingegangenen Zahlungen. Er beschreibt die Regeln, die eine Wiederherstellung erhalten muss. [1] [8]
Mit einem privaten Schlüssel lässt sich eine digitale Signatur erstellen, die das Ausgeben von Geld freigibt. Ein öffentlicher Schlüssel kann diese Signatur prüfen, aber nicht erzeugen. Ein öffentlicher Descriptor kann einen xpub enthalten: Daten zum Ableiten weiterer öffentlicher Schlüssel ohne Signierfähigkeit. Das passt zu einer Watch-only Wallet, die Zahlungen beobachtet, aber nicht selbst versenden kann. Trotzdem schützt du diesen Export wegen deiner Privatsphäre: Er kann viele Adressen und ihre Historien verknüpfen. Ein anderer Descriptor kann einen xprv, einen erweiterten privaten Schlüssel, oder WIF, das Format eines einzelnen privaten Schlüssels, enthalten. Das ist geheimes Material, das unter den jeweiligen Bedingungen Ausgaben ermöglichen kann. Gib es nicht in einen Online-Prüfer ein und speichere es nicht wie eine harmlose Notiz. Öffentliche Konfiguration ersetzt keine Backups der Signierschlüssel. [1] [8]
Nach dem Import vergleicht Anna mehrere Empfangsadressen mit der ursprünglichen Wallet. Bei einer Hardware-Wallet prüft sie die Adressen nach Herstelleranleitung auf dem vertrauenswürdigen Gerätedisplay. Auch die Konfiguration des Wechselgeldzweigs prüft sie: Dort landet bei einer Zahlung der Restbetrag wieder unter ihrer Kontrolle. Derselbe Kontoname genügt nicht. Bevor sie sich auf ein neues Backup verlässt, überprüft sie das vollständige Wiederherstellungsverfahren ihrer Wallet, ohne geheime Schlüssel unnötig offenzulegen. Kennt die Anwendung den Descriptor nicht oder zeigt sie andere Adressen, klärt Anna zuerst Kompatibilität, Netzwerk und Einstellungen. Einen unbekannten Ausdruck nach Gefühl umzuschreiben ist keine sichere Reparatur. [5] [8]
Bei einer Wallet mit zwei erforderlichen Signaturen aus drei Schlüsseln reichen zwei Sätze Wiederherstellungswörter und die Erinnerung ‘es war zwei aus drei’ nicht aus. Für die richtigen Ausgabebedingungen braucht man die öffentlichen Daten aller drei Schlüssel, deren Ableitungsregeln und den genauen Skripttyp. Ein Skript legt die Bedingungen fest, unter denen die Mittel ausgegeben werden dürfen. Die technische Schreibweise multi(k,...) verwendet die angegebene Schlüsselreihenfolge; k ist die nötige Signaturzahl. sortedmulti(k,...) sortiert die abgeleiteten öffentlichen Schlüssel bei jedem Skriptaufbau nach ihren Bytes. Das sind unterschiedliche Regeln, keine austauschbaren Namen. Bewahre den vollständigen Konfigurationsexport neben separat geschützten Backups der zum Signieren nötigen Schlüssel auf. Eine Liste der Gerätenamen genügt nicht. [2] [8]
Hinter # können acht Zeichen stehen: die checksum, also die Prüfsumme nach BIP380. Damit erkennt Software viele Kopierfehler. Sie ist aber weder Signatur des Autors noch Verschlüsselung oder Nachweis, dass der Descriptor dir gehört. Wer absichtlich eigene Schlüssel einsetzt, kann auch eine neue korrekte checksum berechnen. Die Textprüfung gehört deshalb mit der Prüfung von Adressen und Herkunft zusammen. Meldet die Anwendung einen Prüfsummenfehler, beschaffe zuerst den Originalexport erneut. Einfach eine neue Prüfsumme zu erzeugen könnte nur einen bereits beschädigten Text bestätigen. [1]
Vor einem Schlüssel kann [fingerprint/path] stehen, die sogenannte Key-Origin-Angabe. Der Fingerprint identifiziert den Ausgangsschlüssel in verkürzter Form; der Pfad beschreibt die Ableitung des anschließend angegebenen Schlüssels. So findet ein Signiergerät den passenden Schlüssel. Hinter dem xpub kann ein weiterer Pfad zu den einzelnen Adressen folgen. Beide Teile haben unterschiedliche Aufgaben und sind keine bloße Kontobeschriftung. Verschiedene Schlüssel können zufällig denselben Fingerprint haben; er authentisiert daher kein Gerät. Ein öffentlicher Export kann auch nicht beliebig durch Hardened Derivation weitergehen, einen Schritt mit benötigten privaten Daten. Die exportierende Anwendung muss die passende Schlüsselebene wählen. [1]
Der Stern in /* steht für das fortlaufende Einsetzen von Nummern, etwa 0, 1 und 2. Ein solcher ranged descriptor beschreibt mehr als eine Adresse; bei der konkreten Operation legt die Software den zu bearbeitenden Indexbereich fest. Die BIP389-Schreibweise <0;1> kann zwei Zweige zusammenfassen, üblicherweise Empfang und Wechselgeld, wenn die Anwendung sie unterstützt. Der Descriptor selbst führt aber keine Liste benutzter Adressen und speichert nicht die nächste freie Nummer. Auch das Gap Limit, die Anzahl aufeinanderfolgender unbenutzter Adressen, nach der die Suche endet, steckt nicht automatisch im Ausdruck. Unbenutzt bedeutet ohne Transaktionshistorie: Eine Adresse, auf der Geld einging und später ausgegeben wurde, zählt nicht als unbenutzt. Zur Wiederherstellung können daher zusätzliche Wallet-Zustandsdaten und ein ausreichend großer Suchbereich nötig sein. [5] [6] [9]
Ein Transaktionsausgang enthält den scriptPubKey, ein Skript mit den Bedingungen für sein späteres Ausgeben. Der Descriptor legt fest, wie es aufgebaut wird. wpkh(KEY) beschreibt Native SegWit mit einem Schlüssel; KEY ist hier ein Platzhalter, kein echter Schlüssel. Die Einbettung in sh(wpkh(KEY)) ändert das Format des Transaktionsausgangs und die Adresse, obwohl der Schlüssel gleich bleibt. Weitere Ausdrücke sind pk(), pkh(), wsh(), addr() und raw(). Das sind keine austauschbaren Optionen: addr() beschreibt beispielsweise eine bekannte Adresse, liefert aber keine fehlenden Informationen zum Ausgeben der zugehörigen Mittel. Dieser Abschnitt dient als Konfigurationsreferenz; Einsteiger müssen Descriptoren nicht von Hand schreiben. [1] [8]
Ein Taproot-Transaktionsausgang lässt sich über eine Schlüsselsignatur oder über hinterlegte Skriptbedingungen ausgeben, falls er solche enthält. tr(KEY) beschreibt einen internen Schlüssel ohne ausgebbaren Skriptzweig; tr(KEY,TREE) ergänzt einen Skriptbaum. Zu sichern ist also mehr als eine Schlüsselliste. Auch die Gruppierung der Skripte zählt: Eine Änderung kann den gemeinsamen Hash, die Merkle Root, und damit die Adresse ändern, obwohl die einzelnen Bedingungen gleich bleiben. Nicht jede Vertauschung von Zweigen ändert sie allerdings. Miniscript hilft, Bedingungen auszudrücken und zu analysieren; multi_a beschreibt mehrere Signaturen in Tapscript, der Skriptsprache von Taproot. Keines ersetzt einen vollständigen Konfigurationsexport. [3] [8]
RPC ist eine Schnittstelle, über die sich der Software Befehle aus einem anderen Programm oder von der Kommandozeile aus erteilen lassen. In Bitcoin Core 29 analysiert der RPC-Befehl getdescriptorinfo einen Descriptor. Er liefert eine öffentliche Form ohne private Schlüssel sowie checksum, isrange, issolvable und hasprivatekeys. Das letzte Feld sagt, ob die Eingabe einen privaten Schlüssel enthielt; issolvable bedeutet nicht, dass du die zum Signieren nötigen privaten Schlüssel besitzt. Mit deriveaddresses lassen sich abgeleitete Adressen vergleichen. importdescriptors übernimmt beim Import zusätzlich timestamp, active, internal, range und next_index: Beginn der Historiensuche, aktive Nutzung der Konfiguration, Zuordnung zu internem Wechselgeld, Bereich und nächsten Adressindex. Ein Rescan sucht erneut nach Transaktionen in der Blockchain. Ein zu später timestamp kann alte Zahlungen auslassen; eine Descriptor-Änderung allein verschiebt oder löscht sie nicht. Nach dem Import ist ein neues Wallet-Backup nötig. Diese Befehle gehören in die eigene vertrauenswürdige Installation, nicht in ein fremdes Webformular. [5] [7] [8]
Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit Wallet, Watch-only Wallet, Multisig, PSBT, Miniscript, Bitcoin. Auf diesen Eintrag verweisen außerdem Watch-only Wallet, Extended Public Key (xpub), PSBT, Selbstverwahrung.