Glossario / Indirizzi e chiavi
Wallet Import Format
Noto anche come WIF.
- Che cos'è Wallet Import Format?
- Wallet Import Format è la codifica Base58 usata per spostare una singola chiave privata tra wallet, avvolgendo i 32 byte grezzi con un byte di rete e un checksum.
Una stringa WIF è una chiave, non un wallet: importarla sposta esattamente i bitcoin bloccati su quella chiave e nient'altro. Le chiavi della mainnet iniziano con 5 quando la chiave pubblica corrispondente è non compressa, oppure con K o L quando è compressa, e contano 51 o 52 caratteri. Tratta la stringa come tratteresti una frase di recupero, perché chiunque la legga può spendere.
Come funziona
Wallet Import Format esiste per rendere trasportabile un segreto grezzo senza errori di battitura. Prendi i 32 byte della chiave, anteponi un byte di versione (0x80 per la mainnet, 0xEF per la testnet), aggiungi 0x01 in coda se la chiave è destinata a essere usata con una chiave pubblica compressa, poi aggiungi quattro byte di checksum e codifica l'intero payload in Base58Check. Il byte di versione è ciò che impone il primo carattere riconoscibile, e il flag di compressione opzionale è ciò che allunga la stringa da 51 a 52 caratteri.
Queste due varianti contano più di quanto sembri. Lo 0x01 finale non cambia affatto la chiave; indica al wallet che la importa quale forma di chiave pubblica derivare, e quindi quale indirizzo guardare. Se sbagli, il wallet riporta un saldo pari a zero mentre i bitcoin restano al sicuro sull'altro indirizzo.
Il checksum intercetta gli errori di trascrizione prima che costino qualcosa. Un wallet che decodifica una stringa WIF e trova un checksum non corrispondente la rifiuta senza appello, così un solo carattere errato produce un messaggio di errore invece di un wallet vuoto. Ciò che nessun checksum può fare è proteggere una chiave che qualcun altro ha già letto.
Dove lo vedi
Niente di ciò che genera un wallet moderno viene fornito come stringa WIF. I wallet con frase di recupero secondo il BIP-32 contengono migliaia di chiavi e non hanno motivo di esportarne una, quindi WIF compare quasi esclusivamente in materiale più vecchio: wallet cartacei stampati da generatori nel browser, chiavi estratte da software desktop precedente al 2013, indirizzi vanity prodotti da un generatore di chiavi e le stringhe nascoste sotto gli ologrammi delle monete fisiche Casascius.
Ci sono due modi per portare una chiave del genere in un wallet attuale, e la differenza non è estetica.
Importare aggiunge la chiave al tuo wallet e la lascia in gioco. Il wallet ora può spendere quei bitcoin, ma può farlo anche chiunque altro abbia mai visto la stampa, la sua fotografia o la macchina che l'ha generata. Lo sweep costruisce una transazione che invia l'intero saldo a un indirizzo nuovo derivato dalla tua frase di recupero, dopo di che la vecchia chiave non gestisce più nulla. Fai lo sweep a meno che tu non abbia un motivo specifico per non farlo, e dai per scontato che qualsiasi chiave che sia esistita su carta, in uno screenshot o in un backup cloud sia già compromessa.
Vale la pena mantenere un'altra abitudine: una stringa WIF digitata in un sito web è persa. Le pagine generatrici, i verificatori di saldo e i "wallet validator" che ne chiedono una esistono per raccogliere chiavi, e i bitcoin di solito vengono spostati nel giro di secondi.
Wallet Import Format vs frase di recupero
Una stringa WIF porta una chiave, mentre una frase di recupero porta la radice di un intero wallet. Secondo il BIP-39 una frase di 12 parole codifica 128 bit di entropia e una frase di 24 parole ne codifica 256, e da quella radice un wallet deriva ogni chiave che userà mai, lungo ogni percorso di derivazione, per sempre. Ripristinare una frase riporta indietro l'intero wallet, compresi indirizzi che non hai mai annotato. Ripristinare un WIF riporta indietro una chiave e i suoi bitcoin, ed è per questo che l'esportazione di una chiave è uno strumento di recupero per fondi legacy e non una strategia di backup.