In ambito informatico la crittografia asimmetrica (detta anche a doppia chiave o a chiave pubblica) è una tecnica di cifratura che viene utilizzata con due finalità differenti:
per inviare un messaggio cifrato superando il problema dello scambio "riservato" della chiave di cifratura;
per autenticare un documento digitale.
Gli utenti che utilizzano la crittografia asimmetrica sono dotati di due chiavi: la chiave privata e la chiave pubblica.
Come suggerisce la parola, la chiave privata è mantenuta segreta dal titolare mentre la chiave pubblica è nella disponibilità di chiunque ed è anche associata in modo chiaro al titolare.
Invio di un messaggio cifrato
Consideriamo, ad esempio, due utenti, Alice e Bob, che intendono comunicare utilizzando la crittografia asimmetrica:
Alice, per cifrare il messaggio indirizzato a Bob utilizza la chiave pubblica di quest'ultimo. Bob per decifrare il messaggio che gli è pervenuto, utilizza la propria chiave privata.
Bob, per cifrare un messaggio indirizzato ad Alice, utilizza la chiave pubblica di Alice. Alice utilizza la propria chiave privata per decifrare il messaggio.
Autenticazione di un messaggio
La cifratura asimmetrica può essere utilizzata anche per autenticare un messaggio in modo da poterne verificare la titolarità.
Consideriamo ancora gli utenti Alice e Bob che operano nel seguente modo:
Alice produce un messaggio che cifra con la propria chiave privata;
Alice rende pubblico sia il messaggio in chiaro che il messaggio cifrato;
Bob per verificare che il messaggio pubblicato sia veramente sottoscritto da Alice decifra il messaggio cifrato con la chiave pubblica di Alice e lo confronta con il messaggio in chiaro;
Se il messaggio decifrato e il messaggio in chiaro coincidono, allora il messaggio è autentico ed è stato prodotto da Alice.
Diffusione della chiave pubblica
Collegato all'uso degli algoritmi di cifratura asimmetrica vi è il problema di come "distribuire" la chiave pubblica in modo che sia associabile con certezza al legittimo proprietario.
Nell'esempio precedente non si "dice" come Bob possa assicurarsi che la chiave pubblica che sta usando sia proprio quella di Alice!
Con il procedimento descritto, paradossalmente, Bob verifica che il documento sia autentico ma non che sia stato realmente prodotto da Alice.
E' possibile ipotizzare varie soluzioni per questo problema: ci potrebbe essere un sito web "qualificato" che raccoglie tutte le chiavi pubbliche degli utenti associandole alle rispettive anagrafiche oppure si potrebbe prevedere che un utente (nell'esempio Bob) contatti personalmente il titolare (nell'esempio Alice) per richiederne la chiave pubblica.
In realtà queste tecniche, seppure ragionevoli, risultano difficilmente praticabili con il crescere degli utenti e sono realmente utilizzate solo in contesti limitati.
La soluzione che si è diffusa ed è ampiamente utilizzata si basa sui certificati digitali, che prevedono la presenza di soggetti qualificati in grado di garantire la corretta attribuzione della chiave pubblica al legittimo proprietario, come vedremo in seguito.
Caratteristiche degli algoritmi
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.
Altro esempio di problema complesso è il logaritmo discreto, usato nella nascente crittografia ellittica.
La complessità computazionale di questi algoritmi fa sì che la cifratura asimmetrica sia utilizzata solo per cifrare messaggi di dimensioni modeste. Questa limitazione fa sì che la cifratura asimmetrica sia sempre utilizzata in combinazione con altre tecnologie:
cifratura simmetrica;
funzione crittografica di hash.
La chiave di sessione
Come si è detto, la cifratura asimmetrica non si presta alla cifratura di documenti di grosse dimensioni e per questo nell'invio di messaggi cifrati si ricorre ad una strategia più sofisticata:
Il mittente utilizza la cifratura asimmetrica per inviare una chiave segreta da utilizzarsi successivamente (la chiave segreta prima dell'invio è cifrata con la chiave pubblica del destinatario);
Entrambi gli interlocutori, per tutta la durata della sessione di lavoro, utilizzano la chiave segreta condivisa per cifrare tutti i messaggi scambiati.
La chiave segreta condivisa viene detta chiave di sessione e il canale di comunicazione ottenuto è detto canale sicuro.
Nella precedente descrizione, i termini mittente e destinatario sono stati utilizzati sia per indicare le persone che interagiscono a distanza sia i relativi dispositivi informatici: in realtà questa ambiguità è ricorrente in contesti del genere ma deve essere chiaro che operazioni come la cifratura di messaggi o la generazione della chiave di sessione sono del tutto trasparenti alle persone e sono procedimenti del tutto automatici.
Algoritmo RSA
RSA è un cifrario a chiave pubblica che permette di cifrare un messaggio attraverso un procedimento che sfrutta le proprietà dei numeri primi e la "presunta" complessità della fattorizzazione di un numero.
Per i problemi complessi non sono disponibili algoritmi efficienti per ottenerne la soluzione, quindi se la taglia del problema è sufficientemente ampia nessun computer è in grado di trovare la soluzione di tali problemi in un tempo utile.
Va tuttavia considerato che la fattorizzazione di interi grandi è progredita rapidamente mediante l'utilizzo di hardware dedicati, al punto che potrebbe essere possibile fattorizzare un intero di 1024 bit in un solo anno di tempo, al costo di un milione di dollari (un costo sostenibile per qualunque grande organizzazione, agenzia o intelligence).
Attualmente questo algoritmo è ritenuto sicuro se si usa una chiave di 2048 bit corrispondente ad un numero decimale di 617 cifre.
Una demo è disponibile al seguente link.
Le chiavi generate nella demo sono rappresentate secondo il formato PEM, che utilizza una codifica su base 64 (sono utilizzati 52 caratteri alfabetici tra minuscole e maiuscole, 10 cifre e i caratteri + e /).
Algoritmo ElGamal
ElGamal è un sistema di cifratura a chiave pubblica basato sulla difficoltà del calcolo del logaritmo discreto, definito nell'aritmetica modulare.
Sito: 7ecnologie
Sezione: 14. Sicurezza informatica
Capitolo: 02. Crittografia
Paragrafo: 03. Crittografia asimmetrica
Indice dei capitoli: 00. Risorse - 01. Il quadro normativo - 02. Crittografia - 03. Protocolli per la sicurezza - 04. Applicazioni e Servizi - 98. Esercizi
Indice dei paragrafi: 01. Cifrari nella storia - 02. Crittografia simmetrica - 03. Crittografia asimmetrica - 04. Funzione hash - 05. Certificato digitale - 06. Firma digitale - 07. Codifica base 64 - 08. LAB