Nel 1983, dalla collaborazione del MIT, Digital Equipment Corp. ed IBM, è stato sviluppato il sistema di autenticazione di rete Kerberos. Come il nome ricorda il cane a tre teste della mitologia greca a guardia degli inferi (Cerbero), tale simbolo si rifà ai tre scopi principali del progetto: autenticazione, autorizzazione e accounting. Al momento Kerberos è arrivato alla versione 5 (v. RFC 1510).
Kerberos utilizza un sistema di autenticazione a terza parte fidata. I principal (utenti e macchine) si autenticano tramite un KDC (Key Distribution Center) che rappresenta la terza parte fidata. Questo è possibile grazie al fatto che ogni principal condivide una chiave con il KDC.
L’autenticazione può essere sia one-way che two-way, ovvero un principal si autentica ad un altro che se lo desidera può autenticarsi a sua volta a lui.
Ogni autenticazione ha una periodo di vita limitato (circa la durata di una sessione di login)
La richiesta delle credenziali avviene soltanto nel momento di inizio della sessione, ovvero una gestione di tipo single-sign-on.
[da completare ...]
Un principal è un un’entità alla quale Kerberos può assegnare ticket. Gli identificativi dei principal sono suddivisi generalmente in tre parti, secondo la seguente sintassi:
primary/instance@realm
dove:
Ogni messaggio cifrato è contenuto in un involucro (ASN.1) che, oltre a contenenre il messaggio cifrato, indica l’algoritmo di cifratura utilizzato e la versione della chiave.
Un client (un utente o un servizio) invia una richiesta di autenticazione ad un AS, richiedendo le credenziali per un certo server. L’AS, che contiene l’elenco dei principal e le relative chiavi, risponde con le credenziali cifrate con la chiave del client. Le credenziali consistono in un ticket per il server ed una chiave di cifratura temporanea (detta anche chiave di sessione). Il client trasmette un ticket contenente l’identità del client ed una copia della chiave di sessione, il tutto cifrato con la chiave del server al server che vuole utilizzare. In questo modo il client ed il server condividono la stessa chiave di sessione che viene utilizzata per autenticare il client ed eventualmente il server. Essa può essere anche utilizzata per cifrare la comunicazione successiva o per scambiare altre chiavi di sessione con le quali cifrare la comunicazione.
(figura) [da completare ...]
Per verificare l’identità dei principal in una comunicazione, il client trasmette il ticket al server. Il ticket contiene una parte detta authenticator che include un timestamp ed è cifrata con la chiave di sessione. In questo modo il client prova al server che il ticket è stato richiesto di recente e che il il ticket è stato generato da un principal che conosce la chiave di sessione.
L’integrità dei messaggi scambiati è garantita per mezzo di un checksum (un message digest) che è cifrato con la chiave di sessione.
Kerberos può essere utilizzato anche per autenticazioni tra ambienti (realm) diversi. Ogni realm ha un proprio KDC che autentica i propri principal. Il nome di ogni principal comprende anche quello del realm a cui appartiene.
Per far sì che un principal di un realm si possa autenticare con un principal di un altro realm, si devono stabilire delle chiavi inter-realm relative ai KDC dei realm interessati. Nel KDC del realm A viene memorizzata la chiave inter-realm del KDC del realm B e viceversa, in maniera tale che il KDC del realm A diviene un pincipal del realm B ed il KDC del realm B un principal del realm A. Un pincipal del realm A può quindi richiedere l’autenticazione verso un principal del realm B ed il KDC del realm A fornisce al principal che desidera autenticarsi un TGT valido per il realm B (cifrato con la chiave inter-realm in maniera tale che il KDC del realm B possa decifrarlo).
(figura) [da completare ...]