Vai al contenuto
buybitcoinsmart

Glossario / Indirizzi e chiavi

Chiave pubblica compressa

Che cos'è una chiave pubblica compressa?
Una chiave pubblica compressa memorizza solo la coordinata x di un punto della curva più un indicatore di parità di un byte, facendo entrare una chiave pubblica completa in 33 byte invece di 65.

Ogni punto di secp256k1 ha due possibili valori di y per una data x, quindi registrare quale dei due è costa un solo byte invece di 32. I wallet generano chiavi compresse per impostazione predefinita da Bitcoin Core 0.6, rilasciato a marzo 2012, e i byte risparmiati si tolgono dalla dimensione di ogni input che spenderai in seguito. Spendere meno è l'intero vantaggio, e il formato è invisibile nell'uso quotidiano.

Come funziona

La compressione delle chiavi pubbliche è algebra, non compressione dei dati. L'equazione della curva, y al quadrato uguale a x al cubo più 7, ha al massimo due soluzioni per y in una data x, e quelle due soluzioni sono sempre un numero pari e un numero dispari. Memorizzare x più un bit di informazione su quale soluzione si applica è quindi sufficiente perché chiunque recuperi il punto con esattezza, risolvendo l'equazione e scegliendo la radice con la parità giusta.

La codifica mette quel bit nel byte iniziale. Un prefisso 0x02 indica che il valore di y è pari, 0x03 che è dispari, e i 32 byte che seguono sono la coordinata x. Lunghezza totale: 33 byte. Il vecchio formato si segnala con un prefisso 0x04 e porta entrambe le coordinate per intero, per 65 byte. Qualsiasi software che legga una chiave può distinguere i due formati dal solo primo byte, ed è così che i wallet sono rimasti compatibili durante la transizione.

I 32 byte risparmiati finiscono in punti diversi a seconda del tipo di output. In un input legacy la chiave sta nello script di sblocco ed è conteggiata a peso pieno, quindi 32 byte costano 32 vbyte, circa 640 satoshi con una commissione di 20 sat/vB. In un input SegWit la chiave sta nel witness, che è scontato di quattro volte, quindi gli stessi 32 byte costano 8 vbyte. Nessuna delle due cifre è clamorosa da sola, ed entrambe si ripetono su ogni input di ogni transazione che firmerai.

Dove lo vedi

Le chiavi compresse si incontrano nei dati grezzi delle transazioni. Apri una qualsiasi spesa recente in un block explorer e la chiave pubblica nel witness o nello script inizierà con 02 o 03, seguita da 64 caratteri esadecimali. Le chiavi che iniziano con 04 sono un retaggio del passato.

Il formato decide anche l'aspetto di un indirizzo. L'hashing di una chiave compressa dà un risultato diverso dall'hashing della versione non compressa della stessa chiave, quindi una sola chiave privata può corrispondere a due indirizzi legacy del tutto separati, con saldi separati. I wallet lo gestiscono per convenzione e non per ingegno: tutto ciò che deriva da BIP-32, che copre ogni wallet con frase di recupero di uso comune, è compresso dall'inizio alla fine, e una stringa in Wallet Import Format che inizia con K o L annuncia che la chiave appartiene al lato compresso di quella biforcazione.

SegWit ha eliminato l'ambiguità per sempre. BIP-143 vieta le chiavi non compresse nei programmi witness di versione 0, quindi ogni indirizzo bc1q è compresso per regola, e Taproot è andato oltre definendo chiavi x-only da 32 byte che eliminano del tutto il byte di parità.

Chiave pubblica compressa vs chiave pubblica non compressa

La forma compressa e quella non compressa codificano lo stesso punto, e la differenza sta solo in ciò che va scritto. La forma compressa conserva x e ricava y quando serve, il che costa qualche microsecondo di aritmetica e risparmia 32 byte per sempre. La forma non compressa memorizza y direttamente, il che faceva risparmiare calcolo sull'hardware del 2009 e oggi non offre nulla. Poiché le due stringhe di byte differiscono, il loro hash produce indirizzi diversi, ed è quella discrepanza, più che il numero di byte, a lasciare di tanto in tanto bloccati fondi di wallet molto vecchi.

Da non confondere con

Domande frequenti

Usare chiavi compresse rende più sicuri i miei bitcoin?

No, la sicurezza è identica perché entrambi i formati descrivono lo stesso punto della curva. Il vantaggio è la dimensione: 33 byte invece di 65 su ogni input che spendi, il che riduce la commissione per la stessa transazione.

Devo fare qualcosa per usare chiavi compresse?

No. Ogni wallet basato su una frase di recupero le usa dall'inizio alla fine, e gli indirizzi SegWit nativi le richiedono. Il formato diventa una questione solo quando importi una chiave creata prima del 2012.

Termini correlati

Altro in Indirizzi e chiavi

Leggi questa pagina in inglese