La cifratura asimmetrica è la più grande rivoluzione nei 3000 anni della crittografia. Essa utilizza due chiavi che sono legate non al canale, alla sessione di comunicazinoe (come avviene nel caso della cifratura simmetrica) bensì all’entità comunicante, all’utente: ogni entità ha una coppia di chiavi, una **pubblica $KP$ (**talvolta indicata invece con $KU$) e una privata $KR$ (la “R” sta per “Reserved”).
In genere, ciò che viene cifrato con la chiave pubblica di un utente può essere decifrato solo con la chiave privata dello stesso utente, e viceversa (ma non tutti gli algoritmi di cifratura asimmetrica permettono di “scambiare” in questo modo i ruoli delle chiavi: in alcuni algoritmi una delle chiavi può essere usata solo per la cifratura, e l’altra solo per la decifratura). Si parla di cifratura “asimmetrica” proprio perchè le due parti comunicanti effettuano operazioni diverse con chiavi diverse.
La cifratura asimmetrica fu introdotta negli anni ‘70 (quando la comunicazione digitale iniziava a essere importante), al fine di superare due limiti della cifratura simmetrica:
I primi a trattare questi problemi proponendo soluzioni basate sulla crittografia simmetrica furono Whitfield Diffie e Martin Hellman, nel 1976, ma il primo vero e proprio algoritmo di cifratura asimmetrica fu RSA, sviluppato da Ron Rivest, Adi Shamir e Leonard Adleman.
Gli algoritmi di cifratura asimmetrica si basano su funzioni matematiche su numeri grandi, dunque la loro efficienza computazionale è minore rispetto a quella degli algoritmi simmetrici. Perciò, è importante capire che la cifratura asimmetrica non sostituisce quella simmetrica, bensì, la complementa.
Per poter comunicare usando la crittografia asimmetrica, ogni utente deve prima generare una coppia di chiavi (pubblica e privata). La generazione non è casuale (come nel caso della cifratura simmetrica), bensì segue delle regole matematiche ben precise.
La chiave pubblica di ciascun utente viene poi distribuita in qualche modo (tramite registri, trasmissioni dirette, ecc) agli altri utenti con cui vuole comunicare, mentre la chiave privata è tenuta segreta.
La cifratura asimmetrica può essere usata per realizzare la segretezza. Infatti, se Bob vuole mandare un messaggio riservato $M$ ad Alice:
Bob cifra il messaggio con la chiave pubblica di Alice,
$$ C = E(M, KP_{Alice}) $$
e invia ad Alice il messaggio cifrato $C$.
Quando Alice riceve $C$, lo decifra con la sua chiave privata per ottenere il messaggio in chiaro:
$$ M = D(C, KR_{Alice}) $$
Solo Alice ha la chiave privata $KR_{Alice}$ necessaria per la decifratura, dunque solo Alice è in grado di decifrare il messaggio, ovvero si ha effettivamente la segretezza.
Un altro servizio che la cifratura asimmetrica può fornire è l’autenticazione (la quale è invece difficile da realizzare con la cifratura simmetrica). Ad esempio, si supponga che Bob voglia mandare ad Alice un messaggio autenticabile, cioè tale che Alice possa verificare che il messaggio è stato cifrato effettivamente da Bob. Allora:
Bob cifra il messaggio $M$ con la sua chiave privata,
$$ C = E(M, KR_{Bob}) $$
e invia $C$ ad Alice.
Quando Alice (o chiunque altro) riceve $C$ lo decifra con la chiave pubblica di Bob:
$$ M=D(C, KP_{Bob}) $$
Siccome la chiave pubblic $KP_{Bob}$ di Bob è appunto pubblica, ottenibile da tutti, il messaggio può essere decifrato da chiunque: non si ha segretezza. Tuttavia, il fatto che il messaggio venga decifrato correttamente con $KP_{Bob}$ da la prova che esso sia stato cifrato con la corrispondente chiave privata $KR_{Bob}$, e solo Bob è in possesso di tale chiave, dunque si ah la prova che il messaggio sia stato generato da Bob, ovvero sia autentico.