# Advanced Encryption Standard

In crittografia, l'Advanced Encryption Standard (AES), conosciuto anche come Rijndael, di cui più propriamente è una specifica implementazione, è un algoritmo di cifratura a blocchi a chiave simmetrica, utilizzato come standard dal governo degli Stati Uniti d'America.
Data la sua sicurezza e le sue specifiche pubbliche si presume che in un prossimo futuro venga utilizzato in tutto il mondo come è successo al suo predecessore, il Data Encryption Standard (DES) che ha perso poi efficacia per vulnerabilità intrinseche. AES è stato adottato dalla National Institute of Standards and Technology (NIST) e dalla US FIPS PUB nel novembre del 2001 dopo cinque anni di studi, standardizzazioni e selezione finale tra i vari algoritmi proposti.
L'algoritmo scelto è stato sviluppato da due crittografi belgi, Joan Daemen e Vincent Rijmen, che lo hanno presentato al processo di selezione per l'AES con il nome di "Rijndael", derivato dai nomi degli inventori.

## Descrizione

Rijndael è un'evoluzione del primo algoritmo sviluppato da Daemen e Rijmen, Square, che era stato sviluppato per SHARK.
A differenza del DES, Rijndael è una rete a sostituzione e permutazione, non una rete di Feistel, che implementa comunque il principio crittografico di Shannon di "confusione e diffusione". AES è veloce sia se sviluppato in software sia se sviluppato in hardware, è relativamente semplice da implementare, richiede poca memoria e offre un buon livello di protezione, motivi che complessivamente l'hanno reso il preferito rispetto agli altri algoritmi proposti.
Il nuovo standard di cifratura sta sostituendo i precedenti standard e la sua diffusione continua ad aumentare. Formalmente, AES non è equivalente al Rijndael (sebbene nella pratica siano intercambiabili) dato che il Rijndael gestisce differenti dimensioni di blocchi e di chiavi. Nell'AES il blocco è invece di dimensione fissa (128 bit) e la chiave può essere di 128, 192 o 256 bit mentre il Rijndael specifica solo che il blocco e la chiave devono essere un multiplo di 32 bit con 128 bit come minimo e 256 bit come massimo.
AES opera utilizzando matrici di $4\times 4$ byte chiamate stati (states). Quando l'algoritmo ha blocchi di 128 bit in input, la matrice State ha 4 righe e 4 colonne; se il numero di blocchi in input diventa di 32 bit più lungo, viene aggiunta una colonna allo State, e così via fino a 256 bit. In pratica, si divide il numero di bit del blocco in input per 32 e il quoziente specifica il numero di colonne.
C'è un passaggio iniziale:
* AddRoundKey – Ogni byte della tabella viene combinato con la chiave di sessione, la chiave di sessione viene calcolata dal gestore delle chiavi.
Successivamente per cifrare sono previsti diversi round o cicli di processamento: ogni round (fase) dell'AES (eccetto l'ultimo) consiste dei seguenti quattro passaggi fondamentali che vengono denominati LAYERS:
* SubBytes – Sostituzione non lineare di tutti i byte che vengono rimpiazzati secondo una specifica tabella.
* ShiftRows – Spostamento dei byte di un certo numero di posizioni dipendente dalla riga di appartenenza.
* MixColumns – Combinazione dei byte con un'operazione lineare, i byte vengono trattati una colonna per volta.
* AddRoundKey – Ogni byte della tabella viene combinato con la chiave di sessione, la chiave di sessione viene calcolata dal gestore delle chiavi.
Il numero di round o cicli di processamento/elaborazione crittografica dei quattro passaggi precedenti è 10 con l'ultimo round che salta il passaggio MixColumns. A seguito la descrizione di ogni singolo passaggio.
La fase di decifratura non è identica a quella di cifratura dal momento che i passaggi sono eseguiti in ordine inverso. Tuttavia, si può definire un cifrario inverso equivalente ai passi dell'algoritmo usato per la cifratura, usando la funzione inversa a ogni step e un differente gestore delle chiavi. Funziona siccome il risultato non cambia quando si scambiano la fase di SubBytes con quella di ShiftRows, e quella di MixColumns con una fase aggiuntiva di AddRoundKey.

### SubBytes

Nel passaggio SubBytes ogni byte della matrice viene modificato tramite la S-box a 8 bit. Questa operazione provvede a fornire la non linearità all'algoritmo.
La S-box utilizzata è derivata da una funzione inversa nel campo finito GF($2^{8}$), conosciuta per avere delle ottime proprietà di non linearità. Per evitare un potenziale attacco basato sulle proprietà algebriche la S-box è costruita combinando la funzione inversa con una trasformazione affine invertibile. La S-box è stata scelta con cura per non possedere né punti fissi né punti fissi opposti.

### ShiftRows

Il passaggio ShiftRows provvede a spostare le righe della matrice di un parametro, e dipende dal numero di riga. Nell'AES la prima riga resta invariata, la seconda viene spostata di un posto verso sinistra, la terza di due posti e la quarta di tre. In questo modo l'ultima colonna dei dati in ingresso andrà a formare la diagonale della matrice in uscita (Rijndael utilizza invece un disegno leggermente diverso per via delle matrici di lunghezza non fissa).
Tutte le operazioni sono effettuate utilizzando l'indice della colonna modulo il numero di colonne.

### MixColumns

Il passaggio MixColumns prende i quattro byte di ogni colonna e li combina utilizzando una trasformazione lineare invertibile. Utilizzati in congiunzione, ShiftRows e MixColumns provvedono a far rispettare il criterio di confusione e diffusione nell'algoritmo (teoria di Shannon). Ogni colonna è trattata come un polinomio in GF(2$^8$) e viene moltiplicata modulo $x^{4}+1$ per un polinomio fisso $c(x)=3x^{3}+x^{2}+x+2$.

### AddRoundKey

Il passaggio AddRoundKey combina con uno XOR la chiave di sessione con la matrice ottenuta dai passaggi precedenti (State). Una chiave di sessione viene ricavata dalla chiave primaria ad ogni round (con dei passaggi più o meno semplici, per esempio uno shift di posizione dei bit) grazie al gestore della chiave.

## Sicurezza

La National Security Agency (NSA) segnalava che tutti i finalisti del processo di standardizzazione erano dotati di una sicurezza sufficiente per diventare l'AES, ma che fu scelto il Rijndael per via della sua flessibilità nel trattare chiavi di lunghezza diversa, per la sua semplicità di implementazione in hardware e in software e per le sue basse richieste di memoria, che ne consentono un'implementazione anche in dispositivi con scarse risorse come le smart card.
L'AES può essere utilizzato per proteggere le informazioni classificate: Per il livello SECRET è sufficiente una chiave a 128 bit, mentre per il livello TOP SECRET si consigliano chiavi a 192 o 256 bit. Questo significa che per la prima volta il pubblico ha accesso a una tecnologia crittografica che la NSA ritiene adeguata per proteggere i documenti TOP SECRET. Si è discusso sulla necessità di utilizzare chiavi lunghe (192 o 256 bit) per i documenti TOP SECRET. Alcuni ritengono che questo indichi che l'NSA ha individuato un potenziale attacco che potrebbe forzare una chiave relativamente corta (128 bit), mentre la maggior parte degli esperti ritiene che le raccomandazioni dell'NSA siano basate principalmente sul volersi garantire un elevato margine di sicurezza per i prossimi decenni contro un potenziale attacco esaustivo.
La maggior parte degli algoritmi crittografici viene forzata riducendo il numero di round. L'AES effettua dieci round per la chiave a 128 bit, dodici round per la chiave a 192 bit e quattordici round per la chiave a 256 bit. Al 2006, i migliori attacchi sono riusciti a forzare l'AES con sette round e chiave di 128 bit, otto round e chiave di 192 bit e nove round e chiave di 256 bit.
Alcuni crittografi hanno fatto notare che la differenza tra i round effettuati dall'AES e quelli massimi prima che l'algoritmo non sia più forzabile è ridotta (specialmente con chiavi corte). Questi temono che miglioramenti nelle tecniche di analisi possano permettere di forzare l'algoritmo senza verificare tutte le chiavi. Attualmente una ricerca esaustiva è impraticabile: la chiave a 128 bit produce 3,4×10$^{38}$ combinazioni diverse. Uno dei migliori attacchi a forza bruta è stato svolto dal progetto distributed.net su una chiave a 64 bit per l'algoritmo RC5; l'attacco ha impiegato quasi cinque anni, utilizzando il tempo libero di migliaia di CPU di volontari. Anche considerando che la potenza dei computer aumenta nel tempo, servirà ancora molto tempo prima che una chiave da 128 bit sia attaccabile con il metodo forza bruta. Molte banche mettono a disposizione per l'home banking dei propri clienti chiavi a 256 bit, con il risultato che si ottiene una cifratura ben $2^{128}$ volte più sicura di quella a 128 bit, sebbene quest'ultima possa considerarsi altamente sicura e invalicabile dai moderni PC.
Un altro dubbio riguardante l'AES deriva dalla sua struttura matematica. A differenza della maggior parte degli algoritmi a blocchi, per l'AES esiste un'approfondita descrizione matematica. Sebbene non sia mai stata utilizzata per condurre un attacco su misura, questo non esclude che in futuro questa descrizione non venga utilizzata per condurre un attacco basato sulle sue proprietà matematiche.
Nel 2002 l'attacco teorico chiamato attacco XSL, annunciato da Nicolas Courtois e Josef Pieprzyk, ha mostrato un potenziale punto debole dell'AES (e di altri cifrari). Sebbene l'attacco sia matematicamente corretto, è impraticabile nella realtà per via dell'enorme tempo macchina richiesto per metterlo in pratica. Miglioramenti nell'attacco hanno ridotto il tempo macchina richiesto e quindi, in un futuro, questo attacco potrebbe diventare attuabile. Ultimamente, alcuni esperti hanno fatto delle osservazioni agli autori dell'attacco. Sembra che abbiano commesso degli errori teorici e che, in realtà, le loro stime siano ottimistiche. Allo stato attuale, la reale pericolosità dell'attacco XSL è un punto interrogativo. Comunque, attualmente, l'AES è considerato un algoritmo veloce e sicuro e gli attacchi fino a ora presentati si sono rivelati degli interessanti studi teorici, ma di scarsa utilità nella pratica.
In data 1º luglio 2009 è stato pubblicato un attacco correlato alla chiave migliore del metodo forza bruta su tutti i round di AES-256 e AES-192. L'attacco in questione risulta comunque, per stessa ammissione degli autori (come chiarito nelle conclusioni dello studio), essere ancora solo teoricamente realizzabile e non dovrebbe influire in alcun modo sulla sicurezza delle odierne applicazioni che fanno uso di questo cifrario. A luglio del 2009, Bruce Schneier affermò, con un articolo sul suo blog, che questa scoperta avrebbe potuto influire negativamente sulla scelta di AES come blocco costitutivo dell'algoritmo di hash SHA-3, al tempo ancora in fase di definizione.