Una delle applicazioni più interessanti della crittografia con chiave pubblica/privata è la cosiddetta firma digitale. Questa serve appunto per firmare i pagamenti in bitcoin (e tante altre cose). E’ l’equivalente della firma fisica nel mondo digitale ma molto più sicura. Senza entrare nei dettagli operativi, con la nostra chiave privata possiamo generare una firma digitale per un certo documento, e chiunque riceve il documento con la firma potrà verificare grazie alla nostra chiave pubblica che noi e nessun altro abbiamo firmato e trasmesso quel documento.
Abbiamo parlato di crittografia a chiave pubblica in questo articolo e di funzioni di hashing in questo
Applicazioni della firma digitale
La firma digitale è una tecnologia che permette di verificare l’autenticità e l’integrità di un documento elettronico, in modo simile alla firma autografa su un documento cartaceo. Le applicazioni della firma digitale sono molteplici, una fra tutte è la possibilità di firmare le transazioni su blockchain come Bitcoin o l’esecuzione di transazioni complesse e smart contract su Ethereum. Oltre queste due applicazioni legate al settore delle criptovalute possono essere utilizzate anche in molti altri ambiti più tradizionali, come ad esempio:
- Firma di contratti e documenti legali: la firma digitale può essere utilizzata per firmare contratti, accordi commerciali e altri documenti legali in modo sicuro e verificabile.
- Trasmissione di documenti sensibili: la firma digitale può essere utilizzata per inviare documenti sensibili, come ad esempio certificati medici o documenti bancari, in modo sicuro e protetto.
- Autenticazione di utenti online: la firma digitale può essere utilizzata per autenticare gli utenti che accedono a servizi online, come ad esempio il login a un sito web o l’accesso a un’applicazione mobile.
- Firma di messaggi di posta elettronica: la firma digitale può essere utilizzata per firmare i messaggi di posta elettronica in modo da garantirne l’autenticità e l’integrità.
- Gestione dei documenti aziendali: la firma digitale può essere utilizzata per gestire i documenti aziendali, come ad esempio le fatture o i rapporti, in modo sicuro e tracciabile.
Come funziona la firma digitale
Unendo la funzione di hashing con un sistema di cifratura a chiave pubblica è possibile costruire le basi di un sistema di firma digitale. E’ bene sottolineare che in Bitcoin la crittografia non è utilizzata per cifrare il contenuto delle transazioni ma è utilizzata per verificare l’autenticità e la legittimità delle stesse grazie al fatto che queste possono essere firmate digitalmente e verificate successivamente da chiunque.
La funzione di hashing è il punto di partenza con cui costruire la firma digitale. Infatti tramite la funziona di hashing generiamo un identificativo unico e di lunghezza fissa, ad esempio 32 byte, a partire dal documento originale. Grazie poi alla cifratura con chiave privata generiamo una versione cifrata di tale hash, il risultato che otteniamo a valle della cifratura dell’hash è la firma.
Il documento originale potrà essere trasmesso insieme alla firma senza preoccupazioni che questo possa essere alterato, infatti chiunque dotato della nostra chiave pubblica potrà facilmente decifrare la firma e confrontare l’hash del documento ricevuto con l’hash decifrato dalla firma. Se i due coincidono la verifica della firma è completa.
Nella figura è illustrato il flusso di firma digitale tra Alice che firma e Bob che verifica . Alice trasmette a Bob la sua chiave pubblica, successivamente Alice crea una firma digitale a partire dal suo documento. Bob riceve sia il documento che la firma e può verificare l’autenticità del document grazie alla chiave privata di Alice.
Conclusioni
Abbiamo visto come la combinazione di funzioni di hashing e tecniche di cifratura a chiave pubblica possano realizzare una soluzione completa di firma digitale.
La prima realizzazione della crittografia a chiave pubblica è storicamente quella basata sul sistema RSA che parte dall’ipotesi che dati due numeri primi p e q ed il loro prodotto n= p * q, la fattorizzazione di n, quando questo è un numero molto grande, sia un problema molto difficile da risolvere per un calcolatore in tempi ragionevoli, a questo scopo si dice che il problema è impraticabile per ogni attaccante con le attuali conoscenze e tecnologie informatiche. Va detto che impraticabile non significa impossibile ma semplicemente che lo sforzo necessario supera di gran lunga le capacità di calcolo disponibili al giorno d’oggi. La fattorizzazione di grandissimi numeri ricade in questa categoria di problemi e come tale può essere sfruttata per generare le chiavi.
In altre parole, mentre è facile per un computer calcolare in pochi istanti il prodotto p * q = n è molto difficile il contrario, ovvero a partire da n capire che i fattori sono p e q. Questo ovviamente per numeri molto grandi.
Tuttavia non tutte le soluzioni di firma digitale adottano il problema della fattorizzazione come barriera matematica. Esiste una categoria di problemi che risultano più complessi. Questi problemi sono quelli del Discrete Logarithm Problem (DLP), ovvero calcolare il logaritmo di un numero intero all’interno di un campo finito. Senza entrare nei dettagli matematici ci limitiamo a dire che confrontato con il sistema RSA basato sulla fattorizzazione di grandi numeri, la crittografia basata su DLP garantisce la stessa robustezza agli attacchi ma con delle chiavi crittografiche di taglia più piccola e quindi più comode da trattare dalle applicazioni.
I sistemi di firma digitali basati sul problema DLP sono chiamati Digital Signature Algorithm (DSA). E’ stato dimostrato che, rispetto alla fattorizzazione dei grandi numeri di RSA, il problema del logaritmo discreto di un numero intero in un campo finito sia un problema molto più arduo.
Per completezza di informazione va detto che allo stato dell’arte, lo standard di firma più utilizzato è denominato con la sigla ECDSA (Elliptic Curve Digital Signature Algorithm). Tale standard è basato su una generalizzazione del problema del logaritmo discreto su una curva ellittica.
In questo metodo di cui non affrontiamo i dettagli matematici ci basta sapere che a parità di lunghezza delle chiavi la cifratura risulta più forte sia di quella basata su RSA (fattorizzazione) che di quella DSA (logaritmo discreto di interi) e quindi, a parità di resistenza ad eventuali attacchi, consente l’uso di chiavi più piccole e pertanto più facilmente trattabili dalle applicazioni.
L’algoritmo ECDSA è anche quello scelto da Satoshi Nakamoto per l’implementazione di Bitcoin.
La sicurezza garantita da una firma ECDSA con chiave a 256 bit è quasi equivalente a quella che risulta garantita dall’algoritmo RSA usando una chiave lunga 3072 bit.
Rispondi