Deterministici, o “seeded”, wallet sono dei wallet che contengono chiavi private che a loro volta sono tutte derivate da un unico seed, attraverso l’uso di una funzione di hashing one-way. Il seed è un numero generato casualmente che viene combinato con altri dati, come un index number o “chain code” per derivare le chiavi private.
In un wallet deterministico, il seed è insufficiente per recuperare tutte le chiavi derivate, quindi un singolo backup in fase di creazione è sufficiente. Il seed è inoltre sufficiente per l’importazione o l’esportazione di un intero wallet, permettendo una semplice migrazione di tutte le chiavi dell’utente finale attraverso diverse implementazioni wallet.
HD Wallets (BIP-32/BIP-44)
I wallet Deterministici sono stati sviluppati per consentire di derivare chiavi multiple da un singolo “seme” (seed). La forma più avanzata di wallet deterministico è il hierarchical deterministic wallet o HD wallet definito dallo standard BIP0032. I wallet gerarchici deterministici contengono chiavi derivate in una struttura ad albero, tale che da una chiave madre si può far derivare una sequenza di chiavi figlie, e da ognuna di queste si può far derivare una sequenza di chiavi nipoti, e così via, ad una profondità infinita. Questa struttura ad albero è illustrata in figura.
Gli HD wallet offrono due importanti vantaggi rispetto alle chiavi casuali (non deterministiche). In primo luogo, la struttura ad albero può essere usata per rappresentare una struttura organizzativa aggiuntiva, ad esempio un ramo specifico di sottochiavi potrebbe essere utilizzato per ricevere i pagamenti in arrivo e un altro ramo per ricevere il resto da pagamenti in uscita. Alcuni rami di chiavi potrebbero essere utilizzate in diversi rami aziendali, assegnando diversi rami a dipartimenti, società affiliate, funzioni specifiche, o categorie contabili.
Il secondo vantaggio dei wallet HD è che gli utenti possono creare una sequenza di chiavi pubbliche senza avere accesso alle corrispondenti chiavi private. Questo permette ai wallet HD di essere utilizzati su un server non sicuro o con sola capacità di ricezione, con l’emissione di una diversa chiave pubblica per ogni transazione. Le chiavi pubbliche non devono essere precaricate o derivati in anticipo, inoltre il server non deve avere le chiavi private necessarie per spendere i fondi.