AES (Advanced Encryption Standard) è lo standard di crittografia simmetrica a blocchi adottato dal NIST (National Institute of Standards and Technology) nel 2001, a conclusione di un processo di selezione pubblica durato cinque anni. È basato sull’algoritmo Rijndael, progettato dai crittografi belgi Joan Daemen e Vincent Rijmen. AES è oggi il cifrario simmetrico più diffuso al mondo: è usato in TLS, WiFi (WPA2/WPA3), crittografia disco (BitLocker, FileVault), VPN, storage cloud e praticamente ogni sistema che richieda cifratura simmetrica ad alte prestazioni.
Parametri
AES opera su blocchi di 128 bit con tre varianti di lunghezza di chiave:
| Variante | Lunghezza chiave | Round |
|---|---|---|
| AES-128 | 128 bit | 10 |
| AES-192 | 192 bit | 12 |
| AES-256 | 256 bit | 14 |
Per la maggior parte delle applicazioni, AES-128 offre sicurezza sufficiente. AES-256 è preferito in contesti con requisiti di sicurezza elevati o che devono resistere anche a avversari con capacità quantistiche (l’algoritmo di Grover riduce la sicurezza effettiva di AES-256 a ~128 bit quantistici equivalenti).
Struttura dell’algoritmo
AES è una rete di sostituzione-permutazione (SP-network) che opera su uno stato di 4×4 byte (128 bit). Ogni round applica quattro trasformazioni sequenziali:
- SubBytes: sostituzione non lineare di ogni byte attraverso una S-box fissa (basata sull’inversione in GF (2⁸)).
- ShiftRows: rotazione ciclica delle righe dello stato di 0, 1, 2, 3 posizioni.
- MixColumns: combinazione lineare delle colonne tramite moltiplicazione in GF (2⁸) — garantisce la diffusione.
- AddRoundKey: XOR dello stato con la sottochiave di round derivata dalla key schedule.
L’ultimo round omette MixColumns. La sicurezza deriva dall’alternarsi di confusione (SubBytes) e diffusione (ShiftRows + MixColumns), seguendo il principio di Shannon.
Modalità operative
AES è un cifrario a blocchi: cifra esattamente 128 bit alla volta. Per cifrare messaggi di lunghezza arbitraria si usano modalità operative:
- ECB (Electronic Codebook): ogni blocco cifrato indipendentemente con la stessa chiave. Non sicuro: blocchi identici producono ciphertext identici (la struttura del plaintext è visibile). Da non usare.
- CBC (Cipher Block Chaining): ogni blocco è XOR-ato con il ciphertext precedente prima della cifratura. Richiede un IV (Initialization Vector) casuale. Sequenziale, non parallelizzabile in cifratura.
- CTR (Counter): converte AES in un cifrario a flusso cifrando un contatore incrementale e XOR-ando il keystream col plaintext. Parallelizzabile, accesso random ai blocchi. Richiede che la coppia (chiave, nonce) non sia mai riusata.
- GCM (Galois/Counter Mode): CTR con autenticazione integrata (AEAD — Authenticated Encryption with Associated Data). Garantisce sia confidenzialità sia integrità/autenticità. È la modalità standard in TLS 1.3 e nelle applicazioni moderne.
Attenzione — nonce reuse in GCM: GCM richiede che la coppia (chiave, nonce) non sia mai riusata. Riusare lo stesso nonce con la stessa chiave in GCM svela il keystream e permette la falsificazione dei tag di autenticazione: la sicurezza crittografica decade completamente. Questo non è un problema teorico: è stato sfruttato in implementazioni reali (WPA2 KRACK, 2017, basato su nonce reuse nel handshake). Le implementazioni devono usare un contatore incrementale o un nonce casuale a 96 bit (probabilità di collisione trascurabile per messaggi con la stessa chiave).
Sicurezza
Non sono noti attacchi pratici contro AES correttamente implementato. Gli attacchi teorici migliori (biclique attack su AES-128) richiedono operazioni — impraticabili. La minaccia principale non è crittoanalitica ma implementativa: timing side-channel, cache-timing attacks e fault injection possono compromettere implementazioni software naive. Le CPU moderne (x86, ARM) implementano AES in hardware (istruzione AES-NI) sia per le prestazioni sia per l’immunità ai timing attack.