Firma digitale
Approfondisci l'uso delle chiavi crittografiche e delle firme digitali
9min
Approfondisci l'uso delle chiavi crittografiche e delle firme digitali
9min
Episodi di Blockchain Revolution
Benvenuti ad una nuova lezione di questo corso in formato podcast dedicato alla tecnologia blockchain e al web3. Nella scorsa lezione abbiamo visto com'è possibile, grazie alla crittografia simmetrica, implementare un nuovo sistema di identità costituito fondamentalmente da una coppia di chiavi, una privata e una pubblica, e abbiamo visto com'è possibile utilizzarle per effettuare comunicazioni riservate anche su canali pubblici e come sfruttare questo meccanismo anche per l'autenticazione degli utenti. In particolare tutto ciò è reso possibile dal fatto che, cifrando un dato con la chiave pubblica di una determinata identità, soltanto chi è in possesso della chiave privata corrispondente può decifrare quel dato e quindi venirne a conoscenza. Ma c'è un'altra caratteristica, forse ancora più interessante, che emerge proprio quando utilizziamo la chiave privata per cifrare un dato e non la chiave pubblica.
Riprendiamo infatti l'esempio della scorsa lezione dove avevo una coppia di chiavi in cui la chiave pubblica era 23 e la chiave privata era 10 e proviamo a chiederci cosa succede se prendo un dato e lo cifro con 10, cioè la mia chiave privata. Beh, a quel punto io lo posso comunicare e per decifrarlo è necessaria la chiave pubblica corrispondente a 10, cioè il numero 23, che appunto è pubblico, è conosciuto da tutti. Allora vuol dire che chiunque può decifrare il dato e leggerlo correttamente.
E allora a cosa è servito cifrarlo con la mia chiave privata, cioè con 10? Qua c'è una cosa interessante. Se io prendo un dato cifrato e lo decifro con una certa chiave pubblica, ad esempio 23, quello di cui sono sicuro è che è stato cifrato con la chiave privata corrispondente. E chi può essere a conoscenza della chiave privata corrispondente ad una determinata chiave pubblica? Beh, soltanto il possessore dell'identità.
Ecco che abbiamo introdotto un sistema per il quale è possibile essere certi che un determinato dato sia stato scritto da una determinata identità, ovvero abbiamo introdotto un meccanismo di firma digitale. Ricapitolando, l'identità digitale rappresentata nel nostro esempio dalla chiave pubblica 23 è in grado da un lato di ricevere comunicazioni riservate. Basta prendere l'informazione e cifrarla con 23, soltanto il possessore dell'identità, cioè della chiave privata corrispondente a 23, potrà leggere quell'informazione.
D'altro canto, quest'identità è in grado anche di emettere documenti firmati, cioè io posso prendere un documento, firmarlo con la mia chiave privata, cioè 10, comunicare che è stato firmato dall'identità 23 e chiunque può utilizzare 23 per decifrare il documento firmato e verificare che effettivamente è stato firmato da quell'identità digitale. Questo nuovo modello di identità digitale risolve tra l'altro tutti i problemi che abbiamo visto e sottolineato nella precedente lezione, ovvero è possibile creare un'identità senza nessun attore terzo, quindi io posso prendere un numero, ovviamente non sarà 10 o 23, sarà un numero molto più grande, e da questo numero che è la mia chiave privata generare una chiave pubblica. Ecco che ho una coppia di chiavi, ho un'identità e non ho dovuto chiedere a nessuno, ho semplicemente utilizzato della matematica.
In più, nessuno può vietarmi di utilizzare quell'identità, perché l'unica cosa che devo fare per utilizzare quell'identità è cifrare o decifrare con la mia chiave pubblica e la mia chiave privata, e questo non mi può essere vietato. Inoltre, nessuno può impersonarmi, perché nessuno, a meno che non sia conoscenza della chiave privata, può firmare a mio nome o può decifrare comunicazioni destinate a me. Infine, non c'è un attore che ha conoscenza di quando io utilizzo la mia identità, o che mi può chiedere un pagamento, una fii per mantenerla attiva e valida, in quanto si basa tutto semplicemente sulla matematica, sulla crittografia.
Ma, oltre a aver superato e risolto tutti i principali limiti e problemi dell'attuale modello d'identità basato su username e password, abbiamo altri vantaggi dall'utilizzo di queste identità crittografiche? Assolutamente sì! Pensate, ad esempio, a come si potrebbe realizzare un sistema di scambio di valore con queste tecnologie. Io potrei avere una sorta di banca che accoglie i soldi da più persone e l'identifica tramite le loro credenziali crittografiche. Quindi immaginatevi che dieci persone versano in questa banca, mille euro ciascuna, e si identificano con la loro chiave pubblica.
Ad ogni versamento la banca potrebbe rispondere con un certificato in cui dimostra che quella determinata chiave pubblica, 1, 2, 3, 4, 5 e così via fino a dieci, ha versato mille euro. Questo documento, ovviamente per avere valore, verrà firmato dalla banca con la propria chiave privata. A questo punto la banca potrebbe anche dimenticarsi dei saldi dei suoi correntisti, sa soltanto di avere 10.000 euro e sa che ciascuno dei suoi correntisti ha un documento che a testa dimostra, certifica quanto possiede, quanto ha depositato.
E come avverrebbero a questo punto gli scambi di valore? Quindi cosa succederebbe se un correntista volesse trasferire parte dei suoi averi a un altro correntista, quindi facendo una sorta di bonifico? Beh, si collegherebbe alla banca, direbbe io sono 23, la banca andrebbe a verificare che lui è veramente 23 utilizzando la sfida, la challenge che abbiamo visto in precedenza e si accerterebbe che effettivamente di fronte ha una persona che detiene la chiave privata corrispondente alla chiave pubblica 23. A quel punto quella persona mostrerebbe il certificato firmato dalla banca stessa dove c'è scritto che 23 ha depositato e detiene 1000 euro all'interno di quel sistema. A quel punto questa persona potrebbe spendere fino a 1000 euro, ad esempio potrebbe inviare 100 euro a un altro correntista.
A quel punto la banca effettuerebbe lo scambio, quindi invierebbe all'altro correntista 100 euro e manderebbe, darebbe al correntista che ha la chiave pubblica 23 un certificato che attesta che lui non ha più 1000 euro ma ne ha 900, avendone appunto trasferiti 100. A questo punto se il correntista con la chiave pubblica 23 è onesto, la prossima volta che si collega far vedere il certificato dove c'è scritto che ha 900 euro, il certificato firmato dalla banca e così via. Potrà spenderne parte e poi conservarne altri per spenderli in futuro.
Ma cosa succede se il correntista con chiave pubblica 23 non è onesto e invece di mostrare il certificato con 900 euro mostra il vecchio certificato, quello che diceva che lui aveva 1000 euro? Beh a questo punto la banca potrebbe essere in qualche modo truffata, no? Perché lui potrebbe esibire il certificato da 1000 euro, spenderne una parte, 100, 200, 300 euro e poi dopo un mese far vedere ancora che ne ha 1000 e così via. Per risolvere questo problema non è necessario che la banca mantenga l'informazione di quanti soldi, cioè di quanto è il saldo di ciascun correntista. In realtà se ci pensate bene l'importante è che si segni da qualche parte che ha emesso dei certificati e quando emette un nuovo certificato, cioè quello in cui dice che il correntista 23 ha 900 euro non più 1000, si ricordi di segnare che il precedente certificato, cioè quello dove il correntista con chiave pubblica 23 aveva 1000 euro, non è più valido, è invalido.
Quindi deve soltanto segnare che alcuni di questi certificati sono validi, mentre altri non lo sono. Attenzione, non deve segnarsi quanti soldi detiene il correntista, ma soltanto che il suo certificato, del quale non sa niente finché il correntista non lo mostra, non è più valido. Ecco che inizia a nascere la necessità di un posto, di un registro, dove scrivere alcune informazioni, per esempio che un certificato è valido o che non è più valido, è un posto in cui queste informazioni non possono essere modificate, perché ovviamente modificare la validità di uno di questi certificati vuol dire cambiare il saldo dell'utente, cioè cambiare i soldi che sono nella sua disponibilità.
Quindi da un lato abbiamo un nuovo modello di identità, le identità crittografiche, che mi consentono di avere numerosi vantaggi rispetto alle identità che utilizziamo oggigiorno. Per esempio sono identità che non mi richiedono un ente centrale per essere create, per essere gestite e mantenute, che possono essere usate in autonomia e che nessuno al mondo può vietarmi di utilizzare. Dall'altro però queste identità hanno anche dei vantaggi, per esempio mi permettono di implementare un sistema di deleghe, perché avendo la firma digitale io posso firmare un documento in cui dico che qualcun altro ha la mia delega a operare a mio nome.
Inoltre tutti gli scambi di informazioni o di richieste tra questo tipo di identità sono certificate, perché è possibile dimostrare che provengono proprio da quel mittente, in quanto possono essere dotate di firma digitale. Da un lato quindi abbiamo questo nuovo sistema di identità, dall'altro però inizia a sorgere l'esigenza di un registro dove andare a scrivere alcune informazioni che rimangono valide e immutabili nel tempo. Ecco che nasce in qualche modo l'esigenza di quello che alla fine è la blockchain, e lo vedremo nelle prossime lezioni.