Concetti relativi alla crittografia a chiave pubblica

 

Ultima modifica dell'argomento: 2005-05-19

In questo argomento viene presentata un'introduzione avanzata agli elementi della crittografia a chiave pubblica specificamente correlati alla protezione dei messaggi. Per approfondire questo argomento, sono disponibili molte altre fonti di informazioni.

Per crittografia si intende la protezione delle informazioni mediante l'utilizzo di codici e cifre. La crittografia è un componente fondamentale della protezione dei messaggi.

Un processo di codifica consiste nella modifica metodica delle informazioni per renderne impossibile la lettura se non si conosce il criterio di codifica adottato. Una delle prime codifiche inventate, la cifratura di Cesare, consiste nello spostare di un determinato numero di posizioni tutte le lettere dell'alfabeto. Il mittente e il destinatario conoscono entrambi il numero in base al quale spostare le lettere e possono utilizzare questa codifica per scambiarsi informazioni riservate senza che altri utenti ne vengano a conoscenza. Il processo di codifica delle informazioni equivale alla crittografia, mentre quello di decodifica equivale alla decrittografia. Il testo del messaggio originale è definito "testo non crittografato", mentre quello del messaggio modificato è definito "testo crittografato". Le informazioni utilizzate per trasformare il testo non crittografato in crittografato sono indicate con il termine "chiave". La modalità in base alla quale una chiave modifica le informazioni è definita "algoritmo".

Nota

Il termine "testo non crittografato" utilizzato in questo contesto non deve essere confuso con il termine "testo normale" utilizzato per indicare il formato di un messaggio di posta elettronica. Il termine "testo normale" viene infatti utilizzato per distinguere il formato di un messaggio dal formato HTML o RTF (Rich Text Format) e non è correlato al concetto di protezione dei messaggi.

Se un mittente desidera crittografare un messaggio utilizzando il metodo di cifratura di Cesare, deve conoscere la chiave da utilizzare, ad esempio deve sapere che la lettera A nel testo non crittografato deve essere sostituita dalla lettera D nel testo crittografato, la B dalla E e così via. Utilizzando questa chiave, basata sull'algoritmo "sposta le lettere in avanti di tre posizioni", la parola "guida" viene trasformata in "langd".

Quando il destinatario riceve il messaggio in testo crittografato, lo trasforma nuovamente in testo non crittografato utilizzando la chiave per la decrittografia, ovvero spostando le lettere indietro di tre posizioni, in base a un criterio di modifica inverso a quello precedente.

In questo esempio, sia il mittente che il destinatario devono mantenere segreta la chiave, altrimenti il messaggio può essere letto da qualsiasi persona ne venga a conoscenza. La perdita di una chiave rende automaticamente inefficace la crittografia. In questa prospettiva, anche la complessità dell'algoritmo svolge un ruolo importante. È infatti possibile che un'entità non autorizzata tenti di decrittografare il testo individuando la chiave appropriata.

È opportuno notare che il mittente e il destinatario utilizzano la stessa chiave. Per questo motivo il tipo di crittografia utilizzato nell'esempio è definito "a chiave simmetrica".

Anche se semplice, questo esempio illustra chiaramente i concetti e le funzionalità fondamentali della crittografia. Le recenti innovazioni nel campo della crittografia si sono concentrate essenzialmente sul livello di complessità dell'algoritmo.

Funzionamento della crittografia a chiave pubblica

Nel 1976, Whitfield Diffe e Martin Hellman realizzarono la crittografia a chiave pubblica, una delle più importanti innovazioni in questo campo, che ha modificato radicalmente il processo di crittografia e decrittografia.

Diffe e Hellman proposero di utilizzare due chiavi, anziché un'unica chiave segreta condivisa: la "chiave privata", che rimane segreta ed è conosciuta da una sola delle due parti, e la "chiave pubblica", che non è segreta e può essere condivisa da più utenti. Queste due chiavi, definite anche "coppia di chiavi", vengono utilizzate insieme nelle operazioni di crittografia e decrittografia. Le chiavi della coppia sono legate da una relazione reciproca, in base alla quale ciascuna chiave può essere utilizzata solo insieme all'altra. In questo modo viene stabilita una relazione esclusiva tra le chiavi della coppia: una chiave pubblica e la chiave privata corrispondente sono correlate tra loro e non sono correlate a nessun'altra chiave.

La definizione di coppie di chiavi è resa possibile da una particolare relazione matematica tra gli algoritmi delle chiavi pubbliche e delle chiavi private. Le coppie di chiavi sono matematicamente correlate tra loro in modo da produrre lo stesso risultato ottenuto utilizzando due volte una chiave simmetrica. Le chiavi devono essere utilizzate insieme: non è possibile applicare una stessa chiave per crittografare e decrittografare i dati. Questo significa che l'operazione effettuata da ogni chiave è unidirezionale. Una chiave non può essere utilizzata anche per effettuare l'operazione inversa. Inoltre, gli algoritmi relativi a entrambe le chiavi sono progettati in modo che una chiave non possa essere utilizzata per determinare la chiave opposta nella coppia. Di conseguenza, la chiave privata non può essere determinata a partire da quella pubblica. Tuttavia, la relazione matematica alla base delle coppie di chiavi rende queste ultime più vulnerabili rispetto a quelle simmetriche. Gli algoritmi devono essere sufficientemente complessi da impedire agli utenti non autorizzati di utilizzare la chiave pubblica per forzare la decrittografia delle informazioni. La complessità matematica e la natura unidirezionale di una chiave pubblica compensano la caratteristica di notorietà impedendo agli utenti di identificare le informazioni codificate con la chiave.

Se si applica questo concetto all'esempio precedente, il mittente utilizzerà la chiave pubblica per crittografare il testo e il destinatario utilizzerà quella privata per decrittografarlo.

Data la particolare relazione che lega la chiave privata a quella pubblica, è possibile che una persona utilizzi la stessa chiave con più utenti anziché utilizzare una chiave diversa per ciascuno di essi. Purché la chiave privata rimanga segreta, la chiave pubblica può essere resa nota a un qualsiasi numero di utenti senza alcun rischio di protezione. La possibilità di utilizzare una singola coppia di chiavi con più persone rappresenta una grande conquista nel campo della crittografia poiché consente di limitare notevolmente i requisiti di gestione delle chiavi. Un utente può condividere una coppia di chiavi con un numero qualsiasi di persone anziché stabilire una singola chiave segreta con ciascuna di esse.

Crittografia a chiave pubblica e protezione dei messaggi

La crittografia a chiave pubblica è un elemento fondamentale della protezione dei messaggi. Senza questo tipo di crittografia, sarebbe quasi impossibile mettere in atto soluzioni pratiche per la protezione dei messaggi, tenuto conto del fatto che, prima dell'introduzione della crittografia a chiave pubblica, la gestione delle chiavi era un'attività veramente impegnativa. Una volta illustrati i concetti di base relativi alla crittografia a chiave pubblica, verrà spiegato come questo tipo di crittografia contribuisce alla protezione dei messaggi.

Crittografia a chiave pubblica e firme digitali

Come spiegato nella sezione precedente, le firme digitali si basano sulla possibilità di identificare in maniera univoca il mittente di un messaggio. La natura reciproca della relazione della coppia di chiavi rende possibile questa identificazione univoca tramite la crittografia a chiave pubblica.

Poiché la chiave privata appartiene a una sola parte, ogni volta che questa chiave risulta utilizzata è possibile dedurre che è stata applicata dal proprietario. Da questo punto di vista, l'utilizzo di una chiave privata equivale all'applicazione di una firma su un documento cartaceo poiché l'operazione può essere effettuata solo dal proprietario. Sia la firma che la chiave privata forniscono la prova della presenza del proprietario.

Se per un'operazione di crittografia e decrittografia è stata utilizzata una coppia di chiavi, è possibile dedurre che per eseguire una parte dell'operazione sia stata utilizzata la chiave privata della coppia e per identificare tale chiave sia stata utilizzata la chiave pubblica corrispondente. Se per un'operazione di crittografia e decrittografia è stata utilizzata una determinata chiave pubblica, è possibile dedurre che per eseguire una parte dell'operazione sia stata utilizzata la chiave privata corrispondente e che una parte dell'operazione di crittografia sia stata eseguita solo dal proprietario della chiave.

L'utilizzo di una chiave privata per stabilire l'identità dimostra che l'operazione di crittografia e decrittografia è stata completata, ovvero che il testo non crittografato è stato convertito in testo crittografato tramite una chiave privata e che quest'ultimo è stato successivamente riconvertito in testo non crittografato tramite la chiave pubblica corrispondente. Se l'intera operazione risulta effettivamente eseguita, si ha la prova dell'utilizzo della chiave privata e solo di questa.

Affinché le operazioni di crittografia e decrittografia risultino completate, il testo non crittografato iniziale deve corrispondere a quello finale. I due testi devono essere confrontati direttamente e devono risultare assolutamente corrispondenti. Per il confronto e la convalida deve essere disponibile un elemento di controllo.

Nella posta elettronica, questo elemento corrisponde al messaggio effettivo, che fornisce uno strumento di controllo adeguato poiché è disponibile sia al mittente che al destinatario.

Per questa operazione di confronto, il messaggio viene convertito in un "hash", ovvero una rappresentazione numerica del testo completo. A parità di testo del messaggio verranno restituiti valori hash identici.

Combinando il valore hash del messaggio con la chiave privata al momento dell'invio, il proprietario della chiave privata dimostra di essere l'unico mittente del messaggio.

La combinazione di messaggio e chiave privata viene realizzata mediante la crittografia del valore hash con la chiave privata del mittente, con conseguente generazione della firma digitale. A seconda della configurazione del sistema di posta elettronica del mittente, la firma digitale viene aggiunta al messaggio, che quindi diventa un messaggio "con firma non crittografata", oppure viene associata al messaggio originale come allegato di tipo binario, con la conseguente creazione di un messaggio "con firma crittografata".

Poiché la firma viene aggiunta al messaggio originale sotto forma di allegato, i messaggi con firma non crittografata possono essere letti dai client di posta elettronica che non supportano S/MIME. In questo caso, la firma viene eliminata e il messaggio viene visualizzato dai client. Non è tuttavia possibile effettuare alcun tipo di verifica sul messaggio, che quindi equivale a un messaggio non firmato. Lo svantaggio dei messaggi con firma non crittografata sta nel maggiore rischio di manomissione da parte dei gateway di posta, che può determinare l'invalidazione della firma.

Diversamente dai messaggi precedenti, quelli con firma crittografata risultano meno vulnerabili poiché il messaggio e la firma digitale vengono trattati come un unico allegato binario. Quest'ultimo può tuttavia essere letto solo da un client S/MIME. Se viene ricevuto da un client di altro tipo, il messaggio risulterà illeggibile.

I messaggi con firma crittografata sono stati creati in parte per risolvere il problema rappresentato dalla modifica del corpo dei messaggi da parte dei sistemi di posta elettronica durante il trasferimento dei messaggi stessi. È opportuno sottolineare in questa sede che le soluzioni di posta elettronica correnti conformi agli standard S/MIME non modificano il corpo dei messaggi. Tuttavia, esistono numerosi client che non sono in grado di leggere i messaggi di posta elettronica con firma crittografata. Si consiglia, pertanto, di inviare messaggi con firma non crittografata.

Al momento della ricezione del messaggio, la firma digitale può essere recuperata e il messaggio viene decrittografato mediante la chiave pubblica del mittente, con conseguente restituzione del valore hash originale del messaggio. A questo punto è possibile eseguire il confronto tra il valore hash restituito e il valore hash del messaggio ricevuto. Poiché a una chiave pubblica può corrispondere una sola chiave privata e solo il proprietario della chiave pubblica può utilizzare la chiave privata per crittografare il valore hash, l'operazione di decrittografia del valore hash con la chiave pubblica dimostra che il valore hash è stato crittografato dal proprietario della chiave privata. Poiché il valore hash è una rappresentazione numerica del testo del messaggio, se il valore hash crittografato corrisponde a quello del messaggio ricevuto, significa che il testo del messaggio inviato equivale al testo ricevuto. Se a questa considerazione si unisce il fatto che solo il proprietario della chiave privata può avere inviato il messaggio, il destinatario avrà la certezza che il messaggio è stato inviato solo dal proprietario della chiave. In questo modo vengono garantiti l'autenticazione, il non-ripudio e l'integrità dei dati. In caso di mancata corrispondenza dei valori hash, il destinatario verrà a conoscenza che il messaggio è stato manomesso durante il trasferimento oppure che la chiave pubblica utilizzata non corrisponde a quella privata. In entrambi i casi, il messaggio non risulterà valido e non potrà essere considerato attendibile.

Dalle considerazioni sopra riportate è possibile comprendere in che modo la crittografia a chiave pubblica fornisce i servizi di protezione alla base delle firme digitali.

Nella figura seguente è illustrata la sequenza relativa all'applicazione di una firma a un messaggio di posta elettronica con l'aggiunta degli elementi di supporto della crittografia a chiave pubblica.

35451fb8-5e11-4d67-ba6e-e5d4da6febca

  1. Cattura del messaggio.
  2. Calcolo del valore hash del messaggio.
  3. Recupero della chiave privata del mittente.
  4. Crittografia del valore hash con la chiave privata del mittente.
  5. Aggiunta al messaggio, come firma digitale, del valore hash crittografato.
  6. Invio del messaggio.

Nella figura seguente è illustrata la sequenza relativa alla verifica della validità di una firma digitale in un messaggio di posta elettronica con l'aggiunta degli elementi di supporto della crittografia a chiave pubblica.

d1b14a27-5cfb-4df2-89f7-990219378716

  1. Ricezione del messaggio.
  2. Recupero della firma digitale contenente il valore hash crittografato dal messaggio.
  3. Recupero del messaggio.
  4. Calcolo del valore hash del messaggio.
  5. Recupero della chiave pubblica del mittente.
  6. Decrittografia del valore hash crittografato con la chiave pubblica del mittente.
  7. Confronto del valore hash decrittografato con quello generato al momento della ricezione.
  8. Se i valori corrispondono, il messaggio è valido.

In questa sequenza viene mostrato come la crittografia a chiave pubblica fornisce le funzionalità necessarie per i servizi di protezione fondamentali di una firma digitale, ovvero l'autenticazione, il non ripudio e l'integrità dei dati.

Crittografia a chiave pubblica e crittografia dei messaggi

Diversamente dalla relazione tra crittografia a chiave pubblica e firme digitali, quella tra crittografia a chiave pubblica e crittografia dei messaggi è in genere più immediata, poiché la seconda è una funzione fondamentale della prima. Tuttavia, la crittografia dei messaggi non viene eseguita semplicemente crittografando e decrittografando il messaggio mediante la coppia di chiavi. Quest'ultima viene utilizzata nella crittografia dei messaggi, ma non per l'intero messaggio.

Poiché l'obiettivo della crittografia dei messaggi è di garantire che il messaggio venga visualizzato solo dai destinatari autorizzati, la chiave privata di ciascun destinatario risulta essere l'elemento più adatto a fornire questo servizio. Dato che la chiave privata può essere utilizzata solo dal relativo proprietario, l'applicazione della chiave durante la lettura di un messaggio garantisce che quest'ultimo verrà letto solo dal proprietario della chiave. Questa funzionalità è alla base del carattere di riservatezza che contraddistingue la crittografia dei messaggi. Inoltre, poiché la chiave pubblica può essere distribuita a più utenti, consente a più persone di inviare informazioni a un unico titolare di chiave privata.

Tuttavia, la coppia di chiavi non viene applicata all'intero messaggio poiché l'operazione di crittografia e decrittografia tramite coppia di chiavi è un processo impegnativo, legato alla complessità degli algoritmi delle chiavi. Anche se è richiesta una coppia di chiavi, non è necessario che questa venga applicata all'intero messaggio, ma solo che faccia parte del processo in base al quale le informazioni vengono "bloccate" e "sbloccate". Affinché l'obiettivo della crittografia possa essere considerato raggiunto, è sufficiente che il messaggio rimanga illeggibile finché non viene presentata una chiave privata.

Come indicato in "Funzionamento della crittografia a chiave pubblica" in questo argomento, le chiavi pubbliche utilizzano algoritmi complessi per compensare il fatto che sono pubblicamente note. Questo significa che sono di dimensioni più grandi, pertanto i calcoli che utilizzano tali chiavi risulteranno più lenti rispetto a quelli eseguiti con le chiavi simmetriche precedenti. Poiché una chiave privata viene utilizzata solo per sbloccare le informazioni prima della visualizzazione e non viene applicata all'intero messaggio, la soluzione più efficiente consiste nell'utilizzare una coppia di chiavi sul minor numero possibile di informazioni e una chiave simmetrica più veloce sul maggior numero possibile di informazioni, impedendo l'utilizzo delle informazioni finché non viene presentata la chiave privata.

Le chiavi simmetriche sono basate su una chiave segreta, che deve essere nota a entrambe le parti. Questo processo è talvolta definito "negoziazione delle chiavi". Con le coppie di chiavi non viene effettuato alcun processo di negoziazione perché una stessa chiave pubblica può essere utilizzata da più persone. Le coppie di chiavi possono anche essere utilizzate insieme alle chiavi simmetriche per gestire la negoziazione delle chiavi. Una chiave simmetrica può essere selezionata e crittografata mediante la chiave pubblica di una coppia di chiavi, quindi inviata al proprietario della chiave privata. Quando si invia lo stesso messaggio a più destinatari, è possibile utilizzare la stessa chiave simmetrica per tutti i destinatari e quindi crittografarla mediante la chiave pubblica di ogni destinatario specifico. Poiché può essere decrittografata solo dal proprietario della chiave privata, la chiave simmetrica rimane un segreto condiviso tra utenti autorizzati. È possibile generare chiavi simmetriche per uso singolo durante una determinata operazione o sessione. Tali chiavi sono definite "chiavi di sessione". La crittografia a chiave pubblica può potenziare e non sostituire quella con chiavi simmetriche.

L'obiettivo della crittografia dei messaggi è quello di garantire che un messaggio rimanga illeggibile finché non viene presentata la chiave privata. Quest'ultima può essere utilizzata nella negoziazione delle chiavi simmetriche per garantirne la trasmissione protetta. Poiché una chiave simmetrica può essere trasmessa in modo protetto a un destinatario, è possibile utilizzarla per crittografare un messaggio e quindi crittografare la chiave stessa utilizzando la chiave pubblica di una coppia di chiavi. Solo il proprietario della chiave privata potrà sbloccare la chiave simmetrica, che a questo punto potrà essere utilizzata per decrittografare il messaggio. Questa operazione produce un risultato analogo a quello che è possibile ottenere se l'intero messaggio viene crittografato e decrittografato mediante la coppia di chiavi, ma in modo molto più rapido ed efficiente, poiché alla maggior parte delle informazioni viene applicata una chiave simmetrica più rapida. Durante questo processo, il messaggio rimane protetto fino al momento della presentazione della chiave privata, in modo da garantire la riservatezza dei dati, elemento fondamentale della crittografia dei messaggi. Inoltre, l'eventuale manomissione di un messaggio dopo che è stato crittografato ne impedisce la decrittografia, garantendo così l'integrità dei dati.

Anche se i vantaggi di questo tipo di applicazione delle chiavi simmetriche possono non essere immediatamente evidenti, la protezione dei messaggi risulta notevolmente migliorata poiché è possibile eseguire la crittografia in modo molto più veloce senza correre alcun rischio. Nella figura seguente è illustrata la sequenza relativa alla crittografia di un messaggio di posta elettronica con l'aggiunta degli elementi di supporto della crittografia a chiave pubblica.

21058391-2d70-42f9-bf25-8ead79705b27

  1. Cattura del messaggio.
  2. Recupero della chiave pubblica del destinatario.
  3. Generazione di una chiave di sessione simmetrica per uso singolo.
  4. Crittografia del messaggio mediante la chiave di sessione.
  5. Crittografia della chiave di sessione mediante la chiave pubblica del destinatario.
  6. Aggiunta della chiave di sessione crittografata al messaggio crittografato.
  7. Invio del messaggio.

Nella figura seguente è illustrata la sequenza relativa alla decrittografia con l'aggiunta degli elementi di supporto della crittografia a chiave pubblica.

50f0afca-e520-46b5-8e12-6e295dfe86d9

  1. Ricezione del messaggio.
  2. Recupero del messaggio crittografato e della chiave di sessione crittografata.
  3. Recupero della chiave privata del destinatario.
  4. Decrittografia della chiave di sessione con la chiave privata del destinatario.
  5. Decrittografia del messaggio con la chiave di sessione decrittografata.
  6. Recapito del messaggio non crittografato al destinatario.

In questa sequenza viene mostrato come la crittografia a chiave pubblica fornisce il supporto necessario per i servizi fondamentali della crittografia dei messaggi, ovvero la riservatezza e l'integrità dei dati.

Utilizzo della crittografia a chiave pubblica nelle firme digitali e nella crittografia dei messaggi

Le firme digitali e la crittografia dei messaggi sono servizi complementari. Una volta illustrata l'integrazione della crittografia a chiave pubblica con ogni singolo servizio, è utile esaminare il modo in cui questi due servizi interagiscono tra loro.

Nella figura seguente è illustrata la sequenza relativa alla firma e alla crittografia con l'aggiunta degli elementi di supporto della crittografia a chiave pubblica.

e81cca9b-c780-49d9-a3f9-69cc3c442183

  1. Cattura del messaggio.
  2. Calcolo del valore hash del messaggio.
  3. Recupero della chiave privata del mittente.
  4. Recupero della chiave pubblica del destinatario.
  5. Crittografia del valore hash con la chiave privata del mittente.
  6. Aggiunta al messaggio, come firma digitale, del valore hash crittografato.
  7. Generazione di una chiave di sessione simmetrica per uso singolo.
  8. Crittografia del messaggio mediante la chiave di sessione.
  9. Crittografia della chiave di sessione mediante la chiave pubblica del destinatario.
  10. Aggiunta della chiave di sessione crittografata al messaggio crittografato.
  11. Invio del messaggio.

Nella seguente figura è illustrata la sequenza relativa alla decrittografia e alla verifica della firma digitale con l'aggiunta degli elementi di supporto della crittografia a chiave pubblica.

97705e57-0a94-4197-99c3-40bb58a9eaa0

  1. Ricezione del messaggio.
  2. Recupero del messaggio crittografato e della chiave di sessione crittografata.
  3. Recupero della chiave privata del destinatario.
  4. Decrittografia della chiave di sessione con la chiave privata del destinatario.
  5. Decrittografia del messaggio con la chiave di sessione decrittografata.
  6. Recupero della firma digitale contenente il valore hash crittografato dal messaggio.
  7. Calcolo del valore hash del messaggio.
  8. Recupero della chiave pubblica del mittente.
  9. Decrittografia del valore hash crittografato con la chiave pubblica del mittente.
  10. Confronto del valore hash decrittografato con quello generato al momento della ricezione.
  11. Se i valori corrispondono, il messaggio è valido.
  12. Recapito del messaggio non crittografato al destinatario.

In questa sequenza viene mostrato come la crittografia a chiave pubblica rende possibile l'utilizzo delle firme digitali e della crittografia dei messaggi.

È opportuno notare che la chiave pubblica o privata di una parte è richiesta dall'altra parte in base all'operazione da eseguire. Ad esempio, il mittente deve disporre di una chiave privata per la firma digitale della posta elettronica, ma deve anche disporre della chiave pubblica del destinatario per inviare la posta elettronica crittografata. Nella figura seguente è riportato un diagramma in cui sono indicate le diverse chiavi richieste dalle parti per ogni singola operazione.

ef4e76b6-4799-45a9-90f8-ec7af508152a

Un altro elemento importante della protezione è rappresentato dai certificati digitali, che rendono possibile l'utilizzo di firme digitali e crittografia mediante la distribuzione di coppie di chiavi.