Base58

Base58 è una famiglia di codifiche da dati binari a testo che usa 58 caratteri alfanumerici. L'alfabeto Bitcoin è 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. Esclude 0, O, I e la l minuscola per limitare ambiguità visive, e non usa punteggiatura o spazi.[1]
Base58 è una codifica, non una cifratura né una derivazione di chiavi. Codificare una chiave privata non calcola la chiave pubblica; decodificare una stringa non dimostra che i dati siano validi per un'applicazione.
Codifica
La sequenza di byte viene interpretata come un grande intero e divisa ripetutamente per 58; i resti selezionano i simboli. Gli zero iniziali sono rappresentati da caratteri 1 iniziali. La decodifica inverte il procedimento.
Base58 semplice non rileva errori. Base58Check unisce normalmente un byte di versione o prefisso al contenuto e aggiunge come checksum i primi quattro byte di un doppio hash SHA-256 prima della codifica.[2] Il checksum rileva molti errori accidentali, ma non è una firma digitale.
Varianti e compromessi
“Base58” non identifica un unico alfabeto universale. Il base58btc di Bitcoin e il Base58 di Flickr ordinano i caratteri in modo diverso; un testo prodotto con una variante non va decodificato con un'altra solo perché entrambe usano 58 simboli.[3]
Poiché 58 non è una potenza di due, i simboli non si allineano a gruppi fissi di bit o byte. Un codificatore generale esegue una conversione di base sull'intero completo, non un raggruppamento diretto di bit come Base64. Il risultato è compatto e privo di punteggiatura, ma meno pratico per lunghi dati binari; è uno dei motivi per cui i nuovi formati di indirizzo Bitcoin usano una base 32.[4]
Usi in Bitcoin
Base58Check è usato negli indirizzi Bitcoin legacy P2PKH e P2SH, nel Wallet Import Format (WIF) per chiavi private e in BIP 32 per chiavi estese pubbliche e private serializzate.[5] Il software deve convalidare lunghezza e prefisso dei dati decodificati.
I descrittori di Bitcoin Core documentano i prefissi visibili mainnet 1 per P2PKH e 3 per P2SH; P2PKH testnet può iniziare con m o n, e P2SH testnet con 2.[6] Sono conseguenze dei byte di versione codificati, non caratteri da aggiungere o togliere manualmente.
Gli indirizzi SegWit nativi usano Bech32. BIP 173 introdusse Bech32 per witness versione 0 e descrisse limiti di Base58, come il costo delle lettere miste nei codici QR.[4] BIP 350 specifica Bech32m per le versioni witness da 1 a 16, mentre la versione 0 continua a usare Bech32.[7]
Base58 distingue maiuscole e minuscole. Cambiare una lettera, eliminare un 1 iniziale o sostituire un simbolo altera i byte o fa fallire il checksum.
Voci correlate
Note
- ↑ Bitcoin Core, “base58.h”, consultato il 15 settembre 2026.
- ↑ Bitcoin Developer Reference, “Transactions: Address Conversion”, consultato il 15 settembre 2026.
- ↑ Multiformats, “Multibase table”, consultato il 15 settembre 2026.
- ↑ 4,0 4,1 BIP 173: Base32 address format for native v0-16 witness outputs, consultato il 15 settembre 2026.
- ↑ BIP 32: Hierarchical Deterministic Wallets, consultato il 15 settembre 2026.
- ↑ Bitcoin Core, “Output Script Descriptors”, consultato il 15 settembre 2026.
- ↑ BIP 350: Bech32m format for v1+ witness addresses, consultato il 15 settembre 2026.