Chiave pubblica e chiave privata: cosa sono e a cosa servono su blockchain?

Chiave pubblica e chiave privata: cosa sono e a cosa servono su blockchain?

È giunto il momento di affrontare un tema importantissimo che riguarda la tecnologia blockchain e di cui sicuramente avrai sentito parlare se ti sei interessato al tema: il concetto di chiave pubblica e chiave privata. In questo post affrontiamo insieme questo importante pilastro alla base della tecnologia blockchain e vediamo insieme di cosa si tratta.

Ogni transazione che avviene su blockchain sfrutta infatti questo meccanismo. 

Ti sembra un argomento complesso? Non ti preoccupare, come abbiamo sempre fatto nel nostro blog, affronteremo l’argomento in modo semplice e divertente. Cominciamo 🙂

INDICE ARGOMENTI

1) Che cos'è la crittografia

La crittografia è la disciplina che ha come scopo quello di studiare le tecniche per “nascondere” un’informazione e comunicarla ad altri trasmettendola su un canale non sicuro, ovvero un canale dove, oltre al destinatario dell’informazione, ci sono anche altri possibili attori in ascolto, a cui però non è indirizzato il messaggio. 

Se per esempio voglio dare un’informazione riservata e segreta al mio amico Davide, ma ci troviamo in un bar affollato, è sconsigliato farlo ad alta voce in quel luogo e in quel momento. Il canale infatti non è sicuro perché altre persone all’interno del locale potrebbero ascoltare il mio messaggio segreto.

Come posso dunque recapitare il mio messaggio a Davide? 

Ho solo due soluzioni: cambiare canale, e quindi aspettare di uscire dal locale in cui ci troviamo per poter dare al mio amico l’informazione segreta, oppure rendere l’informazione comprensibile soltanto al mio amico Davide, in modo che nonostante tutti ricevano lo stesso messaggio, solo lui sarà in grado di capirlo ed interpretarlo.

Ti viene in mente qualche modo?

Per esempio potrei usare una lingua che solo io e Davide conosciamo in quel locale. In questo modo tutti potrebbero sentire ciò che diciamo ma nessuno riuscirebbe a capire il messaggio. Semplice ma efficace.

Utilizzare una lingua straniera è dunque l’unica soluzione possibile? No, proviamo ad immaginare una soluzione diversa: potrei per esempio decidere di trasmettere il mio messaggio scrivendo le parole o le sillabe che compongono una parola al contrario, ovvero invertire l’ordine delle sillabe che compongono il messaggio.

Un procedimento come ad esempio quello appena descritto rappresenta un possibile algoritmo di cifratura. Quindi se per esempio dovessi dare al mio amico questa importante notizia:
“ci vediamo domani alle 12 in Piazza Maggiore”

utilizzando l’algoritmo di cifratura delle sillabe al contrario dovrei dire: 

“ci modiave nimado leal 12 in zapiaz regiomag”

In questo modo sono abbastanza sicuro che difficilmente altre persone all’interno del locale riusciranno a capire il mio messaggio. Almeno per la prima volta, perché in realtà, se una settimana dopo l’invio del messaggio qualcuno viene a sapere che ci siamo incontrati in Piazza Maggiore, la prossima volta che la stessa persona sente ‘zapiaz regiomag’, anche se non capisce cosa vuol dire, potrebbe immaginare dove ci incontreremo.

Questo succede perché l’algoritmo di cifratura utilizzato è piuttosto semplice. Quindi potrei provare a complicare un po’ le cose, utilizzando ad esempio sia un algoritmo di cifratura sia una chiave segreta, ovvero un parametro configurabile per rendere più casuali e meno omogenei gli output, ovvero per inserire artificialmente del ‘rumore’ nei messaggi cifrati. 

La crittografia si basa spesso sul concetto di chiave segreta, utilizzata ad esempio all’interno dei sistemi che utilizziamo tutti i giorni, a volte inconsapevolmente, per la cifratura di dati o messaggi. 

Questa invenzione non è però dei nostri tempi. Pensa che già Giulio Cesare durante le sue guerre inviava dei dispacci ai suoi militari utilizzando un algoritmo crittografico e una chiave segreta in modo tale che i nemici non capissero il contenuto del messaggio. Il suo è un sistema divenuto famoso proprio col nome di Cifrario di Cesare. In questo meccanismo si utilizzavano sostituzioni tra le diverse lettere dell’alfabeto, ad esempio facendo coincidere la prima lettera dell’alfabeto con una lettera diversa da quella reale. Prendendo come esempio il Cifrario di Cesare con chiave 3, stiamo dicendo che ogni lettera deve essere spostata di 3 unità. Quindi in questo schema la lettera D corrisponderà alla lettera A. La C corrisponderà alla Z, e così via. Proviamo a cifrare la parola ‘CIAO’: invece della C dovremmo scrivere F, al posto della I la N, al posto della A la D, e infine al posto della O la R. Invece di scrivere ‘CIAO’, dunque, dovremo trasmettere il messaggio ‘FNDR’, comprensibile soltanto a chi sa che stiamo usando il Cifrario di Cesare, e che la chiave usata è il numero 3.

Per poter utilizzare questa soluzione nella comunicazione con il mio amico Davide, lui deve essere già a conoscenza sia dell’algoritmo di cifratura sia della chiave segreta, altrimenti non potrebbe decifrare il mio messaggio. Purtroppo io non potrei utilizzare il canale insicuro per spiegargli come funziona il Cifrario di Cesare e per comunicargli la chiave segreta, altrimenti anche tutte le altre persone in ascolto sarebbero poi in grado di leggere e capire i miei messaggi diretti soltanto a lui.

È molto importante chiarire questo punto: l’algoritmo di cifratura è il modo, il procedimento con cui voglio nascondere il messaggio, mentre la chiave segreta è un’informazione che viene utilizzata all’interno dell’algoritmo di cifratura, per diversi scopi:

  • nel Cifrario di Cesare, il suo scopo principale è quello di rendere configurabile/parametrizzabile l’algoritmo di cifratura, in modo da non ottenere lo stesso risultato ogni volta che cifro la stessa parola. Nel caso precedente, ad esempio, vedendo che tutti o comunque la maggior parte dei messaggi inviati cominciano o terminano con ‘FNDR’, qualcuno potrebbe intuire che questa parola corrisponde al saluto ‘CIAO’. Usando chiavi diverse, invece, otterrei codifiche diverse che permetterebbero di aumentare la casualità dei messaggi cifrati: usando la chiave 4, ad esempio, la parola ‘CIAO’ verrebbe codificata con la parola ‘GMES’, del tutto diversa da ‘FNDR’ e non facilmente riconducibile ad essa;
  • in altri casi, invece, la chiave rappresenta quell’informazione segreta che rende impossibile la ricostruzione dei messaggi anche a chi è perfettamente a conoscenza dell’algoritmo di cifratura, se non a conoscenza anche della chiave segreta. Nel cifrario di Cesare possiamo dire che l’algoritmo di cifratura è rappresentato dal fatto di far coincidere la prima lettera dell’alfabeto con una lettera diversa e di conseguenza assegnare una nuova identità a tutte le altre lettere. La chiave segreta ci indica di quante lettere vogliamo scalare per assegnare un nuovo valore alla lettera da cifrare. Risulta quindi evidente che le chiavi che possono essere utilizzate sono molto poche: una volta raggiunto un numero pari al numero di lettere dell’alfabeto (26 nel caso dell’alfabeto latino), infatti, la codifica diventa banale, ovvero ‘CIAO’ corrisponde a ‘CIAO’, perché abbiamo fatto tutto il giro delle lettere. Dal quel valore in poi, le chiavi si ripetono all’infinito: ad esempio la chiave 29 (ovvero 26 + 3) risulta equivalente alla chiave 3, trasformando nuovamente la parola ‘CIAO’ in ‘FNDR’. Un numero di chiavi pari a 25 (escludiamo la 26esima chiave perché porta ad una codifica banale) non è sufficiente per rendere l’informazione associata alla chiave sufficientemente difficile da indovinare, perché chiunque potrebbe facilmente scoprire la chiave segreta con un numero esiguo di tentativi, e quindi in un tempo estremamente limitato.

Il Cifrario di Cesare è quindi un sistema in cui la conoscenza dell’algoritmo di cifratura coincide praticamente con la conoscenza della chiave (che può infatti essere scoperta con uno sforzo davvero ridotto). In questo senso, quindi, il Cifrario di Cesare è molto simile all’algoritmo usato nell’esempio in cui voglio trasmettere il mio messaggio parlando al contrario, ovvero un algoritmo che deve restare segreto, pena il decadimento della segretezza dei messaggi trasmessi.

Cosa significa questo? Una volta che scopri che sto parlando al contrario, il meccanismo è tutto da buttare, non posso più utilizzarlo per altri messaggi. Lo stesso concetto vale per il Cifrario di Cesare, ovvero se le persone in ascolto conoscono il Cifrario di Cesare dovranno effettuare un massimo di 25 tentativi per riuscire a decifrare il messaggio, e quindi questo meccanismo di cifratura funziona solo se nessun ascoltatore indesiderato è a conoscenza dell’algoritmo utilizzato. 

Quindi ricapitolando: se per cifrare un messaggio utilizziamo soltanto un algoritmo di cifratura, se qualcuno scopre l’algoritmo di cifratura, il tuo messaggio sarà alla mercé di tutti e tu dovrai buttare l’algoritmo di cifratura ed inventarne uno nuovo in quanto l’algoritmo precedente non è più sicuro. Diverso invece è il caso in cui, oltre all’algoritmo di cifratura, introduci anche una chiave segreta. A questo punto l’algoritmo di cifratura può anche essere reso noto (anzi, di solito è buona norma che sia proprio così). L’importante è che nessuno, al di fuori di chi vuoi tu, abbia la chiave segreta. Cosa succede se qualcuno scopre la chiave segreta? Molto semplicemente puoi creare una nuova chiave segreta senza dover cestinare l’algoritmo di cifratura. Basta cambiare la chiave.

chiavi-private

2) La crittografia simmetrica o a chiave privata

Tecnicamente, il meccanismo descritto nell’esempio precedente è ciò che viene definito uno schema di cifratura simmetrica. Il concetto di crittografia simmetrica è molto semplice: dato un messaggio da trasmettere posso applicare un algoritmo di cifratura ed una chiave segreta al messaggio stesso per cifrarlo, e poi un algoritmo di decifratura con la stessa chiave segreta per decifrarlo.

La chiave segreta non cambia e rimane sempre la stessa sia per cifrare sia per decifrare il messaggio, ovvero sia per nascondere il vero contenuto del messaggio sia per rivelarlo e leggerlo correttamente, esattamente come descritto qui sopra nel Cifrario di Cesare. In altre parole, riprendendo l’esempio del Cifrario di Cesare, data la chiave segreta X, l’algoritmo di cifratura sposterà le lettere avanti di X posizioni, mentre quello di decifratura sposterà indietro le lettere sempre di X posizioni, in modo simmetrico.

Quali sono gli svantaggi e i vantaggi di questo sistema? 

Il primo svantaggio è che, come abbiamo appena visto, il mio amico Davide deve conoscere la chiave segreta per poter decifrare il mio enigmatico messaggio.

Ovviamente devo concordare con Davide la chiave segreta prima di entrare nel locale, altrimenti il mio amico avrebbe serie difficoltà a capire il mio messaggio, non essendo in possesso della chiave segreta per decifrarlo. Se non condivido a priori la chiave segreta con Davide, non posso pensare di portare a termine questo passaggio all’interno del locale perché rischierei di compromettere la sicurezza dell’intero messaggio.

Il vantaggio principale della crittografia simmetrica invece è che basta poco sforzo per poter cifrare un messaggio e trasmetterlo all’interno di un canale non sicuro.

La crittografia simmetrica viene anche definita crittografia a chiave privata in quanto basta essere a conoscenza della chiave segreta (o privata) per poter cifrare e decifrare i messaggi.

Da cosa dipende la sicurezza di un sistema crittografico?

Un principio fondamentale della crittografia è rappresentato dal fatto che la sicurezza di un sistema non deve dipendere dalla segretezza dell’algoritmo utilizzato, ovvero delle regole del gioco, ma dalla chiave segreta che viene utilizzata.

In campo informatico la chiave segreta è fondamentalmente un numero (molto grande), la cui dimensione viene misurata in numero di bit. Più è lunga la chiave (ovvero maggiore è il numero di bit) e più sarà difficile infrangere il messaggio cifrato. Per esempio una chiave da 32bit significa che per decifrare il messaggio si dovrebbe ricercare una soluzione tra 2 elevato alla 32 possibili soluzioni.

Giusto per dare un’idea di che numero rappresenta 2 elevato alla 32, considera che nel mondo siamo meno di 8 miliardi di persone, un numero che corrisponde a circa 2 elevato alla 33.

3) La crittografia asimmetrica

A questo punto potresti chiederti: “ma esiste un modo per comunicare in modo sicuro col mio amico Davide anche senza aver condiviso in precedenza una chiave segreta con lui? Altrimenti mi ritroverei a poter usare il sistema visto in precedenza solo con persone che conosco già e con le quali mi sono già messo d’accordo … come farei ad usarlo, ad esempio, su internet?”. Esistono vari metodi (es: algoritmo di Diffie Hellman), ma quello che ti propongo ora è quello della crittografia asimmetrica. Prova a seguirmi.

Mentre ero al bar col mio amico Davide, mi è venuta questa idea. Il mio amico aveva con sé il lucchetto per la catena della sua bicicletta che aveva appena portato a riparare. Quindi ho preso il lucchetto ed una scatola. Ho scritto il mio messaggio su un biglietto: “ci vediamo domani alle 12 in Piazza Maggiore”. Poi ho messo il biglietto nella scatola e l’ho chiusa con il lucchetto di Davide. Chi è l’unico che può aprire il lucchetto della scatola? Solo chi detiene la chiave del lucchetto, in questo caso l’unico che può aprire il lucchetto è Davide.

Quindi immagina che tutti nel locale mi abbiano visto compiere questa operazione e chiudere la scatola con un lucchetto. Paradossalmente la scatola contenente il messaggio potrebbe anche aver fatto il giro di tutto il locale passando di mano in mano tra clienti e baristi.

Tutti potrebbero aver visto scatola e lucchetto, anche se nessuno (tranne Davide, ovviamente 😜 ) può avere accesso al contenuto della scatola. L’unico che ha potuto aprire la scatola con la chiave del lucchetto è stato il mio amico Davide. In questo modo sono riuscito a trasmettere un messaggio in modo sicuro attraverso un canale insicuro, utilizzando una coppia di chiavi collegate tra loro: una pubblica (il lucchetto) ed una privata (la chiave che apre il lucchetto). 

A differenza della crittografia simmetrica, dove cifriamo e decifriamo con la stessa chiave, nella crittografia asimmetrica con una chiave cifriamo e con un’altra decifriamo. La prima chiave, ovvero il lucchetto, è una chiave pubblica, visibile a tutti. Chiunque nel locale avesse preso il lucchetto aperto di Davide avrebbe potuto scrivere un messaggio e chiuderlo in una scatola. Ma anche in questo caso solo Davide avrebbe potuto aprire il lucchetto perché sarebbe stato la sola persona in possesso della chiave privata per decifrare il messaggio. La seconda chiave è appunto la chiave privata e serve per aprire il lucchetto. Questa chiave appartiene solo al proprietario del lucchetto. Ed il proprietario del lucchetto deve stare bene attento a conservarla per evitare che cada nelle mani di qualche malintenzionato che, oltre a leggere il messaggio segreto, potrebbe anche rubargli la bicicletta!

Per capire meglio come funziona questo meccanismo, prova ad immaginare che Davide crei 100 copie identiche dello stesso lucchetto e le distribuisca all’interno del locale. Ora tutti potrebbero scrivergli e mettere il messaggio in una scatola chiusa con uno dei suoi lucchetti. Ovviamente solo Davide sarebbe in grado di leggere i 100 messaggi diversi che giungono a lui perché sarebbe l’unico a possedere la chiave per aprire i lucchetti.

Abbiamo visto in questo esempio come grazie alla crittografia asimmetrica il messaggio cifrato può viaggiare attraverso un canale insicuro senza che nessuno (tranne chi è in possesso della chiave del lucchetto) possa venirne a conoscenza, e senza la necessità di concordare insieme una chiave segreta per la cifratura. È sufficiente che qualcuno crei in autonomia una coppia di chiavi (pubblica e privata, lucchetto e chiave per aprirlo) e poi distribuisca (ovvero comunichi pubblicamente) la sua chiave pubblica (ovvero distribuisca i lucchetti), in modo tale che chiunque possa utilizzare la chiave pubblica (il lucchetto) per cifrare messaggi che soltanto il possessore della chiave privata sarà in grado di leggere ed interpretare.

Ma c’è di più: questo meccanismo può essere usato anche per implementare qualcosa di cui avrai sicuramente sentito parlare molto spesso: la firma digitale. Ma come è possibile? E come si può usare la crittografia asimmetrica per firmare una transazione su blockchain?

Vediamo insieme come.

chiave

4) Firma (d'amore) digitale

Proviamo ad immaginare di voler inviare un messaggio d’amore. Voglio inviare un messaggio d’amore ad una ragazza e voglio poterlo firmare in modo tale che lei, leggendolo, possa essere sicura che sono stato davvero io a scriverlo.

Come posso fare a compiere questa operazione utilizzando tutti i pezzi del puzzle che abbiamo visto fino a questo momento? A questo punto tieniti forte e allaccia le cinture, perché hai la possibilità di sperimentare tu stesso la magia di questo meccanismo.

Per prendere in considerazione un esempio reale, partiamo da un algoritmo di hashing che abbiamo visto in uno dei precedenti post: lo SHA256 (perché l’abbiamo analizzato in questo post. Se non conosci lo SHA256 fermati un secondo e dai un’occhiata a questo post perché grazie a questo tassello puoi comprendere a pieno l’esempio che stiamo per fare). Lo SHA256 è una funzione di HASH, ovvero un algoritmo che ci permette di associare unidirezionalmente una stringa («input») ad un’altra («output» o «hash»). Come abbiamo detto durante il corso di questo post, la segretezza del messaggio non deve dipendere dall’algoritmo ma dalla chiave. Ed infatti lo SHA256 è un algoritmo noto. Cosa potrei fare avendo a disposizione questo algoritmo? 

Potrei prendere il mio messaggio d’amore e calcolarne l’HASH. Immaginiamo di voler scrivere alla bella ragazza oggetto del nostro amore questo messaggio: 

Ti amo Anna! by Andrea 

(viva la fantasia!) Anzi, facciamolo proprio. Seguendo questo link
https://andersbrownworth.com/blockchain/hash   possiamo trovare lo SHA256 in azione e possiamo scrivere nella parte dedicata all’input:

Ti amo Anna! by Andrea

Va scritto esattamente così come riportato in questo testo e senza spazi vuoti all’inizio o in fondo alla frase.

Come puoi vedere l’algoritmo restituisce un output di 64 caratteri: 

ba63aaba09bc237b0799c2d512249a9f4d0bee35a7d8aa66a8a9897a9a1dd386

A questo punto posso firmare l’HASH appena ottenuto con la mia chiave privata, apponendo quindi la mia firma digitale al messaggio. In questo modo lei può essere sicura che io l’ho firmato e che non si tratta di uno scherzo.

Quindi prendo l’HASH del messaggio d’amore e lo cifro con la mia chiave privata, ottenendo un nuovo codice alfanumerico che rappresenta l’HASH del messaggio “Ti amo Anna! by Andrea” (ottenuto in precedenza) firmato con la mia chiave segreta. Attenzione attenzione! Abbiamo la possibilità di farlo insieme grazie a questo sito:
https://www.devglan.com/online-tools/rsa-encryption-decryption

Andando sul sito e cliccando sul bottone “Generate RSA Key Pair” il sistema genera una chiave pubblica ed una chiave privata. La chiave privata, come intuibile, la tengo per me e la nascondo, non devo farla vedere a nessuno. La chiave pubblica invece va diffusa: la pubblico sul mio sito internet e la stampo sui miei biglietti da visita.

A questo punto copio la mia chiave privata e la uso per firmare l’HASH. Facciamolo: copio dunque l’HASH ottenuto in precedenza

ba63aaba09bc237b0799c2d512249a9f4d0bee35a7d8aa66a8a9897a9a1dd386

e lo incollo nel box “Enter plain text to encrypt”. Ora lo devo firmare con la mia chiave privata. Seleziono il checkbox “RSA Key Type” su “Private Key” e copio nel box “Enter Public/Private key” la chiave privata che il sistema ci ha fornito. Clicco su “Encrypt” ed ottengo un output alfanumerico che rappresenta il messaggio firmato digitalmente con la mia chiave privata. 

Ora devo recapitare il messaggio alla bella ragazza. Come faccio? Immaginiamo che sia un tipo un po’ teatrale. Scrivo su un muro a caratteri cubitali il mio messaggio: 

Ti amo Anna! by Andrea.

Benissimo! Abbiamo già fatto un bel passo in avanti per conquistare il cuore di Anna. Ma di quale Anna e di quale Andrea si tratta? Come facciamo a capirlo così con una semplice scritta? Come facciamo a dare ad Anna la sicurezza che sia stato proprio io (Andrea) a scrivere quel messaggio?

Subito sotto il messaggio sul muro, riporto anche l’HASH del messaggio cifrato con la mia chiave segreta, ovvero copio Encrypted Output (base64), sul muro:  

MwF+rbywa6qd54OByBmdBkKnZs+qQU37nqIFLqDgeDaQgSTis/HN4VlpoYEjJonPELQAf7wTTOLbOj2TSc1i3i5obPLDAijo/dT6QF6/WF0dVJ2inv3++ACCNpXT0Tz0lkumF85zPbJsTqSFHm/jM/Yk7t27j3dSvvsA9DMJrH4=

A questo punto abbiamo tutti gli ingredienti che ci servono: il messaggio e la firma digitale sul muro, la diffusione della nostra chiave pubblica (in questo caso l’abbiamo anche pubblicata sul nostro sito, eccola qui)

Ed ora colpo di scena e gran finale: porto la ragazza davanti al muro, la guardo negli occhi e le dico: “guarda cos’ho fatto per te! Sono stato io”. 

Lei guarda il muro e vede scritto: 

Ti amo Anna! by Andrea

firma: MwF+rbywa6qd54OByBmdBkKnZs+qQU37nqIFLqDgeDaQgSTis/HN4VlpoYEjJonPELQAf7wTTOLbOj2TSc1i3i5obPLDAijo/dT6QF6/WF0dVJ2inv3++ACCNpXT0Tz0lkumF85zPbJsTqSFHm/jM/Yk7t27j3dSvvsA9DMJrH4=

Poi le prendo la mano e le lascio uno dei biglietti da visita che abbiamo stampato in precedenza e che riporta la chiave pubblica (già pubblicata anche sul sito):

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6cMZgQhy4qeAEyDMe+RyZMWBEHRJaKhpnnYaBbVkjHSpED3ecV5b4OWldl+hcNQtry8tMSL5jzlyvR4VPkT7V5dtikxrKi6NPykQW7sYFCa+AWO5yY4yR27MhEQur+rITVS9Jt+jiQQqqkMK+Lxs7dNJuRZUJLTMu4Vj6Ik/P1QIDAQAB

Lei mi guarda negli occhi e mi dice: “Scemo! Perché hai imbrattato il muro”. 

Le spiego che si tratta di un esperimento scientifico e si tranquillizza. 

Ma come fa a capire che sono stato davvero io? Innanzitutto deve aver letto questo post. Se provate a fare la stessa cosa con una ragazza o con un ragazzo ma senza avergli fatto leggere prima questo post siete spacciati. Quindi, la ragazza legge questo post. 

Ed ora andiamo per gradi. Prima di tutto deve decifrare la firma digitale che ricordo essere stata firmata con una chiave segreta. Come si fa in crittografia asimmetrica a decifrare un messaggio cifrato con chiave segreta? Con una chiave pubblica. 

La mia chiave pubblica è scritta sul biglietto da visita e anche sul nostro sito, facile. 

La bella quindi va sul sito che stiamo usando per questo post: https://www.devglan.com/online-tools/rsa-encryption-decryption

si sposta nella colonna di destra e nel box “Enter Encrypted Text to Decrypt (Base64)” ci copia e incolla la mia firma digitale: MwF+rbywa6qd54OByBmdBkKnZs+qQU37nqIFLqDgeDaQgSTis/HN4VlpoYEjJonPELQAf7wTTOLbOj2TSc1i3i5obPLDAijo/dT6QF6/WF0dVJ2inv3++ACCNpXT0Tz0lkumF85zPbJsTqSFHm/jM/Yk7t27j3dSvvsA9DMJrH4=

Quindi nella checkbox RSA Key Type seleziona il campo Public Key questa volta, e nel box “Enter Public/Private Key” incolla la mia chiave pubblica diffusa in precedenza su biglietti da visita e riportata sul sito: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6cMZgQhy4qeAEyDMe+RyZMWBEHRJaKhpnnYaBbVkjHSpED3ecV5b4OWldl+hcNQtry8tMSL5jzlyvR4VPkT7V5dtikxrKi6NPykQW7sYFCa+AWO5yY4yR27MhEQur+rITVS9Jt+jiQQqqkMK+Lxs7dNJuRZUJLTMu4Vj6Ik/P1QIDAQAB, 

quindi clicca su “Decrypt”e cosa trova? Quello che dovrebbe essere l’HASH del messaggio “Ti amo Anna! by Andrea”, se fossi stato proprio io a firmarlo

ba63aaba09bc237b0799c2d512249a9f4d0bee35a7d8aa66a8a9897a9a1dd386

E cosa se ne fa di questo codice? 

Prende il messaggio “Ti amo Anna! by Andrea”, si sposta su questo sito:  https://andersbrownworth.com/blockchain/hash ed inserendo il testo “Ti amo Anna! by Andrea” (sempre senza apici e senza spazi vuoti prima e dopo il testo) calcola l’HASH e vede se l’HASH del messaggio coincide con il codice appena scoperto decifrando la firma digitale

Infatti, prendendo il testo “Ti amo Anna! by Andrea” e inserendolo nel campo input dello SHA256 trova:
ba63aaba09bc237b0799c2d512249a9f4d0bee35a7d8aa66a8a9897a9a1dd386

Fantastico! L’HASH del messaggio e la firma digitale decifrata coincidono! 

Questo significa che sono stato proprio io a firmare quel messaggio con la mia chiave privata, io e nessun’altro perchè se non fossi stato io a firmare con la mia chiave privata l’HASH del messaggio “Ti amo Anna! by Andrea” avremmo ottenuto una firma digitale non coerente.

Ma dato che i due HASH, calcolati nei due modi appena descritti, corrispondono, significa che il mittente è esattamente il possessore della chiave privata che fa coppia con la chiave pubblica che la bella ragazza ha utilizzato per la decifratura. Ovvero la bella ragazza, o chiunque riceva il messaggio firmato, può essere certo della provenienza del messaggio, proprio come accade quando ricevi un documento cartaceo firmato con la classica penna blu!

Ecco come possiamo rappresentare lo scenario appena descritto:

Flusso firma digitale

5) Così vengono firmate le transazioni digitali

Quello appena descritto è proprio il meccanismo che viene utilizzato per firmare le transazioni su blockchain.

Ogni volta che creiamo un wallet, vengono generate una coppia di chiavi, una pubblica ed una privata. La chiave pubblica corrisponde all’indirizzo del wallet (o, più precisamente, dalla chiave pubblica è possibile derivare l’indirizzo), ovvero il codice IBAN, la stringa alfanumerica che rappresenta il mio wallet e che devo comunicare agli altri se voglio ricevere delle criptovalute. Si tratta quindi di un dato che ha una validità ed una funzione pubblica.

La chiave privata è invece la chiave segreta che dovrei imparare a memoria o custodire in un posto sicurissimo e che mi serve per accedere al mio wallet al fine di disporre delle criptovalute o dei token che sono custoditi nel wallet stesso.

Benissimo, siamo arrivati in chiusura. Ora rimangono due cose da fare.

Prima di tutto dobbiamo andare a pulire il muro dalle scritte perché non è bello imbrattare i muri, neanche per scopi scientifici. 

In secondo luogo ti lasciamo con questo messaggio: 

Congratulazioni sei arrivato fino in fondo! 
La blockchain è meglio dei server centralizzati!
by KNOBS

Firma: q4SEnNSeT1D54Mw3qJaTtLOjhn0obDapNjyIcFMIYY2VcotqE0CtVIDdMXjka0yaVdtq6cbrTl6FVFqsxr+C8F6NBt3L4Jemhxrc0LiCzUPNwZPWgMWYcGLkns7QzFzv1a0pf3rJ/gvIX7dh0cUFvPCa1TefKGgcEKaZ+vi+P90= 

Come fai a capire che l’abbiamo scritto realmente noi?

Ti basterebbe avere la nostra chiave pubblica (che guarda caso è stata pubblicata a questo link) e ripercorrere il percorso descritto in questo post grazie all’aiuto un paio di siti:
– un sito che ti aiuti a giocare con chiave pubblica e chiave privata
https://www.devglan.com/online-tools/rsa-encryption-decryption

– un sito che ti aiuti a giocare con le funzioni di hash:
https://andersbrownworth.com/blockchain/hash

Buon divertimento! 🙂 

Share on facebook
Share on twitter

non perderti tutte le news, i nostri report gratuiti e gli aggiornamenti sui trend blockchain