La maggior parte dei possessori di Ledger Nano a un certo punto iniziano a chiedersi se esiste la possibilità di personalizzare il proprio seed. Alcuni potrebbero spingersi oltre e provare a utilizzare parole scelte casualmente durante il processo di recupero. In questi casi, dopo aver confermato l'ultima parola, quasi sicuramente vedranno il messaggio:
"Recovery phrase is invalid, retry"
Ciò significa che creare un nuovo portafoglio con il tuo set di parole personalizzato è impossibile?
Buone notizie: è del tutto possibile, sebbene con alcune limitazioni. Ma partiamo dall'inizio.
Il primo vincolo è che tutte le parole devono far parte dell'elenco standard BIP39
(Proposta di miglioramento di Bitcoin - numero 39). Puoi scoprire esattamente cosa sono le proposte di miglioramento di Bitcoin in questo articolo di Wikipedia.
BIP39 non è altro che un insieme di 2048 parole, scelte in modo tale che le prime 4 lettere di ogni parola siano uniche. Questa regola si applica anche alle parole di tre lettere.
Questa proprietà li rende più facili da ricordare quando si crea una sequenza di più parole, che è esattamente ciò che è il tuo seed.
La seconda restrizione è il requisito dell'ultima parola della sequenza. Si tratta di un checksum specifico determinato da tutti gli altri elementi della sequenza e non puoi sceglierlo da solo. Questo è esattamente il motivo per cui vediamo un messaggio di errore ogni volta che proviamo a inserire parole scelte casualmente come seed nel nostro Ledger Nano. Di solito, la condizione del checksum è soddisfatta da più di una sola parola; tuttavia, la possibilità di trovarne uno valido semplicemente indovinando è incredibilmente piccola. Il numero di parole che soddisfano la condizione di checksum è strettamente correlato al numero totale di parole seed. Nel caso di un seed di 24 parole (l'opzione più sicura), ci sono sempre esattamente 8 parole possibili che possono fungere da checksum. Pertanto, la possibilità di estrarne casualmente uno valido dal set BIP39 di 2048 parole è esattamente 8 nel 2048, ovvero solo lo 0,39%. Non c'è da meravigliarsi che tu abbia visto un messaggio di errore.
Allora come possiamo trovare il checksum corretto per una sequenza di nostra scelta? Ad esempio, prendiamo un insieme casuale di 23 parole conformi allo standard BIP39:
Ogni parola ha un indice, che è un numero basato sul suo ordine alfabetico. È importante iniziare la numerazione da 0. Ciascun indice deve poi essere espresso come valore binario. Poiché l'elenco BIP39 contiene 2048 elementi, ogni indice di parola deve essere composto da 11 bit. Troviamo così:
Nel passaggio successivo concateniamo tutti gli indici, preservandone l'ordine di apparizione. Questo ci dà una sequenza binaria a 253 bit:
Completiamo il risultato ottenuto con ulteriori 3 bit di nostra scelta.
Ricordi che abbiamo detto che la frase di recupero di 24 parole ha esattamente 8 possibili risultati di checksum?
Il numero 8 è solo una semplice conseguenza di quei 3 bit.
Otterremo tutti gli 8 risultati semplicemente inserendo qui 000, 001, 010, 011, 100, 101, 110 e 111.
Per questo esempio scegliamo: 000.
Lo concateniamo alla fine, il che si traduce in una parola binaria a 256 bit:
Il passaggio successivo è calcolare l'hash SHA256 di tali dati binari preparati.
L'algoritmo SHA256 (algoritmo di hashing sicuro, output a 256 bit) è una parte essenziale della tecnologia blockchain.
Ulteriori informazioni su SHA256 sono disponibili nell'articolo Wikipedia sull'algoritmo SHA-256.
Come risultato di questo calcolo otteniamo la seguente parola esadecimale:
La mossa successiva è estrarre i primi 8 bit dal risultato sopra. Pertanto prendiamo i primi 2 caratteri esadecimali: 27.
Corrispondono a:
Ancora una volta utilizziamo gli stessi 3 bit che abbiamo scelto prima. Questa volta li concateliamo all'inizio della stringa binaria estratta. Di conseguenza, otteniamo:
che è il valore binario 39. Questo è un indice BIP39 della parola di checksum che stiamo cercando di trovare. Non dimenticare che la numerazione dell'indice inizia da "0". Pertanto, se utilizzi un elenco di parole BIP39 con numerazione standard che inizia da "1", quindi il numero di indice effettivo sarà 40. Troviamo l'indice corretto sul file Elenco BIP39 e otteniamo la parola: agent Infine, il seed di 24 parole contenente 23 parole di nostra scelta è:
Per le restanti combinazioni a 3 bit, l'ultima parola del checksum è:


