Glossario / Indirizzi e chiavi
Chiave figlia
Noto anche come Chiave pubblica figlio, Chiave privata figlio.
- Che cos'è una chiave figlia?
- Una chiave figlia deriva da un passaggio di derivazione e non da un generatore di numeri casuali, ed è identificata dall'indice che la sua chiave genitore ha usato per produrla.
Specificato nel BIP-32.
Niente in una chiave figlia è più debole della chiave che sta sopra. Una chiave figlio è una chiave privata completa da 256 bit con un proprio chain code, in grado di firmare transazioni e di avere a sua volta delle chiavi figlio. La parola descrive una posizione in un albero, e in un wallet standard le chiavi che custodiscono davvero i tuoi bitcoin si trovano cinque livelli sotto la radice.
Come funziona
Derivare una chiave figlio richiede un hash e una somma. Il chain code del genitore diventa la chiave di HMAC-SHA512, i dati sono il materiale della chiave genitore seguito da un indice di quattro byte, e il risultato di 64 byte si divide a metà. I 32 byte di destra diventano il chain code della chiave figlio. I 32 byte di sinistra si sommano alla chiave privata genitore, modulo l'ordine della curva secp256k1, e la somma è la chiave privata figlio.
È quella somma a rendere possibile la derivazione pubblica. Sommare un numero a una chiave privata equivale a sommare un punto alla chiave pubblica, quindi un software che ha solo la parte pubblica può calcolare la stessa chiave pubblica figlio senza mai vedere un segreto. Il BIP-32 contempla anche il caso in cui l'output dell'hash cade fuori dall'intervallo valido, probabilità che colloca sotto 1 su 2 elevato a 127, e l'istruzione è saltare quell'indice e passare al successivo.
Le chiavi sorelle non rivelano nulla. Due chiavi figlio di uno stesso genitore non condividono niente che un osservatore possa notare dai loro indirizzi, ed è questo che rende utile un indirizzo nuovo per ogni pagamento. La relazione è ricostruibile solo da chi detiene la chiave pubblica estesa genitore.
Dove la vedi
Un wallet è fatto in realtà di chiavi figlio, quindi le incontri come numeri di indice e non come chiavi.
Apri una schermata di controllo delle monete in Sparrow o Electrum e ogni indirizzo porta il suo percorso: m/84'/0'/0'/0/7 è l'ottavo indirizzo di ricezione del primo conto, contando da zero. Conferma un prelievo su un Trezor o un Ledger e il dispositivo mostra quello stesso percorso accanto all'indirizzo: è così che verifichi che la destinazione appartenga al tuo albero e non a chi ha compromesso il computer.
Anche la profondità vale la pena di essere letta. La chiave master sta a profondità 0, e in un percorso nello stile del BIP-44 la chiave che firma un pagamento sta a profondità 5. Ogni livello intermedio è figlio di quello sopra e genitore di quello sotto, quindi entrambe le parole descrivono una relazione e non un rango.
Da tutto questo deriva un'abitudine. Non esportare mai una singola chiave privata figlio da un wallet HD, a meno che tu non intenda abbandonare del tutto quel ramo. Una chiave privata figlio non hardened, combinata con la chiave pubblica estesa genitore, rivela la chiave privata estesa genitore: una sola esportazione distratta può consegnare un intero conto invece di un solo indirizzo.
Chiave figlia vs chiave genitore
Una chiave figlio e una chiave genitore sono lo stesso tipo di oggetto visto dai due estremi di un passaggio di derivazione. Ogni chiave tranne la master è figlia di qualcuno, e ogni chiave da cui si è derivato è genitore di qualcuno, quindi un nodo in m/84'/0'/0' è entrambe le cose insieme. L'asimmetria sta in ciò che ciascuna può calcolare. Un genitore deriva le sue chiavi figlio senza fine, mentre una chiave figlio da sola non dice nulla della chiave che sta sopra. Quella proprietà unidirezionale è l'intero modello di sicurezza dell'albero, e la derivazione hardened è ciò che la mantiene unidirezionale.