Vai al contenuto
buybitcoinsmart

Glossario / Indirizzi e chiavi

Derivazione hardened

Noto anche come Chiave estesa hardened.

Che cos'è la derivazione hardened?
La derivazione hardened immette la chiave privata genitore in ogni calcolo di una chiave figlia, ed è questo che impedisce a una chiave pubblica estesa divulgata di compromettere il ramo sottostante.

Specificato nel BIP-32.

Ogni nodo di un albero BIP-32 può produrre 4.294.967.296 figli, e la metà superiore di quell'intervallo si comporta diversamente. Gli indici da 2.147.483.648 in poi sono hardened, si scrivono con un apostrofo o con la lettera h, e nessuna chiave pubblica può derivarli. Questa restrizione è la caratteristica, non un difetto.

Come funziona

La derivazione hardened e quella normale differiscono per un solo input dello stesso hash. Entrambe immettono in HMAC-SHA512 il chain code di un padre e un indice di figlio. La derivazione normale aggiunge la chiave pubblica del padre, che chiunque detenga la chiave pubblica estesa possiede già. La derivazione hardened aggiunge invece la chiave privata del padre, preceduta da un byte zero, così il calcolo non può essere eseguito senza il segreto.

Il motivo è una debolezza specifica che BIP-32 illustra nelle sue note di sicurezza: conoscere una chiave pubblica estesa del padre insieme a una qualsiasi chiave privata non hardened che ne discende equivale a conoscere la chiave privata estesa del padre, e quindi ogni chiave al di sotto di quel punto. L'aritmetica che sta dietro è semplice. Una chiave privata figlia normale è uguale alla chiave del padre più un valore calcolato da informazioni pubbliche, quindi sottraendo quel valore si recupera il padre.

Gli indici hardened chiudono la strada. Per essi non esiste una funzione di derivazione pubblica, quindi una chiave pubblica estesa si ferma di colpo al confine. Una xpub di un account trapelata espone la cronologia di quell'account e nulla al di sopra o accanto ad essa.

Dove lo vedi

L'hardening si manifesta con gli apostrofi in un percorso di derivazione, e il punto in cui cadono è una decisione progettuale deliberata.

Il percorso standard per SegWit nativo è m/84'/0'/0'/0/0. I primi tre livelli, purpose, coin type e account, sono hardened. Gli ultimi due, catena e indice dell'indirizzo, non lo sono. È proprio questa separazione a rendere utilizzabile un wallet di sola osservazione: una chiave pubblica estesa di account può generare ogni indirizzo di ricezione e di resto al di sotto di sé, mentre un attaccante che ottiene quella stessa xpub non può risalire verso la chiave master né spostarsi lateralmente in m/84'/0'/1'.

La notazione varia senza cambiare nulla. BIP-32 scrive 0', molti strumenti accettano 0h, e Bitcoin Core scrive h nei descrittori che esporta perché un apostrofo va protetto con un carattere di escape all'interno di JSON. Un percorso copiato da Sparrow in Core torna riscritto nella forma con h, cosa che allarma la prima volta ed è puramente estetica.

La regola pratica è breve. Applica l'hardening a ogni livello fino all'account, lascia non hardened i due livelli sottostanti perché gli strumenti di sola osservazione continuino a funzionare, e considera qualsiasi software che offra di esportare una singola chiave privata figlia non hardened un pericolo anziché una comodità, perché quell'esportazione combinata con la tua xpub è l'intero ramo.

Derivazione hardened vs una passphrase

La derivazione hardened è automatica; una passphrase BIP-39 è un segreto che scegli tu. Vengono raggruppate come modi per rendere più robusto un wallet e affrontano problemi tra loro non correlati. L'hardening protegge un albero da una chiave pubblica estesa che è sfuggita, e ogni wallet standard lo applica già senza chiedertelo. Una passphrase è un input aggiuntivo mescolato nel seed prima ancora che l'albero venga costruito, e produce un wallet completamente separato dalle stesse dodici o ventiquattro parole. Se dimentichi la passphrase, i bitcoin sono irraggiungibili, perché nulla la registra da nessuna parte. Se dimentichi l'hardening, non succede nulla, perché non sei mai stato tu a deciderlo.

Da non confondere con

Domande frequenti

Che cosa significa l'apostrofo in m/84'/0'/0'?

Indica un livello hardened, cioè che l'indice è 2.147.483.648 o superiore e che la chiave figlia può essere derivata solo con la chiave privata genitore. Alcuni strumenti scrivono invece h, e Bitcoin Core usa h nei descrittori perché in JSON l'apostrofo andrebbe protetto con escape.

Devo configurare io stesso la derivazione hardened?

No. Ogni wallet che segue BIP-44, BIP-49, BIP-84 o BIP-86 applica automaticamente l'hardening ai livelli di scopo, tipo di moneta e conto e lascia non hardened i due livelli sottostanti perché i wallet di sola osservazione continuino a funzionare.

Leggi anche

Termini correlati

Altro in Indirizzi e chiavi

Leggi questa pagina in inglese