Il protocollo Kerberos fornisce un servizio di autenticazione in ambito distribuito. Esso fu inizialmente sviluppato negli anni ‘80 nell’ambito di un progetto di ricerca svolto dall’MIT insieme a IBM, che aveva l’obiettivo di realizzare un sistema di computing distribuito, il quale permettesse di connettersi a vari servizi da terminali presenti in un campus.
Le prime tre versioni di Kerberos furono usate internamente presso l’MIT, mentre la versione 4, ideata nel 1987 da Steve Miller e Clifford Neuman, fu resa pubblica. Infine, la versione 5 fu ideata nel 1990 da John Kohl e Clifford Neuman per risolvere alcune limitazioni della versione 4, e fu standardizzata tramite RFC (attualmente RFC 4120).
Lo scenario in cui Kerberos si applica è appunto l’autenticazione in ambito distribuito: gli utenti usano dei terminali, delle workstation, dai quali devono poter accedere ai servizi forniti da dei server. I server devono effettuare l’autenticazione e l’autorizzazione degli utenti, cioè devono essere in grado di:
Ci sono vari modi di affrontare questo problema. Una prima soluzione è un meccanismo di autenticazione point-to-point, basato sul verificare al livello di rete che una deterinata workstation stia comunicando con un determinato server. Tale meccanismo potrebbe magari essere facile da implementare, ma è insicuro, perchè non verifica quale sia l’utente che sta utilizzando una workstation in un determinato momento: un utente potrebbe “impadronirsi” illegalmente di una workstation e ottenere così l’accesso ai servizi per cui essa è autorizzata.
Un’altra soluzione è eseguire l’autenticazione tra gli utenti e i server, tipicamente tramite user ID e password. Essa può funzionare, ma ha dei notevoli limiti:
La soluzione fornita da Kerberos è un sistema centralizzato (server Kerberos) che si occupa di verificare l’autenticazione e l’autorizzazione degli utenti: prima di rivolgersi a un server per richiedere un servizio, l’utente si deve rivolgere al server Kerberos per richiedere l’autenticazione e l’autorizzazione.
Kerberos prende il nome dal cane a tre teste Cerbero, che nella mitologia greca protegge l’Ade. Le tre teste raprpesentano i tre importanti servizi di Authentication, Authorization e Accounting/Auditing (tenere traccia di tutto ciò che gli utenti fanno), detti “AAA”. Di questi tre servizi Kerberos implementa principalmente l’autenticazione, e implicitamente anche l’autorizzazione, mentre non implementa l’accounting/auditing.
Il protocollo di autenticazione Kerberos si basa sul Needham-Schroeder a chiave segreta, e come tale utilizza solo la crittografia simmetrica. Esso è un protocollo somplesso, dunque verrà presentato in modo incrementale, partendo da delle versioni semplificate per arrivare poi al reale protocollo della versione 4, e infine si introdurranno le differenze tra le versioni 4 e 5.
Qusta prima versione semplificata di Kerberos introduce nella rete un Authentication Server/Service (AS) fidato (chiamato anche Key Distribution Center, KDC), che conosce tutti gli username e le password degli utenti registrati e sa a quali server ogni utente è autorizzato ad accedere.
Un utente invia all’AS le proprie credenziali (username e password) e la richiesta di accesso a un dato server/servizio $V$(può essere che uno stesso server fornisca più servizi, e in tal caso le autorizzazioni sono comunque gestite separatamente per ciascun servizio). Se verifica che le credenziali sono corrette e che l’utente è autorizzato ad accedere al servizio richiesto, l’AS rilascia all’utente un ticket, un messaggio che l’utente dovrà esibire al server $V$ come prova dell’avvenuta autenticazione e autorizzazione. Si noti che l’AS non interagisce mai con il server $V$: esso invia il ticket all’utente, non al server, e spetta poi all’utente “spendere” tale ticket inviandolo al server.
Il ticket è cifrato con una chiave simmetrica $K_V$ che è condivisa solo dall’AS e dal server $V$, così: