Vai al contenuto
buybitcoinsmart

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.

Da non confondere con

Domande frequenti

La mia frase BIP-39 funzionerà in qualsiasi wallet?

Le parole saranno lette correttamente da qualsiasi wallet BIP-39, ma gli indirizzi possono essere diversi. Lo standard non porta alcun percorso di derivazione né tipo di script, quindi ripristinare in un software che usa per impostazione predefinita uno scopo diverso può mostrare un saldo zero mentre i bitcoin si trovano su un altro ramo.

Perché 2.048 parole?

Perché 2.048 è due elevato all'undicesima potenza, quindi ogni parola codifica esattamente 11 bit. Per questo 128 bit di entropia più un checksum di 4 bit danno esattamente 12 parole, e 256 bit più 8 bit di checksum danno esattamente 24.

Leggi anche

Termini correlati

Altro in Wallet e custodia

Leggi questa pagina in inglese