La crittografia asimmetrica, conosciuta anche come crittografia a chiave pubblica, è un tipo di crittografia nel quale ad ogni attore coinvolto nella comunicazione è associata una coppia di chiavi: La chiave pubblica, che deve essere distribuita; La chiave privata, appunto personale e segreta.
Generalità La crittografia asimmetrica evita il problema classico della crittografia simmetrica connesso alla necessità di uno scambio in modo sicuro dell'unica chiave utile alla cifratura/decifratura.
Il meccanismo della crittografia asimmetrica si basa invece sulle seguenti assunzioni: la chiave privata non è ricavabile dalla chiave pubblica (o almeno non è facilmente ricavabile) se con una delle due chiavi si cifra (o codifica) un messaggio, allora quest'ultimo sarà decifrato solo con l'altra.
Due degli usi più noti della crittografia asimmetrica sono:
La crittografia a chiave pubblica, in cui un messaggio viene cifrato con la chiave pubblica del destinatario. Se gli algoritmi sono scelti e utilizzati in modo appropriato, i messaggi non possono essere decifrati da nessuno che non possieda la chiave privata corrispondente, che si presume quindi essere il proprietario di tale chiave e quindi la persona associata alla chiave pubblica. Questo può essere utilizzato per garantire la confidenzialità di un messaggio. La firma digitale, in cui un messaggio viene firmato con la chiave privata del mittente e può essere verificato da chiunque abbia accesso alla chiave pubblica del mittente. Questa verifica dimostra che il mittente ha avuto accesso alla chiave privata e quindi è molto probabile che sia la persona associata alla chiave pubblica. Inoltre, dimostra che la firma è stata preparata per quel preciso messaggio, poiché la verifica fallirà per qualsiasi altro messaggio che si possa concepire senza utilizzare la chiave privata.
In un sistema di crittografia a chiave pubblica, chiunque può cifrare un messaggio usando la chiave pubblica del destinatario, ma tale messaggio può essere decifrato solo con la chiave privata del destinatario. Per fare ciò, deve essere computazionalmente facile per un utente generare una coppia di chiavi pubblica e privata da utilizzare per cifrare e decifrare. La forza di un sistema di crittografia a chiave pubblica si basa sulla difficoltà di determinare la chiave privata corrispondente alla chiave pubblica.
La sicurezza dipende quindi solo dal mantenere la chiave privata segreta, mentre la chiave pubblica può essere pubblicata senza compromettere la sicurezza.
I sistemi di crittografia a chiave pubblica spesso si basano su algoritmi di crittografia basati su problemi matematici che attualmente non ammettono alcuna soluzione particolarmente efficiente, quelli che riguardano la fattorizzazione di un numero intero, il logaritmo discreto e le relazioni delle curve ellittiche. Gli algoritmi a chiave pubblica, a differenza degli algoritmi a chiave simmetrica, non richiedono un canale sicuro per lo scambio iniziale di una (o più) chiavi segrete tra le parti.
A causa del peso computazionale della crittografia asimmetrica, essa di solito è usata solo per piccoli blocchi di dati, in genere il trasferimento di una chiave di cifratura simmetrica (per esempio una chiave di sessione). Questa chiave simmetrica è utilizzata per cifrare messaggi lunghi. La cifratura/decifratura simmetrica è basata su algoritmi semplici ed è molto più veloce. L'autenticazione del messaggio include hashing del messaggio per produrre un "digest" (risultato dell'output dell'algoritmo di hash), e crittografando il digest con la chiave privata per produrre una firma digitale. Da lì in poi chiunque può verificare questa firma: calcolando l'hash del messaggio; decifrando l'hash del messaggio; confrontando la firma del messaggio.
L'uguaglianza tra i digests conferma che il messaggio non è stato modificato da quando è stato firmato, e che il firmatario, e nessun altro, intenzionalmente abbia eseguito l'operazione di firma, presumendo che la chiave privata del firmatario sia rimasta segreta. La sicurezza di questo tipo di procedura dipende dall'algoritmo di hash di questa data qualità che è computazionalmente impossibile modificare o trovare un messaggio sostituito che produca lo stesso digest, ma gli studi hanno dimostrato che con gli algoritmi MD5 e SHA-1, produrre un messaggio alterato o sostituito non è impossibile. L'attuale standard di hash per la crittografia è SHA-2. Lo stesso messaggio può essere usato al posto del digest.
Gli algoritmi a chiave pubblica sono ingredienti fondamentali della sicurezza dei crittosistemi, applicazioni e protocolli. Essi sono alla base dei diversi standard Internet, come ad esempio Transport Layer Security (TLS), S/MIME, PGP e GPG. Alcuni algoritmi a chiave pubblica forniscono una distribuzione di chiave e segretezza (ad esempio, scambio di chiavi Diffie-Hellman), alcuni forniscono firme digitali (ad esempio Digital Signature Algorithm), altri forniscono entrambe (esempio RSA).
Le funzioni ellittiche consentono di avere chiavi lunghe un ordine di grandezza in meno rispetto a quelle necessarie con l'algoritmo RSA. Al 2025 si utilizzano chiavi ellittiche di 200 o 300 bit.
La crittografia a chiave pubblica trova applicazione in vari campi, tra gli altri: nella disciplina di sicurezza informatica e nella sicurezza delle informazioni. La sicurezza delle informazioni si occupa di tutti gli aspetti per la protezione delle risorse informative elettroniche contro le minacce sulla sicurezza. La crittografia a chiave pubblica viene utilizzata come metodo per assicurare la riservatezza, l'autenticazione e il non ripudio delle comunicazioni e per la memorizzazione dei dati.
Differenze con la crittografia tradizionale (simmetrica)
Nella tradizionale crittografia simmetrica, viene utilizzata un'unica chiave sia per codificare, sia per decodificare i messaggi. Delle due informazioni (la chiave e l'algoritmo) necessarie a chi deve inviare il messaggio, la chiave è quindi identica a quella necessaria a chi deve riceverla, mentre l'algoritmo è facilmente reversibile in quello di decifrazione. Per concordare una chiave con il proprio interlocutore, c'è bisogno di mettersi preventivamente in contatto con lui incontrandolo di persona, telefonandogli, scrivendogli una lettera, mandandogli un messaggio o in qualsiasi altro modo. In qualunque caso, esiste il pericolo che la chiave venga intercettata durante il tragitto, compromettendo quindi l'intero sistema comunicativo.
La crittografia a chiave pubblica permette invece a due (o più) persone di comunicare in tutta riservatezza senza usare la stessa chiave, anche se queste non si sono mai incontrate precedentemente.
Storia Agli inizi della storia della crittografia, le due parti dovevano contare su una chiave che doveva essere scambiata per mezzo di un metodo sicuro, come un incontro faccia a faccia o per mezzo di un corriere di fiducia. Questa chiave, che entrambe le parti tenevano assolutamente segreta, poteva quindi essere utilizzata per lo scambio di messaggi cifrati. Questo tipo di approccio alla distribuzione delle chiavi comporta un certo numero di difficoltà significative. Nel 1874 William Stanley Jevons scriveva nel suo libro I Principi della scienza:
In questo libro descriveva il rapporto tra le funzioni unidirezionali e la crittografia e continuava a discutere, in particolare, del problema della fattorizzazione utilizzato per creare una funzione botola. Nel luglio 1996, il matematico Solomon W. Golomb ha detto:
La scoperta riservata Nel 1970, James H. Ellis, crittografo inglese presso il Government Communications Headquarters (GCHQ), immaginò la possibilità di una "crittografia non segreta", (adesso chiamata crittografia a chiave pubblica), ma non riusciva a vedere alcun modo di implementarla. Nel 1973, il suo collega Clifford Cocks realizzò quello che è diventato noto come algoritmo di crittografia RSA, dando un metodo pratico di "cifratura non segreta", e nel 1974, un altro matematico e crittografo, che faceva parte del GCHQ, Malcolm J. Williamson, sviluppò ciò che è oggi è conosciuto come scambio di chiavi Diffie-Hellman. Il progetto fu passato anche al NSA. In un'ottica militare e con bassa potenza di calcolo disponibile, le potenzialità della crittografia a chiave pubblica non furono capite dalle due organizzazioni:
La loro scoperta non fu resa di dominio pubblico per 27 anni, fino a quando la ricerca è stata riclassificata dal governo britannico nel 1997.
La scoperta resa pubblica Nel 1976 Whitfield Diffie e Martin Hellman pubblicarono un sistema di crittografia a chiave asimmetrica, influenzato dal lavoro di Ralph Merkle sulla distribuzione della chiave pubblica. Questo metodo di scambio di chiavi, che utilizza l'elevazione a potenza in un campo finito, divenne noto come scambio di chiavi Diffie-Hellman. Questo era il metodo pratico pubblicato per stabilire una chiave segreta condivisa su un canale, autenticando (ma non confidenziale) le comunicazioni senza l'utilizzo di una chiave segreta precedentemente condivisa. La "tecnica a chiave pubblica accordata" di Merkle, conosciuta come algoritmo del puzzle, fu inventata nel 1974 e pubblicata nel 1978.
Nel 1977 la generalizzazione del sistema di Cocks fu indipendentemente inventata da Ron Rivest, Adi Shamir, Leonard Adleman e altri del MIT. Questi ultimi autori hanno pubblicato il loro lavoro nel 1978 e l'algoritmo è venuto ad essere conosciuto con il nome RSA, dalle loro iniziali. RSA utilizza l'elevamento a potenza in modulo di due numeri primi molto grandi moltiplicati, per la cifratura e decifratura, eseguendo sia la crittografia a chiave pubblica che la firma digitale a chiave pubblica. La sua sicurezza è collegata alla estrema difficoltà di fattorizzare grandi numeri, un problema per cui non è nota una tecnica generale efficiente. Nel 1979 Michael Rabin pubblicò un crittosistema correlato che probabilmente è protetto finché la fattorizzazione della chiave pubblica resta difficile, resta un presupposto che RSA gode anche questa sicurezza.
Dal 1970, un gran numero di tecniche di crittografia, firma digitale, accordo della chiave e altre sono state sviluppate nel campo della crittografia a chiave pubblica. Il sistema di crittografia ELGamal, inventato da Taher ElGamal si basa sul simile e relativo alto livello di difficoltà del problema logaritmo discreto, così come lo strettamente correlato DSA, che è stato sviluppato presso l'US National Security Agency (NSA) e pubblicato dal NIST come Standard proposto.
L'introduzione della crittografia a curva ellittica da parte di Neal Koblitz e Victor Miller, indipendentemente e contemporaneamente a metà degli anni 80, ha dato nuovi algoritmi a chiave pubblica basati sul problema del logaritmo discreto. Anche se matematicamente è più complessa, le curve ellittiche forniscono chiavi più piccole e più veloci, e la sicurezza risulta essere approssimativamente equivalente.
Principio di funzionamento Il principio generale della crittografia asimmetrica ha una solida base matematica che lo giustifica; tale base, riassunta e semplificata all'estremo, si fonda sull'uso di un problema complesso, ovvero un'operazione matematica semplice da eseguire, ma difficile da invertire, cioè dal cui risultato è difficile risalire agli argomenti di partenza. L'esempio classico è il problema della fattorizzazione di un numero (trovare i numeri primi che lo producono se moltiplicati tra loro: ad esempio, è facile moltiplicare 17×23 ottenendo 391, ben più difficile è per esempio fattorizzare il numero 377 nei fattori primi 13 e 29) usata nel primo e più famoso sistema crittografico a chiave pubblica: RSA. Le conoscenze di matematica pura sviluppate dall'uomo negli ultimi secoli hanno reso sempre più efficiente fattorizzare, ma nessuno è mai riuscito a far fare quel passo che porta il problema da complesso a non complesso; il problema diventa quindi intrattabile per numeri oltre una certa dimensione.