Il 2 gennaio 1997 l’Istituto americano NIST lanciò un concorso per l’individuazione di un nuovo algoritmo crittografico a chiave simmetrica che potesse soppiantare DES (Data Encryption Standard).

Quest’ultimo, utilizzato fin dagli anni ’70 era ormai obsoleto: negli anni ’90 erano sufficienti 22 ore per violarlo.

Furono necessari quattro anni perché il vincitore fosse decretato, dopo un processo di verifica di sicurezza aperto a tutta la comunità dei crittologi.
Il vincitore fu il cifrario Rijndael, ideato da due crittologi Belghi, Joan Daemen e Vincent Rijmen.

crittografia aes 256

Nel 2001 infine, AES-Rijndael, il cui nome è la composizione dei cognomi dei due autori, divenne il nuovo standard di cifratura ed è in uso ancora oggi.
Probabilmente è chiara a tutti l’idea che sta alla base di un algoritmo di crittografia, ovvero il proposito di rendere incomprensibile un messaggio in modo che possa essere leggibile solo dal legittimo destinatario.
Difficilmente sono noti i dettagli dei meccanismi attualmente in uso, e proprio per questo oggi esamineremo i punti salienti della crittografia AES 256.

Come si è arrivati alla AES-256 encryption

I criteri che portarono alla scelta di questo procedimento tra gli altri essi riguardavano:

  • sicurezza
  • costo contenuto
  • efficienza

Sicurezza

L’output doveva essere apparentemente una stringa non correlata con quella originale, in modo che fosse impossibile risalire al significato reale senza conoscere la chiave. Doveva inoltre fondarsi su basi matematiche solide ed essere un algoritmo sicuro abbastanza da scoraggiare eventuali attacchi informatici.

Costo

Altri requisiti richiesti da NIST riguardavano la disponibilità degli ideatori a concedere gratuitamente la possibilità di usufruire del loro cifrario, l’efficienza computazionale e l’adattabilità alle più svariate applicazioni in ambiti diversi, da cui la necessità di un utilizzo limitato di memoria.

Usabilità

Ancora, l’algoritmo ideale doveva andare incontro alle esigenze del più alto numero possibile di utenti, essere applicabile sia in ambito software che hardware e mantenere una certa facilità di implementazione per garantire la flessibilità di impiego e facilitare le analisi di sicurezza.
La difficoltà relative all’uso sia in ambito hardware che software risiede nel fatto che alcune applicazioni hanno a disposizione una memoria e una potenza di calcolo piuttosto limitata.
Al contrario per gli hardware è relativamente facile aumentare la memoria e la velocità di esecuzione a fronte di un aumento delle dimensioni fisiche. Quest’ultimo però ha drammatiche ricadute sul prezzo dell’hardware.

Altra caratteristica ambita era la capacità di cambiare la chiave in modo semplice e veloce con un impiego minimo di risorse per adattare i requisiti di sicurezza nel tempo.

L’algoritmo vincente

Il cifrario Rijndael risultò essere il migliore in quanto:

  • È un algoritmo ricorsivo a blocchi. Le dimensioni dei blocchi sono indipendenti dalla lunghezza della chiave.
  • È resistente contro tutti gli attacchi noti
  • È veloce e prevede alcune operazioni eseguibili in parallelo
  • Ha una struttura semplice
  • Supporta l’implementazione hardware e software
  • Permette il cambio di lunghezza di chiave e il numero di cicli, risultando facilmente adattabile a diversi contesti
  • Adatto ad ambienti con spazio di memoria ristretto
  • Ha un key scheduling molto veloce

Differenze tra crittografia AES-256 encryption, AES-128 e AES-192

Oltre all’algoritmo AES256, esistono anche altri due possibili cifrari. La differenza tra i tre risiede esclusivamente nella lunghezza della chiave di cifratura, che può essere:

  1. 128 bit (ossia dell’ordine di 10^38 cifre ) nel caso della AES-128,
  2. 192 bit (ordine 10^57) nel caso della AES-192
  3. 256 bit (10^77) nell’ultimo.

L’algoritmo divide il testo in chiaro in blocchi di lunghezza 128 bit, indipendentemente dalla lunghezza della chiave ed esegue il procedimento esattamente nella stessa maniera sebbene per un numero diverso di volte. Per la AES-128 il processo prevede 10 cicli, per la AES-192 12 e per la AES-256 14.

Ovviamente ad una chiave più lunga corrisponde una sicurezza maggiore, ma anche uno spazio di memoria e un tempo maggiore per eseguire le operazioni di criptazione e decriptazione.

Per questo motivo normalmente la AES-218 viene utilizzata nei dispositivi più piccoli o con meno potenza di calcolo.

In questi ambiti rappresenta il miglior compromesso tra sicurezza ed usabilità nel quotidiano, ad esempio sugli smartphone che rischiano ripercussioni notevoli sulla durata della batteria.

Al contrario, l’AES 256 encryption viene implementata in situazione dove la potenza e la velocità sono un problema secondario alla sicurezza, ad esempio se si ha necessità di criptare segreti militari o altre informazioni di rilevanza nazionale.

Funzionamento dell’algoritmo di cifratura AES256

AES 256 è un algoritmo di crittografia a chiave simmetrica, questo significa che il processo di criptazione e quello di decifrazione sono uno l’esatto opposto dell’altro.

In secondo luogo, si tratta di una cifratura a blocchi, cioè un procedimento che prevede la divisione dei dati in sezioni, dette blocchi.
Gli ideatori hanno anche scelto di utilizzare una rete di sostituzione permutazione (SPN) che funziona tramite la ripetizioni di più cicli.

Ogni volta si ha un “blocco” di byte in ingresso che viene trasformato un blocco differente.

Alla fine del processo iterativo, si avrà quindi una stringa di byte di lunghezza invariata ai quali sono assegnati valori diversi da quelli iniziali. Per riottenere la stringa originale sarà necessario conoscere la chiave ed eseguire il processo al contrario.

L’algoritmo prevede una serie di azioni diverse ciascuna eseguibile in parallelo su tutti i byte:

Divisione in blocchi da 128 bit

Il primo step per la cifratura consiste nella divisione del messaggio in blocchi da 128 bit.
I dati di ogni blocco sono poi riorganizzati in matrici 4×4 e solo dopo diventano l’input dell’algoritmo di crittografia. Se non siete avvezzi al concetto potete immaginare le matrici come tabelle con quattro colonne e quattro righe, in cui ciascuna casella contiene un byte (8bit).

Espansione della chiave

Questa procedura, detta anche key scheduling, serve a creare un set di chiavi a partire dalla chiave originale (CipherKey).
Ad ogni passaggio infatti la chiave utilizzata sarà diversa dalle precedenti. In totale saranno necessarie tante chiavi quanti cicli più una che viene utilizzata nello step “addizione della chiave” precedente alle iterazioni. Sappiamo, inoltre, che tutte le chiavi avranno la stessa lunghezza. Di conseguenza il key scheduling consisterà nella creazione di una ExtendedKey contenente in ordine tutte le chiavi che saranno utilizzate nei diversi cicli.

SubstituteBytes
La prima funzione trasforma ogni singolo byte secondo una matrice 16×16 predefinita, detta Rijndael S-box.
La S-box contiene in ogni “casella” una delle possibili combinazioni di 16 caratteri. La posizione di ciascuna di queste è stata scelta in base a criteri che necessitano di una profonda conoscenza matematica per essere compresi.
Inizialmente ogni byte viene scritto in binario e diviso in due sezioni da 4 bit. Ad esempio b= 0010 1010.

Queste due parti corrispondono a dei numeri decimali inferiori a 16, nell’esempio la prima corrisponde a 2 e la seconda a 10.
Così questo byte sarà sostituito dal valore che si trova nella seconda riga alla decima colonna.

ShiftRows

La seconda funzione non modifica il contenuto del blocco ma sposta i byte nelle celle di ogni riga di un numero di posti diverso.
La prima riga rimane immutata, la seconda è shiftata di uno e così via. In questo modo i byte che originariamente appartenevano ad una stessa colonna si trovano su quattro colonne differenti.

MixColumns

La terza funzione agisce sulle colonne. Moltiplica ciascuna colonna per una matrice in modo da mascherare i bit. Nel corso dell’ultimo ciclo questo passaggio viene saltato.

AddRoundKey

L’ultima azione consiste nell’addizione dei bit della chiave a quelli del blocco.

Funzionamento algoritmo di decifrazione

Ciascuna delle azioni descritte precedentemente può essere invertita. I processi opposti sono:

  • InvSubBytes con una tabella inversa rispetto alla S-box precedente
  • InvShiftRows che prevede lo spostamento verso sinistra degli elementi delle righe
  • InvMixColumns
  • InvAddroundKey.
Sicurezza effettiva

Il primo punto a favore della sicurezza di AES riguarda la lunghezza delle chiavi.

Se supponiamo una chiave a 256 bit siamo difronte a 2^256 possibili combinazioni di chiavi. Per dare un’idea della dimensione di questo numero consideriamo che è poco al di sotto del numero di atomi nell’universo.

Per un malintenzionato sarebbe necessario un tempo maggiore rispetto alla vita dell’universo per riuscire a testarle tutte. Ciononostante da quando questo algoritmo è stato scelto come standard ci sono stati molti tentativi accademici di trovare delle possibili vulnerabilità.

Attacchi a chiave nota

Nel 2007 ci fu un’interessante tentativo di violare la crittografia AES-128 semplificato, con solo 7 round nota una delle chiavi. Tuttavia si tratta di un esperimento che non evidenzia criticità per l’uso reale del procedimento. Un malintenzionato, normalmente non sarà a conoscenza di nessuna delle chiavi e dovrà affrontare almeno 10 cicli.

Attacchi a chiave correlata

Nel 2009 ci fu un altro tentativo, si suppose che fosse possibile risalire alle chiavi nota una correlazione tra due set di chiavi. Anche in questo caso la minaccia non è verosimile in contesti reali, perché normalmente gli hacker non possono sapere se due chiavi siano correlate né come, anche perché le chiavi non sono usualmente correlate. Ma questa ricerca è stato un input utile a migliorare la sicurezza delle chiavi.

Attacchi dai canali laterali

Questo tipo di attacchi prevede che il criminale cerchi di recuperare informazioni sufficienti a violare l’algoritmo studiando altri dati più facilmente accessibili. Alcuni esempi sono:

  • Consumo di energia del processo
  • Tempo di esecuzione (utile per un confronto con una chiave nota)
  • Analisi dei suoni prodotti o delle onde elettromagnetiche emesse
  • Rimanenze di dati
  • Analisi differenziale dei guasti (sono indotti degli errori per studiare la risposta del sistema)

Attacchi mirati all’estorsione della chiave

Nonostante i tentativi sopra descritti siano teoricamente possibili, fattivamente, l’unica strada percorribile e l’unica ad essere stata già percorsa dagli hacker è l’estorsione della chiave attraverso strumenti di ingegneria sociale o tramite infiltrazioni in infrastrutture non adeguatamente protette.

Vantaggi e applicazioni comuni

Questo cifrario è estremamente vantaggioso, la sua semplicità, rapidità e l’elevatissimo livello di sicurezza la rendono ideale per svariate applicazioni in ogni campo. In più si adatta a diversi tipi di dispositivi grazie al fatto che necessità poca memoria e poca potenza di calcolo rispetto ad altri standard crittografici ed è possibile combinarlo con altri algoritmi di cifratura senza troppe difficoltà.

In particolare è estremamente comune per:

  • VPN: si occupano di reindirizzare il traffico di rete ma applicano anche una protezione crittografica per evitare che un malintenzionato possa accedere ai contenuti veicolati.
  • Gestori di password: permettono di conservare in sicurezza (grazie alla crittografia) tutte le password in modo che non sia necessario ricordarle tutte e sia più facile usufruire di password complesse, diverse per ogni account.
  • Reti Wi-Fi: sono crittografate per scongiurare che degli estranei possano monitorare le attività online degli utenti legittimi
  • Browser Web: Usano la AES per prevenire gli attacchi MITM, spoofing o il monitoraggio del traffico
  • Crittografia del disco
  • Compressione dei file: molte utility di archiviazione usano questo standard per prevenire le manomissioni durante la gestione dei file
  • Applicazioni di messaggistica istantanea: Sfruttano questi algoritmi per garantire la riservatezza delle conversazioni digitali.
  • Librerie di linguaggi di programmazione
  • Componenti del sistema operativo
  • Alcuni videogame
  • Le applicazioni bancarie

Alcune considerazioni finali sul tema aes 256 encryption

Nonostante siano passati oramai più di 20 anni da quando il cifrario Rijndael è ancora impenetrabile.
I molti cicli che ne aumentano la resistenza, il set di chiavi diverse utilizzate in ciascuno di essi aumenta la complessità, la sostituzione dei byte modifica i dati con una relazione non lineare nascondendo la corrispondenza con il messaggio originale, lo spostamento delle righe e il mescolamento delle colonne permettono di diffondere le componenti del messaggio.

L’insieme di tutte queste accortezze rende l’output praticamente casuale e quindi impossibile da interpretare senza la chiave anche con l’ausilio dei moderni supercomputer.

Insomma per una volta, possiamo tirare un sospiro di sollievo, i nostri dati sono al sicuro… A meno che non siamo noi stessi a fornire involontariamente la chiave al nemico.