Zum Inhalt springen

Base58

Aus BitcoinWiki
Base58
Base58.

Base58 ist eine Familie von Binär-zu-Text-Kodierungen mit 58 alphanumerischen Zeichen. Das Bitcoin-Alphabet lautet 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. Es lässt 0, O, I und das kleine l aus, um Verwechslungen zu vermeiden, und enthält weder Satz- noch Leerzeichen.[1]

Base58 ist eine Kodierung, keine Verschlüsselung und keine Schlüsselableitung. Das Kodieren eines privaten Schlüssels berechnet keinen öffentlichen Schlüssel; das Dekodieren beweist nicht, dass die Daten für einen bestimmten Zweck gültig sind.

Kodierung

Die Bytefolge wird als große Zahl interpretiert und wiederholt durch 58 geteilt; die Reste wählen Zeichen aus dem Alphabet. Führende Nullbytes werden in Bitcoins Form durch führende 1-Zeichen dargestellt. Die Dekodierung kehrt das Verfahren um.

Reines Base58 erkennt keine Fehler. Base58Check verbindet üblicherweise ein Versionsbyte oder Präfix mit Nutzdaten und hängt vor der Base58-Kodierung die ersten vier Bytes eines doppelten SHA-256-Hashs als Prüfsumme an.[2] Die Prüfsumme erkennt viele Abschreibfehler, ist aber keine digitale Signatur.

Varianten und Abwägungen

„Base58“ bezeichnet kein einziges universelles Alphabet. Bitcoins base58btc und Flickrs Base58 ordnen Zeichen unterschiedlich an. Ein Text darf daher nicht allein wegen der Zahl 58 mit einer anderen Variante dekodiert werden.[3]

Da 58 keine Zweierpotenz ist, entsprechen Base58-Zeichen keinen festen Gruppen von Eingabebits oder -bytes. Allgemeine Implementierungen benötigen eine Ganzzahl-Basiskonvertierung statt direkter Bitgruppen wie bei Base64. Das ergibt kompakte Bezeichner ohne Satzzeichen, ist für lange Binärdaten aber weniger bequem und ist ein Grund für die Basis-32 neuerer Bitcoin-Adressformate.[4]

Verwendung in Bitcoin

Base58Check wird für ältere P2PKH- und P2SH-Bitcoin-Adressen, für private Schlüssel im Wallet Import Format (WIF) und nach BIP 32 für serialisierte erweiterte öffentliche und private Schlüssel verwendet.[5] Software muss Länge und Präfix der dekodierten Daten prüfen.

Bitcoin Core dokumentiert die sichtbaren Mainnet-Präfixe 1 für P2PKH und 3 für P2SH; Testnet-P2PKH kann mit m oder n, Testnet-P2SH mit 2 beginnen.[6] Sie entstehen aus kodierten Versionsbytes und sind keine Zeichen, die von Hand sicher ergänzt oder entfernt werden können.

Native SegWit-Adressen verwenden Bech32. BIP 173 führte Bech32 für Witness-Version 0 ein und beschreibt Nachteile von Base58, darunter ineffiziente gemischte Groß-/Kleinschreibung in QR-Codes.[4] BIP 350 spezifiziert Bech32m für Witness-Versionen 1 bis 16; Version 0 bleibt bei Bech32.[7]

Base58 unterscheidet Groß- und Kleinschreibung. Veränderte Schreibweise, eine entfernte führende 1 oder ein ersetztes Zeichen verändert die Daten oder lässt die Prüfsumme scheitern.

Siehe auch

Einzelnachweise

  1. Bitcoin Core, „base58.h“, geprüft am 15. September 2026.
  2. Bitcoin Developer Reference, „Transactions: Address Conversion“, geprüft am 15. September 2026.
  3. Multiformats, „Multibase table“, geprüft am 15. September 2026.
  4. 4,0 4,1 BIP 173: Base32 address format for native v0-16 witness outputs, geprüft am 15. September 2026.
  5. BIP 32: Hierarchical Deterministic Wallets, geprüft am 15. September 2026.
  6. Bitcoin Core, „Output Script Descriptors“, geprüft am 15. September 2026.
  7. BIP 350: Bech32m format for v1+ witness addresses, geprüft am 15. September 2026.