Il crittosistema AES (acronimo di Advanced Encryption Standard) è stato scelto nel 2001 dal NIST come successore del crittosistema DES (acronimo Data Encryption Standard), utilizzato fino a quel momento e poi sostituito a causa delle numerose problematiche di sicurezza emerse negli ultimi anni, come sistema standard di sicurezza dal governo americano. L’algoritmo AES è anche noto con il nome di Rijndael, parola che deriva dall’unione dei nomi dei suoi due creatori: Joan Daemen e Vincent Rijmen. AES è stato pubblicato per la prima volta nel 1998 in seguito al bando aperto nel 1997 dal NIST.

I requisiti minimi che i critto-sistemi partecipati a tale bando dovevano possedere erano:

  • Utilizzo di chiavi con lunghezza variabile: 128 bit, 192 bit e 256 bit;
  • Operatività su blocchi a 128 bit;
  • Operatività su hardware molto differenti.

Modalità di funzionamento

Come il suo predecessore anche il critto-sistema AES è in grado di operare secondo quattro modalità differenti:

  • ECB;
  • CBC;
  • CFB;
  • OFB;
  • CTR.

In questo articolo ci limiteremo a descrivere la modalità ECB, o Electronic Code Block, si faccia riferimento alla guida a DES per le altre modalità.

Algoritmo di base

AES opera su stringhe di testo lunghe 128 bit che vengono poi trasformate in matrici quadrate 4×4 con celle da 8 bit. Ad esempio, la stringa s così costituita: s = a_{0,0}, a_{1,0}, a_{2,0}, \dots , a_{3,3} , viene codificata all’interno della matrice m così definita:

a_{0,0} a_{1,0} a_{2,0} a_{3,0}
a_{0,1} a_{1,1} a_{2,1} a_{3,1}
a_{0,2} a_{1,2} a_{2,2} a_{3,2}
a_{0,3} a_{1,3} a_{3,2} a_{3,3}

L’algoritmo AES prevede l’esecuzione di un numero variabile di round, il numero di questi round dipende strettamente dalla lunghezza della chiave in uso, ad esempio:

  • Con una chiave di 128 bit vengono eseguiti 10 round;
  • Con una chiave di 192 bit vengono eseguiti 12 round;
  • Con una chiave di 256 bit vengono eseguiti 14 round.

Ad ogni round l’algoritmo esegue quattro operazioni:

critto10

Le operazioni eseguite durante ogni round sono di seguito riassunte:

  • ByteSub Transformation, si tratta della trasformazione non lineare che rende l’algoritmo resistente alla critto-analisi, durante l’esecuzione questo step vengono utilizzate delle S-BOX al fine di modificare la matrice sorgente. Si procede con l’acquisizione di 8 bit contenuti all’interno del testo, i primi 4 bit vengono utilizzati per identificare la riga corretta all’interno della S-BOX, mentre i rimanenti 4 bit vengono utilizzati per identificare la colonna;
  • ShiftRow Transformation, sfrutta un mix lineare per provocare lo spargimento dei dati contenuti nella matrice. Tutte le righe della matrice vengono shiftate di un numero variabile di posizioni. La prima riga resta invariata, la seconda viene shiftata di una posizione, la terza di due e la quarta di tre;
  • MixColumn Transformation, la matrice viene moltiplicata con una seconda matrice al fine di ottenere uno sconvolgimento delle colonne. Questo step non viene eseguito durante l’ultimo round;
  • RoundKey Addition, la matrice ottenuta viene xorata con la chiave del round.