Negli anni novanta divenne palese che lo standard crittografico più utilizzato fino a quel momento, il DES, non era più all’altezza dello sviluppo tecnico; un nuovo standard era dunque necessario. Per questo motivo si stabilì come successore l’algoritmo Rijndael, il cui nome deriva dai suoi sviluppatori Vincent Rijmen e Joan Daemen. Questo algoritmo è un procedimento, che per via della sicurezza, flessibilità e performance venne utilizzato per un bando pubblico e successivamente, alla fine del 2000, certificato dal NIST come Advanced Encryption Standard (AES).
Anche AES suddivide il testo in chiaro da cifrare in blocchi, dunque entrambi questi due sistemi crittografici sono basati su un cifrario a blocchi. Lo standard AES supporta le chiavi a 128, 192 e a 256 bit. Invece che blocchi da 64 bit, con AES, i blocchi sono chiaramente più grandi, difatti vengono utilizzati i blocchi a 128 bit, i quali vengono cifrati secondo cicli consecutivi, grazie all’aiuto di una rete a sostituzione e permutazione (SPN). Anche il successore del DES utilizza una nuova chiave ad ogni ciclo, che deriva ricorsivamente dalla chiave in uscita, la quale viene collegata al blocco di dati da cifrare con un’operazione di XOR. Lo svolgimento della cifratura può essere grossolanamente riportato nei seguenti quattro passaggi:
1. Espansione della chiave: come con DES, AES utilizza una nuova chiave di sessione ad ogni combinazione. Questa viene derivata dalla chiave in uscita tramite la ricorsività. In questo modo la chiave in uscita viene espansa in lunghezza, permettendo così di portare il numero delle sottochiavi a 128 bit. Ogni chiave di sessione si basa su di un segmento della chiave in uscita espansa. Il numero delle sottochiavi necessarie ammonta al numero dei cicli di cifratura (R) più una chiave di sessione per il preciclo (numero delle chiavi = R + 1).
2. Preciclo: nel preciclo viene riportato il blocco di partenza a 128 bit in una tabella bidimensionale (array) e viene connesso con la chiave di sessione tramite un’operazione di XOR (KeyAddition). La tabella si compone di 4 righe e 4 colonne, ed ogni cella contiene un byte (unità di misura corrispondente ad 8 bit) del blocco da criptare.
3. Cicli di cifratura: il numero dei cicli dipende dalla lunghezza di chiavi utilizzata: 10 cicli con l’AES128, 12 cicli con l’AES192 e 14 cicli con l’AES256. In ogni ciclo vengono compiute le seguenti operazioni:
- SubBytes: i SubBytes si trovano nella fase in cui avviene una sostituzione monoalfabetica. Ogni byte del blocco da criptare viene sostituito con un equivalente tramite le scatole di sostituzione.
- ShiftRows: la ShiftRow è invece una fase di trasformazione nella quale i byte vengono spostati ciclicamente verso sinistra nelle celle dell’array (vedi preciclo).
- MixColumns: anche questa è una fase di trasformazione; i dati all’interno delle colonne dell’Array vengono mescolati. Questo passaggio si basa su un nuovo conteggio di ogni singola cella. Inoltre le colonne dell’array vengono moltiplicati per la matrice e il risultato collegato tramite XOR.
- KeyAddition: Alla fine di ogni ciclo avviene un’ulteriore KeyAddition (espansione). Questo, come nel preciclo, si basa su un collegamento XOR del blocco dati con la chiave di sessione.
4. Ciclo finale: si tratta dell’ultimo ciclo crittografico. Diversamente dai cicli precedenti, l’ultimo ciclo salta la fase di mescolamento delle colonne (MixColumns). Al termine di questo ciclo si ottiene il testo segreto.
La decodifica dei dati cifrati secondo lo standard AES avviene tramite l’utilizzo dello stesso algoritmo di cifratura e fa riferimento sia ai vari passaggi sopra indicati sia alle operazioni ShiftRow, MixColumns e SubBytes, la cui direzione viene però invertita.
AES, grazie al suo algoritmo, garantisce un’elevata sicurezza. Tutt’ora non è conosciuto alcun attacco capace di decifrare i dati cifrati con questo procedimento. Gli attacchi di forza bruta risultano del tutto inefficaci a partire da una lunghezza delle chiavi di 128 bit. Dunque le operazioni ShiftRows e MixColumns offrono un mix di bit ottimale: alla fine dei conti ogni bit è dipendente dalla chiave. Questo sistema crittografico risulta quindi convincente per la sua facile implementazione e per l’alta velocità di criptazione. L’AES viene utilizzato nei cifrari delle WPA2, SSH e IPSec, oltre ad altri. In aggiunta a questi, l’algoritmo viene usato per la crittografia di archivi di file quali 7-Zip e RAR.
Tuttavia la sicurezza dei dati cifrati con lo standard AES è mantenuta fin quando la chiave rimane segreta. Venendo utilizzata la medesima chiave sia in fase di codifica sia in fase di decodifica, il sistema crittografico AES, così come qualunque altro cifrario simmetrico, è soggetto al problema di trasmissione della chiave. L’utilizzo sicuro dell’AES si limita dunque ai campi di utilizzo che non richiedono alcuna trasmissione di chiave o che permettono la trasmissione di quest’ultima tramite un canale sicuro.
Ad ogni modo le comunicazioni cifrate in Internet richiedono che i dati siano criptati su di un computer e decriptati su un computer differente. È per questo che vengono solitamente utilizzati sistemi crittografici asimmetrici, i quali permettono lo scambio in totale sicurezza delle chiavi simmetriche o che funzionano anche senza dover trasmettere alcuna chiave comune.
Come alternativa ad AES vi sono altri cifrari simmetrici a blocchi, come MARS, RC6, Serpent e Twofish; tutti questi erano i finalisti del bando per diventare il nuovo AES, al fianco dell’algoritmo Rijndael. Anche Blowfish, il predecessore di Twofish, è tuttora in uso. Merita considerazione anche il cifrario a flusso Salsa20, sviluppato nel 2005 da Daniel J. Bernstein, e finalista del progetto europeo eSTREAM.