Che cos’è il Derivation Path?
Un Derivation Path è un concetto fondamentale all’interno del sistema di wallet Hierarchical Deterministic (HD) utilizzati nel contesto delle transazioni bitcoin. Questi Derivation Path consentono di determinare in modo preciso e sicuro la posizione di una chiave all’interno di una struttura ad “albero”.
In un wallet HD, ogni chiave ha un Derivation Path che indica la sua posizione all’interno dell’elenco delle chiavi. Questo percorso è costituito da una sequenza di caratteri che indica la profondità e l’indice di una chiave rispetto alla chiave principale. Ad esempio, la chiave principale viene indicata come “M”, mentre il primo figlio della chiave principale avrà un Derivation Path di “M/0” e il quinto figlio di quella chiave avrà un Derivation Path di “M/0/4”.
La profondità di una chiave all’interno dell’albero è determinata dal numero di livelli che separano la chiave stessa dalla chiave principale. Ad esempio, nel Derivation Path “M/0/4”, la chiave ha una profondità di 2 perché si trova a due livelli di distanza dalla chiave principale. L’indice di una chiave, invece, è semplicemente il suo numero di ordine all’interno del suo livello, a partire da zero. Pertanto, la chiave di “M/0/4” avrà un indice di 4.
Il Bitcoin Improvement Proposal 32 ha introdotto la possibilità di ottenere un gran numero di chiavi per ogni chiave genitore. In particolare, è possibile avere fino a 2^32 chiavi per ogni chiave genitore. Le prime 2^31 – 1 chiavi sono considerate “senza doni”, il che significa che una chiave pubblica genitore può ottenere le chiavi pubbliche infantili. Tuttavia, le chiavi pubbliche dei genitori non sono in grado di creare i figli numerati da 2^31 a 2^32 – 1. Solo la chiave privata del genitore può essere utilizzata per generare una chiave privata per questi figli, che a loro volta possono essere utilizzati per ottenere le relative chiavi pubbliche.
Per indicare che una chiave è rinforzata, ovvero che può generare solo le chiavi figlie corrispondenti e non le chiavi pubbliche, viene utilizzato il simbolo apostrofo (‘), che viene aggiunto al percorso di creazione. Ad esempio, il primo “figlio rinforzato” della chiave principale avrà un Derivation Path di “M/0′”, mentre il quinto “figlio non rinforzato” avrà un Derivation Path di “M/0/4”.
Si può riassumere un Derivation Path all’interno di un wallet HD, come un mezzo per identificare con precisione la posizione di una chiave all’interno di una struttura ad albero. Questa informazione è essenziale per poter generare in modo corretto le chiavi pubbliche e private necessarie per le transazioni bitcoin. Il Bitcoin Improvement Proposal 32 ha introdotto ulteriori opzioni di generazione delle chiavi per i wallet HD, fornendo una maggiore flessibilità nel loro utilizzo.