Base58

Da BitcoinWiki.
Questa è la versione approvata di questa pagina, oltre ad essere la più recente.
Base58 encode and decode

Base58 è un gruppo di schemi di codifica di testo binario che viene utilizzato per rappresentare grandi numeri interi come testo alfanumerico. È simile a Base64 ma è stato modificato per evitare sia caratteri non alfanumerici che lettere che potrebbero sembrare ambigue quando stampate. È quindi progettato per gli utenti umani che inseriscono manualmente i dati, copiando da qualche fonte visiva, ma consente anche di copiare e incollare facilmente perché un doppio clic di solito seleziona l'intera stringa.

Come Funziona?[modifica]

Il formato di codifica Base58 è progettato per l'uso in Bitcoin ed è utilizzato in molte altre criptovalute. Offre un equilibrio tra prestazioni compatte, leggibilità, definizione e prevenzione degli errori. Base58 è un sottoinsieme di Base64 che utilizza lettere e numeri minuscoli e maiuscoli, ma senza alcuni caratteri che vengono spesso scambiati l'uno per l'altro e possono essere identici in alcuni font. In particolare, Base58 è Base64 senza il numero 0 (zero), O (lettera maiuscola O), l (piccola L), I (grande i) e i caratteri "\+" e "/". Oppure, in poche parole, è un insieme di lettere e numeri maiuscoli e maiuscoli senza i quattro (0, O, L, l) menzionati above. In contrariamente a Base64, le cifre della codifica non si allineano bene con i confini dei byte dei dati originali. Per questo motivo, il metodo è adatto per codificare interi di grandi dimensioni, ma non progettato per codificare porzioni più lunghe di dati binari. L'ordine effettivo delle lettere nell'alfabeto dipende dall'applicazione, motivo per cui il termine “Base58” da solo non è sufficiente per descrivere completamente il formato. Una variante, Base56, esclude 1 (uno) e o (minuscolo o) rispetto alla base 58.

Base58Check è un formato di codifica Base58 che codifica in modo inequivocabile il tipo di dati nei primi caratteri e include un codice di rilevamento degli errori negli ultimi caratteri.

Codifica e decodifica di Base58[modifica]

Con Base58, la chiave privata può essere convertita in una chiave pubblica, ma una chiave pubblica non può essere convertita in una chiave privata. L'indirizzo di bitcoin non è in realtà una chiave pubblica, ma il suo hash. Quindi, l'indirizzo bitcoin corrispondente alla chiave pubblica sopra indicata sarà:

172YRdGzPqyXm9rm1EWKwPXTRsmcApoPq6

L'indirizzo di Bitcoin non è presentato in forma esadecimale come chiavi segrete e pubbliche. Questo perché per esso Bitcoin utilizza un formato "compresso", noto come base58check. Base58 di Bitcoin suggerisce che utilizza 58 lettere e numeri diversi (zero, O, l ed I sono omessi, poiché sono troppo facilmente confusi l'uno con l'altro). Base58 è un numero con una base di 58-simile al solito per noi binario (base 2), decimale (base 10) o esadecimale (base 16) rappresentazione. Ad esempio, il numero decimale 31337 in forma binaria sarebbe ‘111101001101001’, in esadecimale sarebbe ‘7A69’, e alla base 58 sarebbe solo ‘AKJ’. Allora, il controllo del suffisso nella descrizione del formato significa che prima della traduzione di un numero in base58 aggiunge ancora una "somma di controllo" a quattro byte. Tutte le librerie di bitcoin (di cui parleremo più avanti) effettuano un trasferimento su base58check automaticamente, quindi non è necessario programmarlo in modo specifico

Alfabeto di Base58[modifica]

Alfabeto di Base58:

123456789ABCDEFGHJKLMNPQRSTUVWXYzabcdefghijkmnopqrstuvwxyz

Per aggiungere una protezione aggiuntiva contro battiture o errori di trascrizione, Base58Check è un Base58 con codice di controllo degli errori incorporato. Quattro byte di checksum vengono aggiunti alla fine dei dati codificati. Il checksum è ottenuto mediante l'hashing dei dati codificati e può quindi essere utilizzato per rilevare e prevenire errori di trascrizione e errore di battitura. Il software calcolerà il checksum dei dati durante la decodifica e lo confronterà con il checksum del codice. La mancata corrispondenza indicherà un errore e i dati di Base58Check non saranno validi. Per esempio, tale controllo impedisce la possibilità di inviare fondi a un indirizzo bitcoin inesistente e quindi perdere fondi.

Per convertire i dati (numerici) in formato Base58Check, è necessario prima aggiungere un prefisso ai dati, chiamato "version byte", che viene utilizzato per determinare il tipo di dati da codificare. Per esempio, nel caso di un indirizzo Bitcoin, il prefisso è 0 (0x00 nel sistema hex), mentre il prefisso per la chiave privata è 128 (0x80 nel sistema hex).

Poi, calcoliamo un checksum del "double-SHA", nel senso che l'algoritmo di hash usato è SHA256 due volte sul risultato precedente (prefisso e dati).

Checksum = SHA256 (SHA 256 (prefisso + dati)) 

Dal risultante hash a 32 byte (hash di hash), prendiamo solo i primi quattro byte. Questi quattro byte servono come codice di controllo degli errori o checksum. Questo checksum viene quindi aggiunto alla fine della linea. Il risultato è costituito da tre elementi: prefisso, dati e checksum. Questo risultato è codificato utilizzando l'alfabeto di Base58 descritto in precedenza.

Convertitori di Base58[modifica]

Applicazione Alfabeto Caratteri di Base58 esclusi
Indirizzi di Bitcoin, IPFS hash

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

IOl0+/
Indirizzi di Ripple rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz IOl0+/
URL breve per Flickr 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ IOl0+/

Vedere Anche[modifica]