Un portafoglio software utilizza un numero casuale per generare una chiave privata principale.
Quindi, attraverso un algoritmo deterministico e irreversibile, può derivare un numero illimitato di chiavi private secondarie da quella chiave privata principale.
Perché abbiamo bisogno di un algoritmo deterministico e irreversibile?
Perché deterministico significa che tutte le chiavi private secondarie possono sempre essere generate dalla stessa chiave privata principale, mentre irreversibile significa che la chiave privata principale non può essere ricostruita da nessuna chiave privata secondaria.
Questo è il motivo per cui è chiamato portafoglio gerarchico deterministico (HD). La struttura di derivazione delle chiavi private assomiglia ad un albero: una chiave genitore può derivare più chiavi figlie, ciascuna chiave figlio può derivare più chiavi nipoti e questo processo può continuare indefinitamente.
Quando viene creato per la prima volta un portafoglio HD o quando viene eseguito il backup di un portafoglio, viene generata una frase mnemonica. Una frase mnemonica è una sequenza di parole inglesi. Questa sequenza viene utilizzata per generare il seme e il seme viene quindi utilizzato per generare tutte le chiavi private nel portafoglio. In altre parole, la frase mnemonica funge da backup del portafoglio, perché può essere utilizzata per ripristinare il portafoglio. Il seme, a sua volta, corrisponde al numero casuale originale dietro il portafoglio deterministico.
Uno dei principali vantaggi di un portafoglio HD è che è necessaria solo la chiave pubblica principale per generare un numero qualsiasi di chiavi pubbliche secondarie. In altre parole, è possibile creare nuovi indirizzi pubblici dalla chiave pubblica principale senza richiedere l'accesso alle chiavi private, siano esse la chiave privata principale o le chiavi private secondarie. Tuttavia, tutti questi indirizzi generati possono ancora essere controllati dalla chiave privata principale.
Naturalmente, questo design comporta anche dei rischi. Se la frase mnemonica viene esposta, equivale essenzialmente a esporre tutte le chiavi private. Una volta che ciò accade, la sicurezza delle risorse digitali nel portafoglio viene effettivamente persa.
Perché sono necessarie così tante chiavi private?
Il motivo per cui gli utenti hanno bisogno di così tante chiavi private può essere compreso attraverso il meccanismo di modifica nelle transazioni Bitcoin.
Una transazione Bitcoin è una struttura dati che contiene input e output. Include anche le informazioni di scripting necessarie che trasferiscono il valore dalla sorgente (l'input) alla destinazione (l'output).
Per comprendere gli input e gli output di Bitcoin, è importante conoscere il concetto di UTXO (Unspent Transaction Output). Un UTXO è l'unità di base di una transazione Bitcoin e rappresenta l'output della transazione non spesa. Un singolo bitcoin è in realtà distribuito su molte transazioni e molti blocchi sotto forma di UTXO. In realtà, non esiste un registro centralizzato che conservi un semplice saldo del conto; invece, ci sono solo UTXO decentralizzati bloccati ai rispettivi proprietari.
Un UTXO può rappresentare qualsiasi importo di valore, ma una volta creato è indivisibile nello stesso modo in cui una moneta fisica non può essere divisa a metà. Se il valore di un UTXO è superiore all'importo necessario per una transazione, l'intero UTXO dovrà essere comunque speso e l'eccedenza verrà restituita come resto.
Ad esempio, immagina di avere un UTXO del valore di 20 unità e di voler pagare 1 unità. La transazione deve consumare l'intero UTXO di 20 unità e creare due output: un output invia 1 unità al destinatario, mentre l'altro invia 19 unità al tuo portafoglio come resto. In questo senso, la maggior parte delle transazioni Bitcoin generano cambiamento.
Ciò porta a un'altra domanda: la modifica dovrebbe essere rispedita all'indirizzo originale o a un indirizzo appena generato?
Quando Satoshi Nakamoto ha progettato Bitcoin, è stato utilizzato un meccanismo di cambio indirizzo, il che significa che spesso viene creato un nuovo indirizzo per ricevere il resto da ogni transazione. Il vantaggio di questa progettazione è che aiuta a proteggere la privacy dell'utente e riduce alcuni rischi per la sicurezza.
Nella vita reale, ciò può essere paragonato all’apertura di diversi conti bancari con nomi e identità diversi presso banche diverse. Anche se qualcuno può osservare il flusso di denaro in ciascun conto, diventa molto più difficile per lui risalire al vero proprietario delle risorse digitali. Questo fa parte di ciò che conferisce a Bitcoin il suo relativo anonimato.
Ecco perché gli utenti del portafoglio hanno bisogno di così tante chiavi private. Poiché le chiavi pubbliche e le chiavi private esistono sempre in coppia e ogni transazione può generare un nuovo indirizzo di modifica, la memorizzazione e il backup delle chiavi private corrispondenti a tutti questi indirizzi diventerebbero altrimenti una grande sfida tecnica. Il portafoglio HD risolve questo problema consentendo a una singola radice di generare un numero qualsiasi di chiavi pubbliche e private figlie, migliorando notevolmente l'usabilità dei portafogli digitali.
