Chiave pubblica e privata: cosa sono e come funzionano?
12 gennaio, 2023
8 min
Ti sei mai chiest* perché si chiamano “criptovalute”? L’origine di questo termine si rifà alla crittografia, una branca della matematica utile per proteggere i dati online e rendere i network più sicuri. In particolare, la crittografia asimmetrica rende possibile lo scambio di crypto, grazie ad una chiave pubblica e una chiave privata: scopriamo insieme cosa sono, quali sono le differenze e come si utilizzano per eseguire le transazioni su blockchain.
Chiave pubblica e privata: la crittografia asimmetrica
La storia della crittografia ci insegna che, in origine, questa scienza veniva utilizzata per cifrare e decodificare importanti informazioni militari e governative.
Chi possiede criptovalute, al contrario, sfrutta la crittografia per la custodia dei propri fondi, ossia per dimostrarne la proprietà esclusiva. In particolare, la tecnologia blockchain impiega la crittografia asimmetrica o a chiave pubblica: ad ogni utente del rispettivo network vengono assegnate una chiave pubblica e una chiave privata, una coppia di codici crittografici legati da una logica matematica.
Definizione
In generale, la crittografia è detta asimmetrica quando ciò che viene codificato attraverso la chiave privata può essere decifrato dalla sola chiave pubblica corrispondente, e viceversa. Al contrario, la crittografia simmetrica usa una sola chiave per cifrare e decodificare.
Più precisamente, le chiavi crittografiche sono associate ad un wallet di criptovalute: uno strumento simile ad un “portafoglio digitale” che consente di amministrare, inviare, ricevere e custodire le proprie criptovalute; è proprio in queste operazioni che si vede la differenza tra chiave pubblica e privata.
Quest’ultima permette di usare le criptovalute custodite dal wallet, firmando le transazioni così da approvarle. La chiave privata è un codice simile ad un PIN o ad una password, solo il proprietario del wallet dovrebbe conoscerla.
La chiave pubblica, al contrario, può essere condivisa con tutti, in modo tale da verificare l’autenticità delle firme associate alla transazione. La chiave pubblica può anche essere utilizzata per ricevere criptovalute, in alternativa all’indirizzo wallet.
La relazione tra chiave pubblica e chiave privata è unidirezionale, in quanto un algoritmo genera la prima dalla seconda e l’operazione non può essere invertita. Collochiamo questo meccanismo, fondamentale per la sicurezza delle criptovalute, nel processo di creazione di un wallet: ricostruiamo i passaggi dal principio.
Chiave privata: a che cosa serve?
A qualsiasi wallet, innanzitutto, corrisponde una seed phrase, conosciuta anche come recovery phrase. Si tratta di una sequenza di 12 o 24 parole, generate casualmente da un algoritmo, che consente all’utente di accedere al proprio portafoglio o di recuperarlo su un altro dispositivo. Puoi considerare la seed phrase come una sorta di “master password”, da cui derivano tutte le chiavi pubbliche e private associate al wallet.
La seed phrase, attraverso una funzione di hash, viene poi trasformata in una sequenza alfanumerica che corrisponde alla chiave privata del wallet.
Questa stringa di lettere e numeri non ha più senso compiuto ed è matematicamente impossibile “invertirla” per risalire alla seed phrase; praticamente, la chiave privata si presenta in una forma simile a questa:
534EL5ntg8oh34o5KE34534jnl3qtWqF45o3O4JK34h4thapfnqc8tgpnap
Pensiamo alla chiave privata come un PIN personale, o la propria firma, attraverso la quale è possibile gestire i fondi che si possiedono. In particolare, questo codice personale è necessario per avviare transazioni e disporre qualsiasi altra operazione relativa alle proprie crypto. Solitamente, in un wallet, ad ogni network blockchain è associata una chiave privata diversa, derivante però dalla stessa seed phrase. Ad esempio, per Bitcoin ed Ethereum avremo chiavi ed indirizzi distinti.
Per custodire con cura la propria chiave privata, è necessario adottare i principi base del password management: chiunque la conosca potrebbe usare le tue criptovalute! Alcuni wallet, detti non custodial, prevedono che sia l’utente stesso a memorizzare la propria seed phrase e, dunque, le relative chiavi private; Metamask, il principale wallet crypto per Ethereum, ne è un esempio. In alternativa, se vuoi semplificare la gestione delle tue chiavi, potresti affidare la conservazione dei codici a terze parti esperte, usando wallet custodial come quello integrato nell’exchange di Young Platform. In ogni caso, scegli la soluzione wallet migliore per te, adatta alla tua esperienza e agli usi che vorrai farne.
Abbiamo detto che la chiave privata è utilizzata per firmare le transazioni, così che chiunque possa verificare che ad avviare l’operazione sia stato il legittimo proprietario di quei fondi. Tuttavia, per riconoscere l’autenticità delle firme e per indicare il destinatario delle criptovalute, servono altri codici crittografici: approfondiamo dunque cos’è una chiave pubblica e un indirizzo wallet.
Come si calcola la chiave pubblica?
Partendo dalla chiave privata, è possibile ricavare la chiave pubblica associata allo stesso indirizzo wallet: risulterà da una particolare funzione geometrica, detta ECC (Elliptic Curve Cryptography). In pratica, la chiave pubblica (p) è legata alla privata (k) secondo la formula P=k*G, dove G è una costante. Sul piano cartesiano, le due chiavi sono le coordinate di un punto che si trova sulla curva ECC.
In parole più semplici, data la chiave privata è possibile trovare la chiave pubblica, ma è impossibile il contrario, perché richiederebbe calcoli troppo complessi, anche per i computer quantistici.
Dunque, la chiave pubblica è un altro codice alfanumerico, simile alla chiave privata, ma che non rivela informazioni su quest’ultima. Per questo motivo, la prima può essere condivisa senza rischi: permette agli utenti di ricevere criptovalute e di verificare l’autenticità delle transazioni.
Ogni volta che si effettua un’operazione su blockchain, infatti, il network valuta se la chiave pubblica del mittente sia coerente alla firma digitale associata alla transazione, secondo un meccanismo che spiegheremo in seguito. Inoltre, dalla chiave pubblica deriva l’indirizzo wallet: una stringa composta da 42 caratteri, indicata dal destinatario per ricevere criptovalute. In poche parole, l’indirizzo wallet funziona come l’IBAN del nostro conto corrente.
Curiosità
L’indirizzo wallet è un hash della chiave pubblica. Bitcoin, ad esempio, usa la funzione di hash SHA-256 per generare gli indirizzi.
Ora che sappiamo cosa sono la chiave pubblica e la chiave privata, possiamo effettivamente capire come si usano, simulando un invio di criptovalute.
Le firme digitali: verificare una transazione su blockchain
Supponiamo che Andrea voglia inviare 1 BTC a Beatrice:
- Andrea, attraverso il suo wallet, comunica alla blockchain di voler inviare 1 BTC all’indirizzo di Beatrice, generando un messaggio con le informazioni necessarie;
- Queste indicazioni vengono “riassunte” da una funzione di hash in un codice più compatto;
- Andrea cifra l’hash con la sua chiave privata, generando così una firma digitale. In questo modo approva la transazione;
- La firma digitale viene allegata alle informazioni di partenza, non ancora tradotte in hash, ed insieme vengono inviate al network di validatori.
I nodi di Bitcoin, prima di comunicare le informazioni ai miner, devono verificare la validità della transazione, procedendo in questo modo:
- Inseriscono le informazioni, relative alla transazione, nella stessa funzione di hash usata da Andrea, dunque ricevendo come output un hash;
- Usando la chiave pubblica associata al wallet di Andrea, decifrano la firma digitale della transazione, ricavando come output un’altra stringa hash. Ricordiamo che ogni chiave pubblica può decifrare la rispettiva privata e viceversa.
- Verificano che i due hash corrispondano: se uguali, si avrà la prova inconfutabile che sia stato effettivamente Andrea ad inviare le criptovalute a Beatrice, ovvero il legittimo proprietario dei fondi. Questo perché, se le informazioni non sono cambiate, la funzione di hash restituirà sempre la medesima combinazione, ovvero l’hash da cui è stata creata anche la firma digitale.
Nell’esempio che abbiamo appena riportato, il wallet necessita unicamente della firma di Andrea per spostare i fondi; tuttavia, esistono wallet che richiedono più firme digitali per approvare una transazione. Questi, in poche parole, sono controllati da più comproprietari, ciascuno associato ad una chiave privata: si tratta dei wallet multisig.
Ora che abbiamo scoperto cosa sono la chiave pubblica e la chiave privata, potrai utilizzare i tuoi wallet con maggiore consapevolezza e quindi sicurezza.