Crittografia Simmetrica

La crittografia simmetrica è una tecnica di crittografia in cui mittente e destinatario condividono la stessa chiave segreta per cifrare e decifrare i messaggi. Il problema di scambiare una chiave segreta su un canale pubblico verrà discusso nella sezione successiva, per il momento assumiamo che le parti comunicanti abbiano già concordato una chiave segreta.

Il cifrario AES (Advanced Encryption Standard) ed è una specifica per la crittografia dei dati elettronici stabilita dal National Institute of Standards and Technology (NIST) degli Stati Uniti nel 2001 ed è il cifrario simmetrico più comunemente utilizzato.

Questo è un algoritmo a blocchi, ovvero cifra i dati in blocchi di 128 bit, e supporta chiavi di 128, 192 e 256 bit. L'algoritmo è stato progettato per essere efficiente sia in termini di velocità che di memoria. Dal momento che AES cifra i dati in blocchi, è necessario un metodo per gestire i dati che non sono multipli di 128 bit. Questo viene fatto attraverso l'uso di modalità di operazione, che specificano come i blocchi di dati vengono cifrati e decifrati.

Modalità di operazione di AES

ECB

Il modo più intuitivo di utilizzare un cifrario a blocchi è la modalità ECB (Electronic Codebook). In questa modalità il messaggio viene diviso in blocchi di 128 bit e ogni blocco viene cifrato indipendentemente dagli altri. Al messaggio viene aggiunto del padding se necessario per raggiungere una lunghezza che sia multiplo di 128 bit. La seguente immagine mostra come funziona la modalità ECB:

è facile vedere che la decifratura di un testo cifrato con la modalità ECB è semplicemente la decifratura di ogni blocco di testo cifrato. Questa modalità è molto semplice da implementare e veloce, ma ha un grosso difetto: se due blocchi di testo in chiaro sono uguali, i blocchi cifrati saranno uguali. Questo non rispetta il requisito di nascondere la struttura del testo in chiaro e in alcuni casi può rivelare informazioni sul testo in chiaro. La seguente immagine mostra come un'immagine bitmap cifrata con la modalità ECB permette di riconoscere alcuni pattern sul contenuto dell'immagine originale:

In un certo senso si può vedere la modalità ECB come un cifrario a sostituzione monoalfabetica, dove ogni blocco di testo in chiaro viene cifrato con la stessa chiave. Per evitare questo problema si utilizzano altre modalità di operazione.

CBC

Per ovviare a questo problema si utilizza la modalità CBC (Cipher Block Chaining). In questa modalità il primo blocco di testo in chiaro viene cifrato con la chiave segreta e il risultato viene combinato con il secondo blocco di testo in chiaro tramite l'operazione XOR. Il risultato di questa operazione viene cifrato e cosi' via per tutti i blocchi di testo in chiaro. La seguente immagine mostra come funziona la modalità CBC:

Si vede chiaramente come un cambiamento nel primo blocco di testo in chiaro si propaghi a tutti i blocchi successivi, rendendo difficile riconoscere pattern nel testo cifrato. Dal momento che il primo blocco di testo in chiaro non ha un blocco precedente con cui combinarsi, si utilizza un blocco di inizializzazione (IV) che viene combinato con il primo blocco di testo in chiaro. L'IV deve essere casuale e non deve essere riutilizzato con la stessa chiave, altrimenti il cifrario diventa vulnerabile ad alcuni attacchi. Da notare che sebbene l'IV debba essere casuale non deve essere segreto, al contrario viene normalmente inviato insieme al testo cifrato. La decifratura di un testo cifrato con la modalità CBC è un po' più complessa rispetto alla modalità ECB, ma è comunque abbastanza semplice: si decifra il testo cifrato e si combina con il blocco precedente tramite l'operazione XOR, come mostrato nella seguente immagine:

CTR

Nella modalità CTR (Counter) AES non è utilizzato come un cifrario a blocchi ma come un generatore di flusso di byte (stream cipher). In questa modalità si utilizza un contatore che viene cifrato con la chiave segreta e combinato con il blocco di testo in chiaro tramite l'operazione XOR. La seguente immagine mostra come funziona la modalità CTR:

Il nonce è un numero casuale che viene combinato con il contatore per generare il blocco di testo cifrato. Anche in questo caso il nonce non è privato ma deve essere casuale e non deve essere riutilizzato con la stessa chiave. Un nonce ripetuto con la stessa chiave genera lo stesso flusso di byte, rendendo il cifrario vulnerabile a Many Time Pad. Per le proprietà dello XOR la decifratura di un testo cifrato con la modalità CTR è identica alla cifratura. Da notare che con questa modalità di operazione non è necessario aggiungere padding al testo in chiaro, in quanto è possibile troncare il flusso di byte cifrato al termine del testo in chiaro, questo pero' significa che CTR rivela la lunghezza del testo in chiaro, cosa che potrebbe essere un problema in alcuni contesti.