Glossario / Indirizzi e chiavi
Indice di chiave
- Che cos'è l'indice di chiave?
- L'indice di chiave è il numero scelto a ogni passaggio di una derivazione HD, da 0 fino a 4.294.967.295, che decide su quale figlio di una chiave padre si arriva.
Specificato nel BIP-32.
Gli indici sono il modo in cui un wallet conta. Ogni livello dell'albero prende un numero di 32 bit, quindi una singola chiave padre ha 4.294.967.296 figli possibili, e tutta la metà superiore di questo intervallo, da 2.147.483.648 in poi, è riservata alla derivazione hardened. Nell'uso quotidiano incontri solo l'indice finale di un percorso: quello che avanza ogni volta che premi ricevi.
Come funziona
L'indice è l'unica cosa che cambia tra un figlio e il successivo. Durante la derivazione viene serializzato come numero di quattro byte big-endian e aggiunto al materiale della chiave padre prima dell'hash, così l'indice 0 e l'indice 1 producono risultati senza alcuna relazione visibile tra loro. Nient'altro nel passaggio cambia.
L'intervallo si divide in due a 2.147.483.648. Sotto quella soglia la derivazione è normale, e una chiave pubblica estesa padre basta per calcolare la chiave pubblica figlia senza alcun segreto. A quella soglia o sopra, la derivazione è hardened, la chiave privata padre deve partecipare, e il solo materiale pubblico non produce nulla. La notazione nasconde l'aritmetica: scrivere 84' o 84h significa indice 2.147.483.732, cioè 84 più l'offset di hardening.
Due notazioni per la stessa cosa causano più confusione del dovuto. La documentazione più vecchia e la maggior parte delle schermate dei wallet usano l'apostrofo, come in m/84'/0'/0', mentre l'output dei descrittori di Bitcoin Core preferisce m/84h/0h/0h. Sono identiche. La forma con la lettera esiste perché un apostrofo dentro un argomento della shell è un rischio di quoting, e incollarlo in bitcoin-cli si rompe in modi fastidiosi da individuare.
Dove lo vedi
L'ultimo numero di un percorso è l'indice che incontri ogni giorno. In m/84h/0h/0h/0/7 lo 0 seleziona la catena di ricezione e il 7 indica l'ottavo indirizzo che il wallet ha consegnato, contando da zero. Il resto ha il proprio contatore sulla catena 1, quindi il primo output di resto di un wallet appena creato finisce in m/84h/0h/0h/1/0, e i due contatori avanzano in modo indipendente.
Il conteggio sequenziale è ciò che rende possibile il ripristino, e anche ciò che lo fa fallire. Il BIP-44 indica a un wallet in ripristino di derivare in avanti per 20 indirizzi consecutivi non usati e poi smettere di cercare, quindi bitcoin ricevuti all'indice 45 con un lungo tratto vuoto prima di essi appariranno come saldo zero finché non alzi a mano il gap limit. Bitcoin Core evita la questione mantenendo una riserva di chiavi pre-derivate, 1.000 per impostazione predefinita, e reintegrandola man mano che vengono consumate.
La scoperta funziona allo stesso modo un livello più in alto. Un wallet in ripristino controlla il conto 0', trova uno storico, passa al conto 1' e si ferma al primo conto senza alcuna transazione. Creare il conto 5' e lasciare vuoti i conti sottostanti è quindi un modo affidabile per far sì che un futuro ripristino trascuri i tuoi bitcoin.
Indice di chiave vs percorso di derivazione
Un indice è un numero; un percorso è la lista ordinata di essi. m/84h/0h/0h/0/7 contiene cinque indici, e nell'uso ordinario si muove solo l'ultimo, perché scopo, tipo di moneta, conto e catena restano fissi per tutta la vita del wallet. La distinzione conta quando un articolo di assistenza ti dice di controllare il percorso di derivazione. Intende il prefisso fisso, non il contatore degli indirizzi, e nessun clic su ricevi recupererà un saldo che manca perché il prefisso era sbagliato.