Abbiamo visto che l'utente digita la propria password mentre il software client utilizza una chiave di cifratura simmetrica.
In Kerberos, non esistono limitazioni sulla lunghezza della password scelta dall'utente, mentre molti algoritmi di cifratura utilizzano una chiave a lunghezza fissa.
La tecnica adottata per utilizzare la password dell'utente nelle operazioni di cifratura è basata su una conversione che trasforma la password in una chiave di cifratura simmetrica, questa operazione è implementata dalla funzione string2key.
L'approccio che si segue è quello di applicare una funzione HASH alla stringa composta concatenando la password dell'utente con un "SALT" il cui valore varia a secondo delle versioni di Kerberos e che serve a rendere la trasformazione sulla password dipendente dalla macchina sulla quale è effettuata.
Quindi per implementare lo scambio di messaggi visto prima tra AS, client e server, sono necessari tre elementi:
Nelle prime versioni di Kerberos l'unico algoritmo crittografico supportato era il DES, associato ad esso vi erano una funzione HASH ottenuta dal DES in una particolare modalità operativa e l'algoritmo CRC-32 per il calcolo dei checksum.
Inoltre nelle versioni di Kerberos precedenti alla versione 5 non veniva utlizzato il SALT e quindi questo aveva un valore "NULLO".
Con la versione 5 di Kerberos è stato introdotto un maggiore livello di astrazione rispetto al passato, per cui virtualmente qualsiasi algoritmo crittografico è supportato, inoltre si potrebbe in teoria scegliere una qualsiasi funzione HASH per la conversione "password2key" ed un qualsiasi algoritmo per i checksum.
Di fatto però gli algoritmi disponibili attualmente sono:
In particolare vediamo come è implementata la funzione Hash per la trasformazione da password a chiave quando l'algoritmo usato è il DES.
Essenzialmente questa funzione applica una trasformazione alla password dalla quale ottiene una chiave di 64 bit valida per il DES.
Qundi utilizza questa chiave per cifrare la password con il DES in modalità PCBC, che come vedremo è una modalità operativa derivata dalla modalità CBC che ha la caratteristica di "propagare" un eventuale errore a tutti i blocchi successivi a quello in cui si esso si è verificato.
In questo modo un errore in un passaggio produrrà sicuramente una chiave non valida.
La figura seguente illustra tale conversione:
Inizialmente la password è memorizzata nella stringa di caratteri "s". Si procede compattando la stringa "s" nella stringa di bit "b" copiando i primi 7 bit di ogni carattere, eliminando l'ottavo bit che in una chiave DES è il bit di parità. (questa operazione è giustificata dal fatto che in Kerberos 4 solo caratteri ASCII erano ammessi come password e i caratteri ASCII sono codificati con 7 bit quindi tagliando l'ottavo bit non si perdono informazioni).
Formalmente avviene questo:
b[0] = bit 0 di s[0] ... b[6] = bit 6 di s[0] b[7] = bit 0 di s[1] ... b[7i + m] = bit m di s[i] 0 <= m <= 6
La stringa così ottenuta viene ripiegata " a ventaglio " in blocchi da 56 bit, calcolando poi l'XOR tra i bit che si andranno a sovrapporre. Per esempio se la stringa è di 59 bit si avrà
b[55] = b[55] XOR b[56] b[54] = b[54] XOR b[57] b[53] = b[53] XOR b[58]
Abbiamo così ottenuto la chiave a 56-bit per il DES. Per essere conformi allo standard la stringa viene estesa nuovamente inserendo l'ottavo bit di parità ad ogni byte della stringa. Otteniamo in tal modo una chiave di cifratura di 64-bit che chiamiamo Kpw. Questa è la chiave che verrà utilizzata col DES nella modalità operativa PCBC per cifrare la password e ottenere dalla cifratura un HASH che sarà usato come chiave segreta.
La modalità operativa PCBC del DES è strettamente derivata dalla più famosa modalità CBC. La modalità operativa del DES CBC, lo ricordiamo, effettua, ad ogni stadio della cifratura, l'XOR del testo in chiaro corrente e il precedente blocco di testo cifrato. Per la cifratura viene utilizzata sempre la stessa chiave.
La caratteristica di questa modalità è che lo stesso blocco di testo in chiaro, se ripetuto, produce differenti blocchi di testo cifrato.
Inoltre se nell'atto della trasmissione si verifica un errore ad esempio nel blocco Ci, tale errore si propagherà nei blocchi di testo in chiaro Pi e P(i+1).
Con la modalità operativa PCBC invece un eventuale errore di trasmissione di un blocco cifrato si propagherà a tutti i successivi blocchi decifrati rendendo ogni blocco corrotto. In tal modo cifratura e integrità dei dati sono combinati in unica operazione.
La seguente figura descrive la modalità PCBC. Abbiamo evidenziato in rosso le differenze con la modalità classica CBC.
P1, P2...Pn sono blocchi di 64-bit che costituiscono la password dell'utente; se la lunghezza della password non è multipla di 64 verrà effettuato un padding.
IV è il vettore di inizializzazione e il suo valore dipende dalle implementazioni.
Kpw è la chiave DES per la cifratura a 64-bit (solo 56-bit significativi).
C1, C2,...Cn sono i blocchi di testo cifrato che rappresentano la password dell'utente modificata e cifrata, solo l'ultimo blocco però verrà memorizzato nel DB dell'AS come chiave segreta.