Glossario / Indirizzi e chiavi
Codice di catena master
Noto anche come Chiave privata master.
- Che cos'è il codice di catena master?
- Il codice di catena master è la metà destra dell'hash da 64 byte del tuo seed, il complemento della chiave privata master che si trova alla profondità zero dell'albero di un wallet HD.
Specificato nel BIP-32.
Ogni chiave che userai discende da quella sola coppia. Una singola passata di HMAC-SHA512 sul seed, con la stringa ASCII Bitcoin seed come chiave, restituisce 64 byte: i primi 32 diventano la chiave privata master e gli ultimi 32 diventano il codice di catena master. Copiare il seed equivale a copiare tutto ciò che sta sotto, ed è proprio per questo che un backup è una frase e non un archivio.
Come funziona
La generazione master avviene esattamente una volta, alla creazione del wallet. BIP-32 accetta un seed tra 128 e 512 bit, ne raccomanda 256 e lo fa passare attraverso l'hash con chiave descritto sopra. La coppia che ne esce è il nodo indicato con m all'inizio di ogni percorso di derivazione, e sopra di esso non c'è nulla.
Dentro quel passaggio si nasconde una verifica di validità. Se i 32 byte di sinistra risultano zero, oppure un numero maggiore o uguale all'ordine della curva secp256k1, BIP-32 dichiara il seed non valido e l'implementazione deve rifiutarlo. La probabilità di incorrere nell'uno o nell'altro caso è inferiore a 1 su 2 elevato alla 127ª potenza, quindi nessun wallet ne ha mai segnalato uno, ma è questa regola a rendere ogni seed accettato utilizzabile senza ambiguità.
Serializzata, la radice si annuncia da sola. Le chiavi estese private della mainnet portano i byte di versione 0x0488ADE4 e vengono stampate come xprv, quelle pubbliche portano 0x0488B21E e vengono stampate come xpub. Alla radice il byte di profondità è 0x00 e sia l'impronta del genitore sia il numero del figlio sono quattro byte a zero, perché non c'è alcun genitore a cui puntare.
Il numero che in pratica maneggi è l'impronta, non i byte grezzi. Calcolare l'hash della chiave pubblica master con SHA-256 e poi con RIPEMD-160 e tenere i primi quattro byte produce una stringa esadecimale di otto caratteri che identifica un wallet senza rivelare nulla di derivabile da essa.
Dove lo vedi
Il software per il grande pubblico nasconde del tutto la coppia master e mostra invece l'impronta. Sparrow la stampa accanto a ogni keystore, Bitcoin Core apre ogni riga dell'output di listdescriptors con essa tra parentesi quadre e un Coldcard la mostra nella schermata iniziale, così puoi confermare quale seed il dispositivo detiene in quel momento. Quando arriva un PSBT, un dispositivo per la firma confronta l'impronta nel campo di origine della chiave con la propria prima ancora di decidere se la richiesta è a lui indirizzata.
Il multisig è il punto in cui l'identità della radice smette di essere un dettaglio. Un wallet 2-su-3 non è recuperabile dalle sole tre frasi di recupero, perché per ricostruirlo bisogna conoscere anche l'impronta e il percorso di ogni cofirmatario. È per questo che ogni strumento multisig serio ti dice di conservare il descrittore del wallet accanto alle parole, e che perdere il descrittore può lasciare bloccati bitcoin che nessuna singola frase è in grado di raggiungere.
L'unico momento in cui tocchi direttamente la chiave privata master è un'importazione. Incollare una xprv in un software consegna l'intero albero: ogni purpose, ogni account, ogni indirizzo futuro, senza alcun modo di limitare la concessione a un solo ramo. Non esiste una versione parziale di una radice, ed è per questo che i wallet hardware si rifiutano del tutto di esportarla.
Codice di catena master vs frase di recupero
La frase viene prima e la coppia master viene dopo, e appartengono a standard diversi. BIP-39 trasforma 12 o 24 parole in un seed da 512 bit eseguendo PBKDF2 per 2.048 round; poi BIP-32 trasforma quel seed nella chiave privata master e nel codice di catena master. I livelli restano abbastanza indipendenti perché aggiungere una passphrase cambi il seed, e quindi cambi la coppia master e ogni indirizzo sotto di essa, mentre le parole sul tuo foglio restano esattamente le stesse. Electrum lo dimostra dall'altro lato: le sue frasi di recupero non sono affatto BIP-39 e producono comunque una normale radice BIP-32.