Zum Inhalt springen
buybitcoinsmart

Glossar / Entwicklerreferenz

Descriptor-Prüfsumme

Was ist die Descriptor-Prüfsumme?
Die Descriptor-Prüfsumme ist der achtstellige Code nach dem Rautezeichen in einem Output-Descriptor, ein BCH-Code, der Tipp- und Kopierfehler abfängt, bevor eine Wallet die falschen Schlüssel importiert.

Spezifiziert im BIP-380.

Der Code steht am Ende eines Descriptors, nach einem einzelnen Rautezeichen, im selben Zeichenalphabet aus 32 Zeichen wie bech32. BIP-380 garantiert, dass jeder Fehler, der drei Symbole oder weniger betrifft, in einem Descriptor bis zu 49.154 Zeichen erkannt wird, und ein zufälliger Fehler bleibt ungefähr einmal in einer Billion unentdeckt. Ohne diese Prüfung lässt Sie ein einziges falsches Zeichen in einem Multisig-Backup auf Adressen blicken, die nichts enthalten.

Wie sie funktioniert

Die Descriptor-Prüfsumme ist ein BCH-Code, der über den Descriptor-Text berechnet wird und nicht ein Hash davon, und das erkauft die Fehlergarantien. BIP-380 legt ein Eingabealphabet von 95 Zeichen fest und teilt es in drei Gruppen, wobei die Zeichen ohne eigenen Schutz in die erste kommen: Ziffern, Klammern, Schrägstriche, der Platzhalter-Stern und die Kleinbuchstaben a bis h, wo hexadezimal kodierte Schlüssel und Ableitungspfade landen. Der Text der Spezifikation spricht von drei Gruppen zu 32, obwohl ihr Referenzcode 32, 32 und 31 verwendet.

Jedes Zeichen trägt ein Symbol bei, seine Position innerhalb seiner Gruppe, und nach jedem dritten Symbol wird ein viertes eingefügt, das die drei Gruppennummern kombiniert trägt, sodass drei Zeichen zu vier Symbolen werden. Eine Änderung, die ein Zeichen nur innerhalb seiner Gruppe verschiebt oder nur ändert, in welcher Gruppe es sitzt, stört genau ein Symbol. Deshalb zählt ein Groß- und Kleinschreibungsfehler genau als ein Symbolfehler, und deshalb wird ein einzelnes großgeschriebenes Zeichen immer erkannt.

Die Garantien nehmen stufenweise ab, je länger die Zeichenkette wird. Ein Symbolfehler wird immer erkannt; zwei oder drei werden bis zu 49.154 Zeichen immer erkannt, vier bis zu 507 Zeichen und fünf bis zu 77 Zeichen, wobei der Code darauf abgestimmt ist, unentdeckte Fünf-Symbol-Fehler bis 387 zu minimieren. Die Datei descriptors.md von Bitcoin Core nennt die Vier-Fehler-Grenze mit 501 Zeichen statt 507 und beziffert das Restrisiko auf ungefähr eins in einer Billion. Der Ein-Schlüssel-Descriptor in diesem Dokument umfasst 140 Zeichen und liegt innerhalb jeder Grenze; sein Mehrpfad-Beispiel 2 von 3 umfasst 439 und liegt außerhalb des Fünf-Symbol-Fensters und innerhalb des Vier-Symbol-Fensters.

Erweiterte Schlüssel schützen sich bereits selbst. BIP-380 merkt an, dass ein xpub aus der ersten Gruppe herausreicht und einen eigenen Prüfsummenmechanismus mitbringt, sodass ein Schlüsselausdruck am Ende doppelt abgedeckt ist.

Wo sie auftritt

Die Testvektoren von BIP-380 sind der kürzeste Weg, eine Descriptor-Prüfsumme bei der Arbeit zu beobachten. Die gültige Zeichenkette ist raw(deadbeef)#89f8spxm, und zu den knapp verfehlten Varianten, die die Spezifikation zurückweist, gehören: keine Prüfsumme, ein bloßes Rautezeichen, eine neunstellige Prüfsumme, eine siebenstellige Prüfsumme, raw(deedbeef) mit unveränderter alter Prüfsumme und eine Nutzlast mit einem Zeichen außerhalb des Eingabealphabets.

Bitcoin Core gibt die Prüfsumme bei der Ausgabe mit aus und verlangt sie bei der Eingabe. Jeder RPC-Aufruf, der einen Descriptor zurückgibt, hängt die acht Zeichen an, während nur einige bei der Eingabe eine verlangen, darunter deriveaddresses und importdescriptors. Für eine Zeile, die Sie von Hand getippt oder bearbeitet haben, gibt getdescriptorinfo die richtige Prüfsumme zurück.

Für das Parsen bleibt die Prüfsumme optional, und BIP-380 erlaubt Anwendungen, Descriptors ohne sie zurückzuweisen. Rechnen Sie mit ihr, wenn Sie eine Multisig-Konfiguration zwischen einem Koordinator, einem Ersatzrechner und einem Blatt Papier bewegen: Diese acht Zeichen sind der einzige Teil, der bestätigt, dass der Rest unbeschadet angekommen ist.

Descriptor-Prüfsumme vs. bech32

Eine bech32-Prüfsumme schützt eine Adresse und eine Descriptor-Prüfsumme schützt eine Wallet-Definition, und die beteiligten Größen erklären den Designunterschied. BIP-173 begrenzt eine bech32-Zeichenkette auf 90 Zeichen und verwendet die letzten sechs Zeichen des Datenteils für die Prüfsumme, über dasselbe Symbolalphabet aus 32 Zeichen. Ein Descriptor hat keine solche Obergrenze und muss auch Klammern, Kommas, Anführungszeichen und Leerzeichen abdecken, sodass BIP-380 den Text in Positionssymbole mit einem dazwischen eingefügten Gruppensymbol erweitert und acht verwendet.

Beide schreiben dieses Ergebnis im selben Alphabet, qpzry9x8gf2tvdw0s3jn54khce6mua7l, und hier beginnt die Verwechslung. Was fehlschlägt, ist unterschiedlich. Eine bech32-Adresse, die ihre Prüfsumme nicht besteht, kann nicht bezahlt werden; ein Descriptor, der seine Prüfsumme nicht besteht, ist eine Wallet, die Sie nicht wiederherstellen können.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Was passiert, wenn ich einen Descriptor mit einer falschen Prüfsumme importiere?

Bitcoin Core weist ihn bei den RPC-Aufrufen, die eine Prüfsumme verlangen, rundweg zurück, darunter importdescriptors und deriveaddresses, sodass nichts importiert wird. Diese Ablehnung ist der Sinn der Sache: Ohne sie würde ein einziges falsch getipptes Zeichen Ihnen eine gültig aussehende Wallet geben, die Adressen überwacht, auf denen keiner Ihrer Bitcoin liegt.

Kann ich die acht Zeichen nach dem Rautezeichen einfach weglassen?

BIP-380 macht die Prüfsumme für das Parsen optional, erlaubt der Software aber auch, jeden Descriptor zurückzuweisen, der ohne sie ankommt, und Bitcoin Core macht bei einigen RPC-Aufrufen genau das. Bewahren Sie die Prüfsumme in jedem Backup zusammen mit dem Descriptor auf, denn sie ist der einzige Teil der Zeile, der beweist, dass der Rest unbeschadet angekommen ist.

Wie ermittle ich die Prüfsumme für einen Descriptor, den ich von Hand geschrieben habe?

Lassen Sie die Zeichenfolge durch den RPC getdescriptorinfo von Bitcoin Core laufen, der die korrekten acht Zeichen dafür zurückgibt. BIP-380 veröffentlicht außerdem die Referenzimplementierung descsum_create, falls Sie sie lieber selbst berechnen möchten.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Entwicklerreferenz

Diese Seite auf Englisch lesen