Glossario / Wallet e custodia
BIP39
Noto anche come BIP-39, Codice mnemonico, seed phrase.
- Che cos'è BIP39?
- BIP39 è la specifica del 2013 che codifica l'entropia del wallet in parole tratte da una lista fissa di 2.048 parole e le dilata in un seed di 512 bit.
Specificato nel BIP-39.
Quasi ogni wallet che puoi comprare lo implementa, ed è per questo che una frase annotata su un dispositivo di una marca si ripristina su un'altra. Il documento è stato presentato il 10 settembre 2013 e Bitcoin Core non l'ha ancora mai implementato. La sua autorità sul tuo backup deriva dall'adozione del settore, non dal processo di standardizzazione.
Come funziona
Marek Palatinus e Pavol Rusnak di SatoshiLabs, con Aaron Voisine e Sean Bowe, hanno scritto il BIP-39. La specifica definisce due conversioni e nient'altro.
La prima trasforma la casualità in parole. Un wallet prende entropia di 128, 160, 192, 224 o 256 bit, ne calcola l'hash con SHA-256 e aggiunge come checksum i primi bit di quell'hash, in numero pari alla lunghezza dell'entropia divisa per 32. Il totale viene poi letto 11 bit alla volta, e ogni blocco seleziona una parola da una lista di esattamente 2.048. Le cinque dimensioni di entropia producono rispettivamente 12, 15, 18, 21 e 24 parole, e le due che incontrerai davvero sono gli estremi di questo intervallo.
Il checksum è piccolo di proposito. Una frase di 12 parole porta quattro bit di checksum, quindi una lista di dodici parole valide assemblata a caso supera la validazione circa una volta su sedici. Basta per intercettare quasi ogni errore di copiatura a mano e non basta affatto per rendere sicura una frase inventata.
La seconda conversione trasforma le parole in un seed. La frase viene normalizzata in Unicode NFKD, poi passata attraverso PBKDF2 usando HMAC-SHA512 su 2.048 iterazioni, con il salt formato dalla stringa letterale "mnemonic" seguita da una passphrase utente opzionale. L'output è sempre di 512 bit, sia che la frase fosse di 12 parole sia di 24.
Le liste di parole fanno parte dello standard, non sono un ornamento. La lista inglese è costruita in modo che due parole non condividano mai le prime quattro lettere e che le coppie visivamente confondibili siano escluse. Esistono liste ufficiali anche per giapponese, coreano, spagnolo, cinese in entrambe le scritture, francese, italiano, ceco e portoghese. Una frase ha senso solo rispetto alla lista da cui è tratta, ed è per questo che una frase spagnola inserita in un wallet che accetta solo l'inglese fallisce subito.
Dove lo vedi
Ogni schermata di configurazione di un wallet hardware, ogni finestra "ripristina da 12 o 24 parole" e ogni procedura di recupero nei software più diffusi è BIP-39 sotto il cofano. La compatibilità che ne deriva è reale e vale la pena proteggerla: è il motivo per cui un dispositivo guasto è un inconveniente e non una perdita.
Il punto debole dello standard è ciò che lascia fuori. Una frase non dice nulla su quale percorso di derivazione, quale tipo di script o quale software di wallet l'ha prodotta, e non porta alcun campo di versione per aggiungerne uno in seguito. Due wallet possono leggere correttamente le stesse parole e mostrarti comunque indirizzi diversi e saldi diversi. Annotare il percorso accanto alle parole è la soluzione abituale, ed è interamente una convenzione, non qualcosa che la specifica aiuti a fare.
Le 2.048 iterazioni di PBKDF2 sono l'altra critica. Quel numero era economico nel 2013 ed è banale oggi, quindi la dilatazione non offre quasi nessuna protezione a chi sceglie una passphrase opzionale debole. Non protegge affatto le parole stesse, che si affidano ai loro 128 o 256 bit di entropia generata dalla macchina.
BIP39 vs wallet HD
Il BIP-39 trasforma le parole in un seed; il BIP-32 trasforma un seed in un albero di chiavi. Sono documenti separati di autori diversi, e un wallet può implementare l'uno senza l'altro. Bitcoin Core è pienamente deterministico gerarchico e non ha alcun supporto per i mnemonic. Electrum è ugualmente deterministico gerarchico e usa un proprio formato di frase con un marcatore di versione integrato. Considera "compatibile con BIP-39" come una promessa sulla lettura delle tue parole, non come una promessa su quali indirizzi compariranno dopo.