Glossar / Adressen und Schlüssel
Base58Check
Auch bekannt als Base58.
- Was ist Base58Check?
- Base58Check ist die ursprüngliche Textkodierung von Bitcoin, die Binärdaten in eine Zeichenkette aus 58 leicht zu übertragenden Zeichen umwandelt und eine Vier-Byte-Prüfsumme anhängt, um Tippfehler zu erkennen.
Das Alphabet lässt die vier Zeichen weg, die beim Abschreiben von Hand verwechselt werden: die Null, das große O, das große I und das kleine l. Eine Vier-Byte-Prüfsumme, die aus einem doppelten SHA-256 der Nutzdaten stammt, sorgt dafür, dass eine falsch eingegebene Adresse von der Wallet abgelehnt wird, statt ins Leere geschickt zu werden, wobei sie mit einer Wahrscheinlichkeit von etwa eins zu 4,29 Milliarden durchrutscht. Jede Adresse, die mit 1 oder 3 beginnt, ist Base58Check.
Wie es funktioniert
In jede Base58Check-Zeichenkette fließen drei Teile ein. Ein Versionsbyte am Anfang sagt, um welche Art von Daten es sich handelt, die Nutzdaten in der Mitte tragen die eigentlichen Bytes, und vier Prüfsummenbytes am Ende sind die ersten vier Bytes von SHA-256, zweimal auf Version und Nutzdaten zusammen angewendet. Das Ergebnis wird dann zur Basis 58 statt zur Basis 16 geschrieben, was es erheblich verkürzt und die mehrdeutigen Zeichen entfernt.
Das Versionsbyte erzeugt die vertrauten führenden Zeichen. Version 0x00 kennzeichnet eine Pay-to-Public-Key-Hash-Adresse und ergibt ein führendes 1; Version 0x05 kennzeichnet eine Pay-to-Script-Hash-Adresse und ergibt ein führendes 3; Version 0x80 kennzeichnet einen privaten Schlüssel im Wallet Import Format und ergibt 5, K oder L. Erweiterte Schlüssel verwenden stattdessen eine Vier-Byte-Version, 0x0488B21E, weshalb jede xpub mit diesen vier Buchstaben beginnt.
Führende Nullbytes werden gesondert behandelt, weil die Basisumrechnung sie sonst verwerfen würde. Jedes 0x00-Byte am Anfang der Nutzdaten wird als ein zusätzliches Zeichen "1" geschrieben, weshalb manche Legacy-Adressen kürzer oder länger ausfallen als ihre Nachbarn, obwohl sie dieselbe Datenmenge tragen.
Wo sie vorkommt
Base58Check ist im ersten Jahrzehnt von Bitcoin überall und in den neuesten Formaten nirgends zu finden. Legacy-Adressen, Pay-to-Script-Hash-Adressen, private Schlüssel im WIF-Format sowie die erweiterten Schlüssel xprv und xpub, die Sie aus einer Wallet exportieren, verwenden sie alle. Alles, was mit bc1 beginnt, nicht.
Zwei Eigenschaften erklären sowohl die Beliebtheit als auch die Ablösung. Die Sicherheit beim Übertragen war der Zweck: Das Alphabet wurde so gestaltet, dass eine Adresse, die vorgelesen, von einem Bildschirm abgeschrieben oder in eine Metallplatte gestanzt wird, die menschliche Behandlung übersteht, und die Prüfsumme verwandelt die verbleibenden Fehler in Ablehnungen statt in Verluste. Die Kodierung unterscheidet jedoch zwischen Groß- und Kleinschreibung, was einen QR-Code in den Byte-Modus statt in den kompakteren alphanumerischen Modus zwingt, und sie kann Ihnen nur sagen, dass etwas falsch ist, nie was oder wo.
Base58Check vs. Bech32
Base58Check erkennt Fehler, bech32 korrigiert sie. Bech32, festgelegt in BIP-173 und übernommen für native SegWit-Adressen im Jahr 2017, verwendet ein Alphabet aus 32 Zeichen ganz ohne Großbuchstaben, sodass die gesamte Zeichenkette in den alphanumerischen QR-Modus passt und aus einem kleineren Bild gescannt werden kann. Seine BCH-Prüfsumme garantiert die Erkennung von bis zu vier falschen Zeichen und kann auf verdächtige Positionen hinweisen, statt einfach zu versagen.
Der Nachfolger brauchte eine eigene Korrektur. Eine Schwäche bei der Längenerweiterung in der ursprünglichen bech32-Prüfsumme führte dazu, dass bestimmte Adressen ein letztes Zeichen unbemerkt hinzugewinnen oder verlieren konnten, weshalb BIP-350 bech32m definierte, das eine Konstante ändert und das Taproot-Adressen verwenden, die mit bc1p beginnen. Base58Check bleibt gültig und wird auf unbestimmte Zeit weiter funktionieren, doch neue Adresstypen werden nicht mehr darin definiert.