Crittografia asimmetrica

La crittografia asimmetrica è caratterizzata dal fatto che ogni utente ha una coppia di chiavi, una chiave pubblica ed una chiave privata. Per poter inviare un messaggio garantendo la segretezza, il mittente cifra il messaggio con la chiave pubblica del destinatario, il quale decifra il messaggio utilizzando la propria chiave privata. Esempi di algoritmi che implementano la crittografia asimmetrica sono RSA ed El Gamal.

La crittografia asimmetrica è particolarmente utile per la riservatezza su Internet perché non richiede lo scambio fisico della chiave condivisa.  La crittografia asimmetrica è tuttavia più lenta della crittografia simmetrica, di cui si è discusso in questo post.

Principi generali della crittografia asimmetrica

La crittografia asimmetrica (detta anche crittografia a chiave pubblica) si basa sul principio generale che ogni utente ha una coppia di chiavi , una chiave pubblica K+ ed una chiave privata K. Affinché il meccanismo funzioni, l’utente proprietario della coppia di chiavi deve attenersi scrupolosamente a queste due regole:

  1. la chiave pubblica può essere distribuita a chiunque;

  2. la chiave privata deve essere custodita gelosamente e non deve essere divulgata a nessuno.

Può essere spiazzante e contro-intuitivo il fatto che per cifrare un messaggio si utilizzi una chiave diversa da quella che si utilizza per decifrarlo, eppure il meccanismo funziona perfettamente. A scopo dimostrativo verrà discusso brevemente il funzionamento di base dell’algoritmo RSA, emblematico per la crittografia asimmetrica. L’algoritmo RSA fu inventato nel 1977 da tre ingegneri del MIT, Ronald Rivest, Adi Shamir e Leonard Adleman – l’acronimo RSA deriva appunto dalle iniziali degli autori. RSA si basa sul seguente principio: dato un numero n, è molto difficile trovare i due numeri primi p e q che sono fattori di n. In base a tale principio, si può rendere pubblico il numero n senza timore che, a partire da n, si riescano a fattorizzare p e q, da cui dipende la chiave privata.

Segretezza 

La crittografia asimmetrica permette di soddisfare il requisito di segretezza. Vediamo ad esempio come un utente A può mandare a B un messaggio garantendo la segretezza (anche se intercettato il messaggio risulta inintelligibile).

Per garantire la segretezza delle comunicazioni, l’utente A cifra il messaggio m con la chiave pubblica di B e lo invia. L’utente B riceve il messaggio cifrato, lo decifra applicando la propria chiave privata ed ottiene così il messaggio originale. Indicando con KB+ la chiave pubblica di B e con KB la chiave privata di B, le operazioni effettuate si possono riassumere così:

AKB+(m)
BKB(KB+(m))=m

Si deve notare come il messaggio inviato da A risulta inintelligibile a tutti, tranne che al possessore della chiave privata KB. Infatti, solo l’applicazione di tale chiave permette di decifrare il messaggio.

Autenticazione

La crittografia asimmetrica permette di di soddisfare il requisito dell’autenticazione, ovvero per gli scopi in esame permette di verificare l’identità del mittente. Vediamo ad esempio come un utente A può mandare a B un messaggio e B può verificare che solamente A possa aver mandato il messaggio.

Per garantire l’autenticazione, l’utente A cifra il messaggio m con la propria chiave privata e lo invia. L’utente B riceve il messaggio, applica la chiave pubblica di A e se riesce a decifrare con successo verifica così che solamente A può aver mandato il messaggio. Indicando con KA+ la chiave pubblica di A e con KA la chiave privata di A, le operazioni effettuate si possono riassumere così:

AKA(m)
BKA+(KA(m))=m

Si noti che le operazioni sopra riportate non garantiscono anche la segretezza, infatti chiunque intercetti il messaggio di A è in grado di leggerne il contenuto, poiché la chiave pubblica di A è nota a tutti. Se si volesse garantire sia l’autenticazione che la segretezza, si dovrebbero combinare le operazioni relative all’autenticazione con quelle relative alla segretezza. Il procedimento viene lasciato per esercizio al lettore, evidenziando come il punto di partenza da parte di A consiste nell’applicare la propria chiave privata non al messaggio in chiaro ma al messaggio cifrato con la chiave pubblica di B (KB+ ), come segue:

AKA(KB+(m))