Glossario / Indirizzi e chiavi
Wallet HD
Noto anche come HD wallet, protocollo HD, wallet deterministico gerarchico, BIP32.
- Che cos'è un wallet HD?
- Un wallet HD genera tutte le chiavi di cui avrà mai bisogno da un unico seed casuale, disposte come l'albero di genitori e figli specificato dal BIP-32 nel 2012.
Specificato nel BIP-32.
Un seed produce una chiave master, la chiave master produce rami, e i rami producono ogni indirizzo che usi. Il BIP-32 è stato assegnato l'11 febbraio 2012, e in pratica ogni wallet hardware, mobile e desktop in circolazione oggi lo segue. È per questo che dodici parole su un biglietto possono ripristinare un wallet che usi da dieci anni.
Come funziona
Un wallet HD trasforma un numero in una gerarchia usando un hash con chiave, eseguito più e più volte. Il seed entra in HMAC-SHA512 con la stringa fissa "Bitcoin seed", producendo 64 byte: i 32 di sinistra diventano la chiave privata master e i 32 di destra diventano il chain code master. Quella coppia è la radice di tutto ciò che sta sotto.
Ogni passo successivo prende una chiave, il suo chain code e un numero di indice, li calcola con lo stesso hash e restituisce una chiave figlia con un chain code proprio. Ogni nodo ha 4.294.967.296 figli possibili, divisi in due metà: gli indici inferiori a 2.147.483.648 sono normali e possono essere calcolati dal solo lato pubblico, mentre gli indici pari o superiori a quella soglia sono hardened e richiedono la chiave privata. Ripetendo il passo si costruisce un albero, e una posizione in quell'albero si scrive come percorso di derivazione.
Il determinismo è ciò che rende il progetto utile. Lo stesso seed, dato a qualsiasi implementazione corretta, produce esattamente le stesse chiavi nello stesso ordine per sempre. Nessuna chiave viene mai memorizzata, solo ricalcolata: è per questo che il backup è una frase e non un file che cresce ogni volta che ricevi un pagamento.
Le parole sono un livello separato, e confondere i due livelli causa la maggior parte dei problemi di recupero. Il BIP-39 definisce come una frase tratta da una lista di 2.048 parole diventa il seed, allungandola con PBKDF2 e HMAC-SHA512 per 2.048 iterazioni, con la stringa "mnemonic" più una passphrase opzionale come salt. Il BIP-32 non sa nulla di parole e il BIP-39 non sa nulla di alberi. Li unisce una convenzione: è così che due wallet possono concordare sulla tua frase e comunque non concordare sui tuoi indirizzi.
Bitcoin Core crea solo wallet deterministici gerarchici dalla versione 0.16.0. Prima di allora un wallet teneva una riserva di chiavi casuali non correlate, e un backup diventava obsoleto nel momento in cui la riserva andava oltre.
Perché questo conta quando compri bitcoin
La frase che annoti durante la configurazione del wallet è l'unica cosa che ti separa da ogni bitcoin che comprerai, e la struttura ad albero è ciò che rende vera questa affermazione.
Fai il backup una volta e il backup resta completo. Cento prelievi da un exchange verso cento indirizzi nuovi sono tutti discendenti di un'unica radice, quindi nulla di ciò che fai dopo amplia quello che devi proteggere. È il miglioramento pratico più grande nella custodia di bitcoin da quando è uscito il primo client, ed è allo stesso modo il motivo per cui una frase di recupero fotografata una volta è compromessa per sempre: la fotografia copre anche i bitcoin che non hai ancora comprato.
La portabilità è il secondo vantaggio, e porta con sé un'insidia. Una frase annotata su un Trezor o un Ledger si ripristina in Sparrow, Electrum o BlueWallet perché tutti implementano lo stesso standard. L'insidia è il percorso. Il BIP-44 produce indirizzi che iniziano con 1, il BIP-49 produce 3, il BIP-84 produce bc1q e il BIP-86 produce bc1p, tutti dalle stesse parole. Se ripristini in un software che usa per impostazione predefinita uno scopo diverso, il saldo mostra zero mentre i bitcoin restano intatti su un altro ramo. Annotare il percorso di derivazione accanto al backup, e nient'altro accanto, previene quel preciso panico.
Il gap limit è la terza cosa da sapere. Un wallet ripristinato cerca in avanti attraverso 20 indirizzi inutilizzati secondo il BIP-44 e poi smette di cercare. Premere un pulsante di ricezione quaranta volte su un wallet di cui non hai mai fatto il backup, e poi usare l'ultimo indirizzo, è un modo affidabile per ottenere un ripristino che riporta un saldo vuoto.
Leggere m/84'/0'/0'/0/0 un livello alla volta
Un percorso di derivazione funziona come un indirizzo postale, che si restringe a ogni livello. Leggi da sinistra a destra il percorso standard SegWit nativo.
- m è la chiave master derivata dal tuo seed.
- 84' seleziona lo scopo BIP-84, che produce indirizzi SegWit nativi che iniziano con bc1q. L'apostrofo contrassegna il livello come hardened.
- 0' è il tipo di moneta, e 0 significa la mainnet di bitcoin. La testnet sarebbe 1'.
- 0' è l'account, quindi un account separato per un'azienda sarebbe 1'.
- 0 è la catena: 0 per gli indirizzi che comunichi agli altri, 1 per il resto.
- 0 è l'indice dell'indirizzo, che avanza a ogni pagamento ricevuto.
I primi tre livelli sono hardened e gli ultimi due no, di proposito. È questa divisione a permettere di esportare una chiave pubblica estesa a livello di account in un wallet di sola lettura, che può poi generare indirizzi di ricezione e di resto senza poter mai raggiungere un account fratello né risalire verso la chiave master.
Wallet HD vs frase di recupero
Un wallet HD è uno schema di derivazione; una frase di recupero è un modo di annotare il numero da cui parte. Il BIP-32 definisce l'albero e accetta qualsiasi seed da 128 a 512 bit, raccomandando 256. Il BIP-39 definisce le parole. Electrum offre un proprio formato di frase incompatibile ed è comunque del tutto deterministico gerarchico, il che dimostra che i due livelli sono davvero indipendenti. La distinzione conta quando un software dichiara di offrire il recupero BIP-39: è una promessa su come leggere le tue parole, non su quale ramo cercherà dopo.
Wallet HD vs percorso di derivazione
Un wallet HD è l'albero; un percorso di derivazione è una via al suo interno. La gente descrive un wallet come "un wallet BIP-84" come se fosse una categoria di prodotto, ma qualsiasi wallet BIP-32 può percorrere qualsiasi percorso, e la maggior parte del software attuale mostra senza problemi più account con scopi diversi a partire da un solo seed. Tratta il percorso come una coordinata da annotare accanto al backup, non come una proprietà dell'app che ti è capitato di installare.