Seed Phrase, come si ottiene?
Vi siete mai domandati come si ottiene il seed phrase?
Il Seed phrase è una serie di parole che permettono di generare o rigenerare l’albero delle chiavi, di derivare quindi il wallet deterministico.
Quindi se qualcuno trova il seed phrase, va da se che ha a disposizione tutte le nostre chiave e di conseguenza i nostri bitcoin.
Quindi conservatelo in un posto sicuro !
Il BIP39 definisce la creazione del mnemonic code e del seed.
mnemonic code, mnemonic phrase, mnemonic recovery phrase, mnemonic seed, seed phrase. Sono tutti sinonimi :)
La sequenza di queste parole sono sufficienti per ricreare il seed, e da qui ricreare il wallet HD e le chiavi derivate.
Seed Phrase -> Seed-> Chiavi Master -> Chiavi
Se si usa lo standard mnemonic, abbiamo a disposizione un dizionario di 2048 parole, con 2048¹² combinazioni.
Tali parole sono selezionate con cura per non essere simili tra loro e non sbagliare a scriverle.
Gli steps da seguire
Partiamo da 128 bits, 32 caratteri esadecimali, che rappresentano l’entropia.
Applichiamo lo SHA256 e appendiamo i primi 4 bits (cioè 1 carattere esadecimale) in fondo all’entropia.
Questo rappresenta il checksum.
Convertiamo il risultato ottenuto in base2.
Il risultato binario viene diviso in 12 segmenti da 11 bits ciascuno, ogni segmento rappresenta una parola.
È necessario convertire il valore delle singole caselle in base10, in modo tale da ottenere un numero che si può mappare nel dizionario.
Prendiamo i valori corrispondenti dei bits accesi, cioè dove è presente il numero 1, e gli sommiamo.
Il risultato che otteniamo è un numero, che mappato al dizionario inglese dato dalle 2048 parole, da come risultato accident.
Partiamo dall’entropia
0168071cf29dbdf232de82fa34acb933
applichiamo quindi lo SHA256 e prendiamo il primo carattere del digest.
printf 0168071cf29dbdf232de82fa34acb933 | xxd -r -p | sha256sum -b | head -c 1
> 3
Il 3 è il checksum che dobbiamo appendere all’entropia, e poi convertire in base2.
echo "ibase=16; obase=2; $(echo 0168071cf29dbdf232de82fa34acb9333 | tr '[:lower:]' '[:upper:]') " | bc| tr -d '\n'> 10110100000000111000111001111001010011101101111011111001000110010110111101000001011111010001101001010110010111001001100110011
Ottenendo così codice binario da “incasellare”.
printf 10110100000000111000111001111001010011101101111011111001000110010110111101000001011111010001101001010110010111001001100110011 | sed 's/.\{11\}/& /g'| tr " " "\n"
> 10110100000
00011100011
10011110010
10011101101
11101111100
10001100101
10111101000
00101111101
00011010010
10110010111
00100110011
0011
Come vediamo non abbiamo delle caselle da 11 bits ciascuna, per renderle omogenee dobbiamo aggiungere 7 bits di zeri all’inizio
printf 000000010110100000000111000111001111001010011101101111011111001000110010110111101000001011111010001101001010110010111001001100110011 | sed 's/.\{11\}/& /g'| tr " " "\n"> 00000001011
01000000001
11000111001
11100101001
11011011110
11111001000
11001011011
11010000010
11111010001
10100101011
00101110010
01100110011
Convertendo il primo risultato in base10
echo "ibase=2; 00000001011" | bc
Otteniamo il risultato
11
Possiamo nel dizionario https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt che parole è mappata all’indice 11.
La parola che troviamo è accident.
Attenzione, la lista parte da 1, quindi l’elemento è n+1.
Abbiamo la possibilità di verificare il nostro risultato utilizzando il sito https://iancoleman.io/bip39/ ed inserire l’entropia che abbiamo utilizzato
► Libro Bitcoin dalla teoria alla pratica (Amazon)
► Libro Bitcoin dalla teoria alla pratica (sito ufficiale con pagamento in bitcoin)
—
► Libro Bitcoin 199 domande (Amazon)
► Libro Bitcoin 199 domande (sito ufficiale con pagamento in bitcoin)
—
► Video corso disponibile su Udemy
I nostri social:
► Twitter , Facebook, Linkedin, Medium, Instagram, Youtube
In crypto we trust