Gestione delle chiavi
Quando si usa la crittografia, sia simmetrica che asimmetrica, si ha il problema di come gestire, e in particolare distribuire, le chiavi:
- le chiavi simmetriche devono essere condivise in modo segreto solo da chi deve usarle
- per le chiavi pubbliche non serve la segretezza, ma è invece importante dare una prova dell’associazione tra una chiave e l’identità dell’utente a cui essa appartiene.
Dati i diversi requisiti della distribuzione delle chiavi simmetriche e di quelle pubbliche, le soluzioni nei due casi applicate sono diverse. Adesso verranno presentate le principali soluzioni, a partire da quelle per le chiavi simmetriche.
Gestione delle chaivi simmetriche
Tipicamente, una chiave simmetrica è associata a un canale (o a una sessione) di comunicazione tra due utenti/entità, è condivisa da solo due utenti che la usano per comunicare in modo sicuro tra di loro. Allora, per gestire tutte le possibili comunicazioni sicure tra $n$ utenti servono almeno
$$
\dbinom n 2 = \frac{n!}{2!(n-2)!}=\frac{n(n-1)}{2}
$$
chiavi simmetrihe (una per ogni coppia non ordinata di utenti), che è un numero molto grande (quadratico nel numero $n$ di utenti).
La più semplice soluzione per la gestione delle chiavi sarebbe affidare a un amministratore il compito di distribuire a ogni utente, ovvero configurare manualmente su ogni macchina, tutte le chiavi necessarie, ma ciò è assolutamente non scalabile:
- se una rete ha un numero significativo di utenti/nodi le chiavi da distribuire sono troppe, sopratutto considerando che non basta distribuirle una volta, ma bisogna periodicamente sostituirle per evitare che ci sia tempo di ottenerle mediante attacchi a forza bruta mentre sono ancora in uso;
- a ogni cambiamento della topologia della rete, ovvero a ogni inserimento o rimozione di un ($n+1$)-esimo utente nel gruppo, è necessario distribuire o ritirare una chiave a ciascuno degli $n$ altri utenti.
Servono periò dei protocolli sicuri per automatizzare la generazione e lo scambio di chiavi simmetriche.
I protocolli per la gestione delle chaivi simmetriche possono essere classificati in due famiglie, in base al servizio che offrono:
- key transport: la chiave simmetrica viene generata dalle due parti comunicanti, oppure da un’entità esterna (KDC, Key Distribution Center), poi si utilizza un protocollo per trasportare tale chiave alle parti interessate in modo sicuro, impedendo che altri possano leggerla o modificarla / sostituirla;
- key agreement: la chiave viene generata tramite un protocollo che coinvolge entrambe le parti, le quali si scambiano delle informazioni pubbliche, non riservate, ed eseguono delle computazioni locali indipendenti tramite le quali arrivano a ottenere lo stesso valore della chiave (si “metddono d’accordo” sulla chiave, da cui il termine “agreement”), senza mai trasportare la chiave stessa.
Nel seguito verranno presentati:
- il protocollo di key transport Needham-Schroeder, nelle sue versioni a chiave pubblica e a chiave segreta
- il protocollo di key agreement Diffie-Hellman