Glossar / Adressen und Schlüssel
Bech32
- Was ist Bech32?
- Bech32 ist die Adresskodierung hinter bc1q-Zeichenketten, ein Base32-Format in Kleinschreibung, dessen sechsstellige Prüfsumme jeden Fehler erkennt, der bis zu vier Zeichen betrifft.
Spezifiziert im BIP-173.
BIP-173 führte bech32 im Jahr 2017 ein, um Base58Check bei SegWit-Ausgaben zu ersetzen. Das Alphabet umfasst 32 Zeichen und lässt bewusst "1", "b", "i" und "o" weg, damit ähnlich aussehende Zeichen nicht versehentlich vertauscht werden können, und keine bech32-Zeichenkette überschreitet 90 Zeichen. Wenn eine Wallet eine Adresse in dem Moment ablehnt, in dem Sie das Einfügen beendet haben, hat die bech32-Prüfsumme den Schaden erkannt.
Wie es funktioniert
Eine bech32-Zeichenkette hat drei Teile in fester Reihenfolge: ein für Menschen lesbares Präfix, das Trennzeichen "1" und einen Datenabschnitt, der mit sechs Prüfsummenzeichen endet. Das Mainnet verwendet das Präfix "bc", Testnet und Signet verwenden "tb", und Regtest verwendet "bcrt", sodass die führenden Buchstaben das Netzwerk erkennen lassen, bevor eine Wallet irgendetwas anderes dekodiert. Das Trennzeichen ist auch der Grund, warum "1" im Alphabet fehlt. Es kann dann nur einmal an der Grenze vorkommen, und ein Parser findet die Trennung, indem er von rechts scannt.
Die Prüfsumme ist ein BCH-Code, der über die gesamte Zeichenkette berechnet wird, das Präfix eingeschlossen. BIP-173 garantiert die Erkennung jedes Fehlers, der höchstens vier Zeichen betrifft, und hält die Wahrscheinlichkeit, einen größeren Fehler zu übersehen, unter eins zu einer Milliarde. Base58Check bietet nichts Vergleichbares: Seine vier abschließenden Bytes sind ein gekürzter doppelter SHA-256-Hash, der einer Wallet sagt, dass etwas falsch ist, ohne einzugrenzen, was.
Groß- und Kleinschreibung hat keine Bedeutung. Eine bech32-Adresse ist vollständig in Kleinschreibung oder vollständig in Großschreibung gültig, nie gemischt, und Wallets zeigen die Kleinbuchstabenform an. BIP-173 verlangt Großbuchstaben in QR-Codes, weil groß geschriebene alphanumerische Zeichen den alphanumerischen QR-Modus freischalten, der jedes Zeichen in 5,5 Bit packt statt in die 8, die der Byte-Modus benötigt, und ein gröberes Muster erzeugt, auf das eine Smartphone-Kamera schneller scharf stellt.
Wo man es sieht
Jede bc1q-Adresse ist bech32. Eine mit 42 Zeichen kodiert ein Witness-Programm von 20 Byte und zahlt an einen einzelnen Schlüssel; eine mit 62 Zeichen kodiert ein Programm von 32 Byte und zahlt an ein Skript. Beide sind Witness-Version 0, und Version 0 ist die einzige Version, die bech32 jetzt tragen darf.
Die Kodierung taucht auch abseits von Adressen auf. Lightning-Rechnungen nach BOLT11 entleihen sie mit Präfixen wie "lnbc", und sie missachten wissentlich die Obergrenze von 90 Zeichen, weil eine Rechnung einen Zahlungs-Hash, einen Betrag, eine Beschreibung und Routing-Hinweise trägt statt eines kurzen Programms.
Weh tut es in einem Auszahlungsformular einer Börse. Ein Validator, der vor 2017 geschrieben wurde, erkennt nur Base58-Zeichenketten und antwortet auf eine einwandfreie bc1q-Adresse mit "invalid address". Das ist eine Einschränkung der Plattform und nicht Ihrer Wallet, und die Lösung ist, an einen Adresstyp auszuzahlen, den die Plattform akzeptiert, abgeleitet aus derselben Seed-Phrase, statt nach anderer Software zu suchen.
Bech32 vs. Bech32m
Bech32 und bech32m unterscheiden sich in einer Konstante und sonst nichts. Beide verwenden dasselbe Alphabet, denselben Aufbau und dieselben sechs Prüfsummenzeichen. Bech32m ändert den Wert, der in die Prüfsumme einfließt, von 1 auf 0x2bc830a3, und die Aufteilung entscheidet die Witness-Version: Ausgaben der Version 0 behalten bech32, die Versionen 1 bis 16 verwenden bech32m. Software, die die beiden als austauschbar behandelt, akzeptiert Zeichenketten, die sie zurückweisen sollte, und genau diesen Fehler sollte BIP-350 verhindern.
Bech32 vs. Base58Check
Bech32 und Base58Check sind konkurrierende Kodierungen, keine konkurrierenden Adresstypen. Base58Check umhüllt ein Versionsbyte und einen Hash von 20 Byte mit einer Prüfsumme von vier Byte und erzeugt die groß- und kleinschreibungsabhängigen Zeichenketten, die mit 1 und 3 beginnen. Bech32 kodiert eine Witness-Version zusammen mit einem Witness-Programm und erzeugt Zeichenketten, die nicht zwischen Groß- und Kleinschreibung unterscheiden und mit bc1 beginnen. Keine der beiden Kodierungen entscheidet, woran die Bitcoin gebunden sind. Was sie entscheiden, ist, wie zuverlässig ein Mensch die Zeichenkette kopieren kann, wie groß der QR-Code sein muss und wie laut die Software sich beschwert, wenn ein Zeichen fehlt.