AES (Advanced Encryption Standard)

L'AES è un algoritmo di cifratura a blocchi (block chiper) ed è una speficazione dell'algortitmo Rijndael (dai cognomi dei suoi inventori, due crittografi belgi: Joan Daemen e Vincent Rijmen).

Attualmente le applicazioni di crittografia telefonica utilizzate da Kryptotel impiegano questo algoritmo con chiave TOP SECRET a 256 bit.

La scelta di questo algoritmo è dettata da alti livelli di sicurezza e di performance unita ad una rapidità di calcolo.

 

I criteri che hanno ispirato gli ideatori di questo algoritmo sono i seguenti:

  • Buon livello di robustezza dell'algoritmo in modo da resistere contro tutti i tipi di attacchi;
  • Velocità di calcolo e compattezza del codice su un elevato numero di piattaforme;
  • Semplicità e trasparenza di progetto.

E' un algoritmo open source che nel 2001 è stato adottato anche dal NIST(National Institute of Standards and Technology), l'Istituto di standardizzazione USA, come standard di cifratura per le comunicazioni tra gli enti federali americani.

I criteri di valutazione del NIST durante il processo di selezione degli algoritmi sono stati i seguenti:

  • Sicurezza
  • Massima applicabilità
  • Alte Performance Software e Hardware
  • Idoneità a lavorare in un ambiente limitato
  • Resistenza alla potenza di analisi ed altri attacchi
  • Proprietà Intellettuale
  • Equità
  • Oggettività
  • Flessibilità
  • Efficienza

Il processo di selezione di questo algoritmo è durato 5 anni ed ha portato ad una prima selezione di 15 algoritmi. Una seconda scrematura effettuata da un team di esperti del NIST identificò i 5 algoritmi finalisti: MARS, RC6TM, AES, Serpent, Twofish.

Infine dopo anni di relazioni, test e collaudi è stato scelto l'AES perchè è risultato l'algoritmo di autenticazione migliore. Il NIST ha privilegiato l'AES, perchè in caso dì attacco di forza bruta, l'AES offre una resistenza alta sia per sistemi di piccole dimensione che cresce con l'aumentare del numero di dati e comunicazioni da cifrare. Per sistemi di dimensioni notevoli, si è visto che AES riesce ad eguagliare RSA in resistenza.

 

Si tratta di un algoritmo di cifratura a chiave simmetrica che ha la caratteristica di cifrare un blocco di elementi (insieme di bit) contemporaneamente, a differenza della cifratura a flusso che codifica un singolo elemento alla volta. Questa caratteristica lo rende un algoritmo molto veloce se si pensa che è fino a 6 volte più veloce del DES e molto versatile. E' infatti utilizzato ampiamente sia per sviluppi hardware che software ed ha il vantaggio che occupa poca memoria ed è quindi impiegabile in supporti con poca capacità di memora come le smartcard. Inoltre mantiene le prestazione anche al variare delle dimensione delle chiave e al variare delle piattaforme.

 

La lunghezza dei blocchi di cifratura è fissa ed è di 128 bit mentre le chiavi di crittografia di questo algoritmo possono essere di 128, 192 o 256 bit.

Proprio su questo aspetto si differenzia dall'algoritmo Rijndael che prevede diversamente che la dimensione del bocco e della chiave devono essere un multiplo di 32 bit con 128 bit come minimo e 256 bit come massimo.

 

Ma vediamo in dettaglio come funziona l'algoritmo.

L'AES, essendo un algoritmo di cifratura in blocchi da 128 bit, per poter operare ha bisogno di strutturare il testo in chiaro in matrici/blocchi da 4 righe e 4 colonne ciascuno (4x4 bytes=16bytes=128bit) che vengono chiamati stati ("states").


L'AES suddivide la fase di cifratura ( "round") in fasi identiche, ogni fase ha una sua sottochiave o chiave di sessione che viene estratta dalla chiave principale mediante questo procedimento iniziale:

AddRoundKey – Ogni byte del blocco viene cifrato con la chiave di sessione, la chiave di sessione viene calcolata dal gestore delle chiavi.

 

Il numero delle fasi varia al variare della dimensioni della chiave utilizzata, ad esempio sono 14 le fasi o round per una chiave di cifratura a 256 bit.

Ogni fase è costituita da quattro metodi che, applicati ai blocchi (stati), attivano una serie di operazioni che lavorano per ottenere il testo cifrato:

  • Metodo 1 SubBytes: in questa fase tutti i byte della matrice vengono sostituiti seguendo una specifica tabella in maniera non lineare ed è proprio questo insieme di operazioni che gli dà le caratteristiche di cifratura a blocchi


  • Metodo 2 ShiftRows: a seconda della riga di appartenenza viene effettuato uno spostamento dei byte di un certo numero di posti




  • Metodo 3 MixColumns: i byte, una colonna per volta, vengono trattati con una operazione lineare


  • Metodo 4 AddRoundKey: ogni byte della tabella viene combinato con una certa chiave.


Tutto il processo di cifratura si può riassumere nei seguenti passaggi: