Glossario / Indirizzi e chiavi
Base58Check
Noto anche come Base58.
- Che cos'è Base58Check?
- Base58Check è la codifica testuale originale di bitcoin: trasforma i dati binari in una stringa di 58 caratteri facili da trascrivere e vi aggiunge una somma di controllo di quattro byte per individuare gli errori di battitura.
L'alfabeto esclude i quattro caratteri che si confondono quando si copia a mano: zero, O maiuscola, I maiuscola e l minuscola. Una somma di controllo di quattro byte, ricavata da un doppio SHA-256 del payload, fa sì che un wallet rifiuti un indirizzo digitato male invece di inviarlo nel vuoto, con circa una probabilità su 4,29 miliardi che sfugga. Ogni indirizzo che inizia con 1 o 3 è in Base58Check.
Come funziona
Ogni stringa Base58Check contiene tre parti. Un byte di versione iniziale indica di che tipo di dati si tratta, il payload centrale porta i byte effettivi e i quattro byte di somma di controllo finali sono i primi quattro byte dello SHA-256 applicato due volte insieme a versione e payload. Il risultato viene poi scritto in base 58 anziché in base 16, il che lo accorcia notevolmente ed elimina i glifi ambigui.
Il byte di versione è ciò che produce i caratteri iniziali noti. La versione 0x00 contrassegna un indirizzo pay-to-public-key-hash e dà come risultato un 1 iniziale; la versione 0x05 contrassegna un indirizzo pay-to-script-hash e dà come risultato un 3 iniziale; la versione 0x80 contrassegna una chiave privata in Wallet Import Format, che dà 5, K o L. Le chiavi estese usano invece una versione di quattro byte, 0x0488B21E, ed è per questo che ogni xpub inizia con quelle quattro lettere.
I byte zero iniziali ricevono un trattamento speciale, perché altrimenti la conversione di base li scarterebbe. Ogni byte 0x00 all'inizio del payload viene scritto come un carattere "1" in più, ed è per questo che alcuni indirizzi legacy sono più corti o più lunghi dei loro vicini pur portando la stessa quantità di dati.
Dove lo vedi
Base58Check è ovunque nel primo decennio di bitcoin e in nessuno dei suoi formati più recenti. Gli indirizzi legacy, gli indirizzi pay-to-script-hash, le chiavi private WIF e le chiavi estese xprv e xpub che esporti da un wallet usano tutti questa codifica. Tutto ciò che inizia con bc1 no.
Due proprietà spiegano sia la popolarità sia l'abbandono. La sicurezza nella trascrizione era lo scopo: l'alfabeto è stato progettato perché un indirizzo letto ad alta voce, copiato da uno schermo o inciso su una lastra di metallo sopravviva alla manipolazione umana, e la somma di controllo trasforma gli errori rimanenti in rifiuti anziché in perdite. Ma la codifica distingue maiuscole e minuscole, il che costringe un codice QR a usare la modalità a byte anziché la più compatta modalità alfanumerica, e può solo dirti che qualcosa non va, mai cosa né dove.
Base58Check vs Bech32
Base58Check rileva gli errori e bech32 li corregge. Bech32, specificato nel BIP-173 e adottato per gli indirizzi SegWit nativi nel 2017, usa un alfabeto di 32 caratteri senza alcuna maiuscola, così l'intera stringa rientra nella modalità alfanumerica del QR e si scansiona da un'immagine più piccola. La sua somma di controllo BCH garantisce il rilevamento fino a quattro caratteri errati e può indicare quali posizioni sono sospette, anziché limitarsi a fallire.
Il successore ha avuto bisogno di una propria correzione. Una debolezza nell'estensione di lunghezza della somma di controllo bech32 originale faceva sì che alcuni indirizzi potessero guadagnare o perdere un carattere finale senza che fosse rilevato, così il BIP-350 ha definito bech32m, che cambia una costante ed è ciò che usano gli indirizzi Taproot che iniziano con bc1p. Base58Check resta valido e continuerà a funzionare a tempo indeterminato, ma i nuovi tipi di indirizzo non vengono definiti in questa codifica.