Glossario / Indirizzi e chiavi
Percorso di derivazione
- Che cos'è un percorso di derivazione?
- Un percorso di derivazione è il tragitto nell'albero delle chiavi di un wallet HD, scritto come m/84h/0h/0h/0/0, che indica al software esattamente quale chiave, tra miliardi di chiavi, ricostruire dalla tua frase di recupero.
Specificato nel BIP-44.
Un percorso è una coordinata, non un segreto. Due numeri vicino all'inizio decidono se le tue parole ricostruiscono indirizzi che iniziano con 1, 3, bc1q o bc1p, perché BIP-44, BIP-49, BIP-84 e BIP-86 leggono ciascuno la stessa frase in modo diverso. Annotare il percorso accanto al tuo backup è la differenza tra un ripristino che trova i tuoi bitcoin e uno che segnala zero.
Come funziona
Un percorso si legge da sinistra a destra, un livello per ogni barra, e ogni livello restringe la ricerca. La m all'inizio è la chiave master generata dalla tua frase di recupero. Tutto ciò che segue è un indice, e un apostrofo o una h contrassegna quell'indice come hardened.
Il primo livello è il purpose, ed è il livello che decide che aspetto hanno i tuoi indirizzi.
| Standard | Percorso dell'account | Indirizzi che produce |
|---|---|---|
| BIP-44 | m/44h/0h/0h | legacy, che iniziano con 1 |
| BIP-49 | m/49h/0h/0h | SegWit annidato, che iniziano con 3 |
| BIP-84 | m/84h/0h/0h | SegWit nativo, che iniziano con bc1q |
| BIP-86 | m/86h/0h/0h | Taproot, che iniziano con bc1p |
Il secondo livello è il tipo di moneta, preso dal registro SLIP-0044, dove bitcoin è 0 e ogni testnet è 1. Il terzo è il numero dell'account, ed è ciò che permette a una sola frase di recupero di contenere un wallet personale a 0h e un wallet aziendale a 1h senza cronologia condivisa. Dopo, l'hardening finisce: il quarto livello è la chain, 0 per gli indirizzi che dai e 1 per il resto, e il quinto è l'indice dell'indirizzo, che sale man mano che ricevi pagamenti.
Quella separazione tra livelli hardened e normali è voluta. Poiché il livello dell'account è hardened, la chiave pubblica estesa per m/84h/0h/0h può essere esportata su uno smartphone o a un commercialista, che poi può derivare ogni indirizzo di ricezione e di resto sotto di essa, ma non può spostarsi lateralmente in un altro account né risalire verso la chiave master.
Il multisig usa un proprio ramo. BIP-48 colloca le chiavi dei cosignatari a m/48h/0h/0h/2h per il SegWit nativo, con il livello hardened finale che indica il tipo di script, così un dispositivo può distinguere un account a firma singola da uno multisig prima di firmare qualsiasi cosa.
Perché questo conta quando compri bitcoin
Il percorso non tocca mai la tua sicurezza. Non cambia nulla su quanto è difficile rubare i tuoi bitcoin, e cambia tutto su se il software che hai davanti riesce a trovarli.
Il guasto che ne deriva è comune e puntualmente terrificante. Compri su un exchange, prelevi verso un dispositivo e i bitcoin arrivano a indirizzi bc1q sotto m/84h/0h/0h. Un anno dopo ripristini le stesse 24 parole in un'altra app che usa il legacy come impostazione predefinita, e il saldo segna 0,00000000 mentre un block explorer mostra ancora il tuo denaro intatto al vecchio indirizzo. Nulla è andato perso. L'app sta cercando nel ramo sbagliato di un albero con quattro miliardi di figli per livello.
Le impostazioni predefinite cambiano tra i wallet che questo sito recensisce. Trezor Suite e Ledger Live presentano ciascuno gli account per tipo di indirizzo e scelgono in silenzio un purpose per te. Electrum chiede quale tipo di script vuoi al momento del ripristino e nasconde un campo di testo libero per il percorso dietro un'opzione avanzata. Sparrow scansiona più percorsi standard contemporaneamente e ti mostra quale ha una cronologia. Nessuno di loro è sbagliato, e nessuno può indovinare cosa ha fatto l'altro.
Due abitudini eliminano del tutto il problema. Scrivi il percorso dell'account e il tipo di indirizzo sulla stessa nota del nome del wallet, e conserva quella nota in un posto raggiungibile senza la frase di recupero, come un gestore di password, dato che da sola non rivela nulla. Poi, prima di fidarti di un ripristino, confronta il primo indirizzo di ricezione che mostra con quello che mostra il tuo dispositivo originale. Se quelle due stringhe coincidono, coincideranno anche tutti gli indirizzi sotto di esse.
Ripristinare 24 parole in Electrum e vedere zero
Un ripristino sul percorso sbagliato si svolge così. Un Trezor Model T è stato configurato con 24 parole, un prelievo dall'exchange è andato al suo primo indirizzo SegWit nativo e il dispositivo ora sta in un cassetto. Mesi dopo la frase viene digitata in Electrum su un portatile.
Electrum chiede il tipo di script prima di scansionare. Scegli legacy p2pkh e il programma deriva m/44h/0h/0h, mostra indirizzi che iniziano con 1, non trova nulla e segnala un wallet vuoto. I bitcoin sono ancora all'indirizzo bc1q, ancora confermati, ancora visibili a chiunque abbia il txid.
La soluzione richiede un minuto. Ripristina di nuovo, scegli SegWit nativo oppure apri il campo avanzato della derivazione e inserisci a mano m/84'/0'/0'. Electrum riscansiona, il saldo compare e l'elenco degli indirizzi inizia con la stessa stringa che il Trezor mostra nella sua scheda di ricezione. Se segna ancora zero e sai che i pagamenti sono andati più avanti nel ramo, alza il gap limit dal valore predefinito 20 prima di supporre che manchi qualcosa.
Nulla in quella sequenza ha messo a rischio i bitcoin, perché un ripristino è un'operazione di lettura. Puoi provare ogni purpose uno dopo l'altro, e l'unico costo è il tempo di ogni nuova scansione.
Percorso di derivazione vs output descriptor
Un percorso dice dove; un descriptor dice dove, cosa e a partire da quale chiave. Il descriptor wpkh([fingerprint/84h/0h/0h]xpub/0/*) contiene lo stesso percorso, più il tipo di script come funzione wrapper, più la chiave estesa stessa, più un checksum che intercetta un carattere digitato male. Consegnare a qualcuno un percorso non gli dice nulla del tuo wallet. Consegnargli un descriptor gli consegna tutta la tua cronologia di indirizzi e ogni indirizzo futuro di quel ramo, ed è per questo che uno è sicuro da inviare per email e l'altro no.