Glossario / Indirizzi e chiavi
Chiave estesa
Noto anche come xpub, xprv, Chiave pubblica estesa, Chiave privata estesa, Extended key.
- Che cos'è una chiave estesa?
- Una chiave estesa abbina una chiave bitcoin ordinaria a un chain code di 32 byte, e questa coppia è ciò che consente al software di derivare un intero ramo di chiavi al di sotto di essa.
Specificato nel BIP-32.
Una xpub non è una chiave pubblica. È una struttura di 78 byte: versione, profondità, impronta digitale della chiave genitore, indice della chiave figlia, il chain code di 32 byte e la chiave stessa, il tutto avvolto in Base58Check per produrre una stringa di 111 caratteri. Se ne dai una a un commercialista, può leggere ogni indirizzo di quel ramo e ogni satoshi che quel ramo abbia mai ricevuto, senza poter spendere nulla.
Come funziona
Una chiave estesa esiste perché una chiave nuda non può generare chiavi figlie. La derivazione in BIP-32 calcola un hash del chain code della chiave genitore insieme al suo materiale di chiave e a un indice, e il chain code fornisce l'entropia aggiuntiva che tiene le chiavi sorelle senza alcun rapporto tra loro. Eliminalo e non resta nulla da cui derivare.
La serializzazione è fissa a 78 byte in un ordine rigoroso: 4 byte di versione, 1 byte di profondità, 4 byte di impronta digitale della chiave genitore, 4 byte di indice della chiave figlia, 32 byte di chain code e 33 byte di dati della chiave. Una chiave privata estesa riempie il suo segreto di 32 byte con uno zero iniziale, così entrambe le forme occupano la stessa larghezza. I byte di versione creano il prefisso leggibile: 0x0488B21E produce xpub, 0x0488ADE4 produce xprv, e gli equivalenti per la testnet producono tpub e tprv.
Su queste chiavi operano due funzioni di derivazione. Quella pubblica calcola chiavi figlie non hardened solo da una xpub, ed è così che un processore di pagamenti genera migliaia di indirizzi per le fatture su un server web che non contiene nulla di spendibile. Quella privata calcola qualsiasi cosa, indici hardened compresi, e richiede la xprv.
Incontrerai anche ypub, zpub e vpub. Provengono da SLIP-0132, una convenzione che riutilizza la stessa struttura di 78 byte con byte di versione diversi per segnalare un tipo di script. Bitcoin Core non l'ha mai adottata, e i descrittori di script di output previsti dal BIP-380 hanno sostituito l'idea in modo adeguato, indicando per esteso il tipo di script, come in wpkh([1a2b3c4d/84h/0h/0h]xpub.../0/*).
Perché questo conta quando compri bitcoin
Una chiave pubblica estesa è la cosa più sensibile che ti verrà mai chiesto di condividere senza che sia tecnicamente un segreto, e la richiesta di solito sembra routine.
Esistono tre motivi legittimi per esportarne una. Configurare un wallet di sola lettura così che uno smartphone possa mostrare il saldo di un wallet hardware. Consegnare a un processore di pagamenti self-hosted il ramo da cui deve trarre gli indirizzi per le fatture. Costruire un multisig, in cui ogni cofirmatario fornisce una xpub e tutte sono necessarie per ricostruire il wallet in seguito, anche se tutte le frasi di recupero sopravvivono.
Ogni altro caso merita sospetto. Nessun exchange recensito su questo sito ha bisogno di una chiave estesa per inviarti un prelievo; ha bisogno di un indirizzo. Un operatore dell'assistenza che chiede una xpub per verificare il tuo wallet sta, nel migliore dei casi, svolgendo un'attività di profilazione. Chi chiede una xprv sta chiedendo i bitcoin, e la risposta corretta è interrompere la conversazione.
La divulgazione è anche permanente in un modo che le persone sottovalutano. Una xpub rivela non solo il saldo di oggi ma ogni pagamento su quel ramo, passato e futuro, perché chi la detiene può continuare a derivare nuovi indirizzi molto tempo dopo che hai smesso di parlargli. Non esiste alcuna revoca. Annullarla significa generare una nuova frase di recupero e spostare ogni bitcoin, pagando una commissione su ogni input che possiedi.
Una trappola riguarda specificamente questo punto. Se qualcuno detiene la tua chiave pubblica estesa e ottiene anche una singola chiave privata figlia non hardened, può ricostruire la chiave privata estesa genitore e spendere l'intero ramo. Il BIP-32 lo afferma nelle sue stesse note di sicurezza. È il motivo per cui i livelli di conto sono hardened, e per cui esportare una singola chiave da un wallet moderno, cosa che alcuni strumenti offrono ancora, è una comodità pericolosa e non una comodità utile.
Cosa può e non può fare un commercialista con la tua xpub
Consegna una chiave pubblica estesa e il confine è netto. Supponi di esportare la chiave pubblica estesa del conto per m/84'/0'/0' da un wallet hardware e di inviarla via email a chi prepara le tue imposte.
Può derivare ogni indirizzo di ricezione e ogni indirizzo di resto sotto quel conto, cercarli uno per uno su qualsiasi explorer e ricostruire una storia completa e datata degli importi in entrata e in uscita. Può calcolare il tuo saldo attuale fino al satoshi e continuare a osservarlo cambiare. Può derivare indirizzi che non hai ancora usato e vedere il momento in cui li usi.
Non può firmare nulla. Le chiavi figlie hardened non sono raggiungibili dal lato pubblico, quindi un conto fratello come m/84'/0'/1' resta invisibile a quella persona, e così anche la chiave master. Non può recuperare una chiave privata da nulla di tutto ciò, a meno che tu non gli consegni separatamente una delle singole chiavi sottostanti, che è il caso di fallimento descritto sopra.
Chiave estesa vs chiave pubblica
Una chiave pubblica è un punto sulla curva secp256k1, 33 byte quando è compressa, e verifica le firme. Una chiave pubblica estesa è quello stesso punto più un chain code di 32 byte e quattro campi che ne descrivono la posizione, e può produrre miliardi di altre chiavi pubbliche. Pubblicare una chiave pubblica divulga le informazioni di un solo output. Pubblicare una chiave pubblica estesa divulga un wallet.
Chiave estesa vs Wallet Import Format
Una xprv e una stringa in Wallet Import Format codificano entrambe materiale di chiave in Base58, e la somiglianza finisce lì. Una stringa WIF contiene una chiave privata con un byte di rete e un checksum, utile per spostare una singola chiave legacy, e importarla recupera esattamente i bitcoin bloccati su quella chiave. Una xprv contiene una chiave più il chain code e la posizione che le permettono di rigenerare un ramo illimitato. È l'asimmetria che coglie di sorpresa: spostare una WIF in un wallet moderno è una manutenzione di routine, mentre incollare una xprv in un software sconosciuto consegna in una volta tutto ciò che sta sotto di essa.