Esaminiamo ora ciascuno degli importanti standard industriali che sono utilizzati da molti portafogli bitcoin in dettaglio.
Parole del codice mnemonico (BIP-39)
Le parole codice mnemoniche sono sequenze di parole che rappresentano (codificano) un numero casuale utilizzato come seme per derivare un portafoglio deterministico. La sequenza di parole è sufficiente per ricreare il seme e da lì ricreare il portafoglio e tutte le chiavi derivate. A applicazione di portafoglio che implementa portafogli deterministici con parole mnemoniche mostra all'utente una sequenza di 12-24 parole quando crea un portafoglio per la prima volta. Questa sequenza di parole è il backup del portafoglio e può essere usato per recuperare e ricreare tutte le chiavi nello stesso portafoglio o in qualsiasi altra applicazione compatibile. Le parole mnemoniche rendono più facile per gli utenti il backup dei portafogli perché sono facili da leggere e da trascrivere scriba, rispetto a una sequenza casuale di numeri.
The mnemonic codes are defined in BIP-39 (see Appendix C). Note that BIP-39 is an implementation of a mnemonic code standard. There is a different standard, with a different set of words, used by the Electrum portfolio and predates BIP-39. BIP-39 was proposed by the company behind the Trezor hardware portfolio and is incompatible with the Electrum implementation. However, BIP-39 has now achieved broad industry support industry support through dozens of interoperable implementations and should be considered the de facto industry standard.
Generazione di parole mnemoniche
Le parole mnemoniche sono generate automaticamente dal portafoglio usando il processo standardizzato
definito nel BIP-39. Il portafoglio parte da una fonte di entropia, aggiunge un controllo somma, e poi mappa l'entropia in una lista di parole:
1. Create a random sequence (entropy) of 128 to 256 bits.
2. Create a checksum of the random sequence by taking the first (entropylength/32) bits of its SHA256 hash.
3. Add the checksum to the end of the random sequence.
4. Divide the sequence into sections of 11 bits.
5. Map each 11-bit value to a word from the predefined dictionary of 2048 words.
6. The mnemonic code is the sequence of words.
La funzione key-stretching prende due parametri: il mnemonico e un sale. Lo scopo di un sale di un sale in una funzione di key-stretching è quello di rendere difficile la costruzione di una tabella di ricerca permettendo un attacco di forza bruta. Nello standard BIP-39, il sale ha un altro scopo: permette permette l'introduzione di una passphrase che serve come un ulteriore fattore di sicurezza che protegge il seme, come descriveremo più in dettaglio in "Passphrase opzionale in BIP-39".
Il codice a catena è usato per introdurre dati casuali deterministici nel processo, in modo che conoscere l'indice e una chiave figlia non è sufficiente per derivare altre chiavi figlie. Conoscere una chiave figlia non rende possibile trovare i suoi fratelli, a meno che non si abbia anche il codice della catena. Il seme iniziale del codice della catena (alla radice dell'albero) è fatto dal seme, mentre i successivi codici a catena figli sono derivati da ogni codice a catena genitore.
Questi tre elementi (chiave genitore, codice catena e indice) sono combinati e sottoposti ad hash per generare le chiavi dei figli, come segue.
La chiave pubblica del genitore, il codice della catena e il numero di indice sono combinati e sottoposti a hash con l'algoritmo HMAC-SHA512 per produrre un hash a 512 bit. Questo hash a 512 bit è diviso in due metà da 256 bit. I 256 bit della metà destra dell'output dell'hash diventano il codice della catena per il bambino. La metà sinistra di 256 bit dell'hash viene aggiunta alla chiave privata del genitore alla chiave privata del genitore per produrre la chiave privata del figlio. con l'indice impostato a 0 per produrre il figlio "zero" (primo per indice) del genitore.