Vai al contenuto
buybitcoinsmart

Glossario / Indirizzi e chiavi

Codice di catena

Che cos'è un codice di catena?
Un codice di catena è il valore di 32 byte di entropia aggiuntiva che accompagna ogni chiave in un wallet HD e si combina in ogni derivazione di una chiave figlia, così che le chiavi non possano essere indovinate a partire dalle loro sorelle.

Specificato nel BIP-32.

Metà di ogni chiave estesa non è affatto una chiave. Il BIP-32 divide un hash da 512 bit in una chiave da 256 bit e un codice di catena da 256 bit, e una stringa xpub porta entrambi, 111 caratteri in totale. Se consegni una xpub, consegni con essa anche il codice di catena, ed è proprio questo che permette al destinatario di derivare i tuoi indirizzi futuri.

Come funziona

Un codice di catena svolge il suo lavoro in un'unica chiamata HMAC. La derivazione di una chiave figlia esegue HMAC-SHA512 usando come chiave il codice di catena della chiave madre e come messaggio la chiave pubblica madre più un indice di quattro byte. Il risultato di 64 byte si divide a metà: i 32 byte di sinistra vengono sommati alla chiave privata madre, modulo l'ordine della curva, per dare la chiave privata figlia, e i 32 byte di destra diventano il codice di catena proprio della chiave figlia, che questa userà per le proprie figlie.

Il senso del salt è decidere chi può percorrere l'albero. Una chiave pubblica da sola non deriva nulla, perché la funzione di derivazione non viene eseguita senza il codice di catena corrispondente. Ecco perché una chiave pubblica estesa non è semplicemente una chiave pubblica con un nome più lungo. È una chiave pubblica più il suo codice di catena, e consegnare quella coppia a qualcuno trasforma un punto di una curva in un ramo illimitato ed enumerabile di indirizzi che non hai ancora usato.

Il BIP-32 documenta il pericolo che ne deriva. Se un attaccante detiene la tua chiave pubblica estesa e riesce anche a ottenere una chiave privata figlia non hardened, sottraendo lo scostamento derivato recupera la chiave privata madre e, con essa, ogni chiave sorella e ogni discendente. La derivazione hardened esiste per tagliare quella strada: in un passaggio hardened il messaggio di cui si calcola l'hash contiene la chiave privata madre invece di quella pubblica, quindi nessuna quantità di materiale pubblico permette a qualcuno di risalire.

Dove lo vedi

Un codice di catena non lo digiti mai, e nessun wallet per consumatori ne mostra uno da solo. Viaggia dentro una chiave estesa. Le stringhe Base58Check che iniziano con xpub o xprv si decodificano in 78 byte disposti così: 4 byte di versione, 1 byte di profondità, un'impronta della chiave madre di 4 byte, un numero di chiave figlia di 4 byte, il codice di catena di 32 byte e infine la chiave di 33 byte, ed è per questo che una xpub occupa 111 caratteri di testo.

È negli strumenti per sviluppatori che il campo diventa visibile come campo. La chiamata RPC deriveaddresses di Bitcoin Core lavora su descrittori che incorporano chiavi estese, le library come python-bip32 restituiscono il codice di catena come attributo separato, e un dispositivo di firma che esporta un conto per una configurazione di sola lettura esporta esattamente quella coppia.

Il livello di cautela giusto è quello che applicheresti a una cronologia completa delle transazioni, non quello che applicheresti a una password. Un codice di catena non può firmare, quindi da solo non ti fa perdere nulla. Nelle mani di una società di analisi, di un backup nel cloud o di chiunque abbia incollato una xpub in una richiesta al supporto, espone ogni pagamento di quel ramo, passato e futuro, e dopo non c'è modo di revocare l'accesso.

Codice di catena vs chiave privata

Un codice di catena e una chiave privata sono entrambi 32 byte dall'aspetto casuale, e solo uno dei due può spendere. La chiave privata produce firme. Il codice di catena non produce nulla se non altra derivazione, ed è proprio per questo che le persone lo sottovalutano: poiché non può muovere denaro, le chiavi pubbliche estese finiscono incollate in fogli di calcolo condivisi, segnalazioni di bug e app per smartphone da persone che non farebbero mai lo stesso con una chiave. Il risultato è una finestra permanente sulle loro finanze, non un furto, e i due tipi di danno meritano nomi diversi.

Da non confondere con

Domande frequenti

Un codice di catena è segreto?

Non è un segreto che consente di spendere, ma è un segreto che riguarda la privacy. Chiunque detenga il tuo codice di catena e la chiave pubblica corrispondente può derivare ogni indirizzo di quel ramo e leggere l'intera cronologia, quindi tratta una xpub esportata come un dato finanziario privato.

Mi capita mai di dover annotare il mio codice di catena?

No. La tua frase di recupero rigenera la chiave principale e ogni codice di catena sottostante, quindi fare il backup delle parole copre l'intero albero. I codici di catena compaiono solo quando esporti una chiave estesa o lavori con codice di derivazione grezzo.

Termini correlati

Altro in Indirizzi e chiavi

Leggi questa pagina in inglese