AES: cos'è, algoritmo di crittografia simmetrica e dove viene utilizzato

Autore: IT Sectr Pubblicato: 2026-04-02 Tempo di lettura: 9 min

AES (Advanced Encryption Standard) è un algoritmo di crittografia simmetrica a blocchi adottato nel 2001 dal National Institute of Standards and Technology (NIST) come standard ufficiale. AES ha sostituito il DES obsoleto e da allora è diventato l'algoritmo di crittografia più diffuso al mondo, utilizzato dai sistemi bancari alle applicazioni mobili. Secondo il NIST (2023), AES fornisce una sicurezza equivalente a 2^256 operazioni per una chiave a 256 bit, rendendolo invulnerabile agli attacchi moderni di forza bruta. NIST FIPS 197, 2023

Punti chiave

  • AES è un cifrario simmetrico a blocchi con dimensione fissa del blocco di 128 bit e chiavi di 128, 192 o 256 bit.
  • Modalità GCM è la modalità di funzionamento AES consigliata per le applicazioni mobili, che fornisce crittografia autenticata.
  • AES-256 è la versione con il massimo livello di sicurezza, consigliata per proteggere dati altamente sensibili.
  • Accelerazione hardware — le istruzioni AES-NI del processore consentono la crittografia a velocità fino a 10 GB/s sui dispositivi moderni.
  • Android e iOS forniscono API integrate per AES: Android Keystore e iOS CryptoKit con supporto all'accelerazione hardware.

Cos'è AES?

AES (Advanced Encryption Standard) è un cifrario simmetrico a blocchi sviluppato dai crittografi belgi Joan Daemen e Vincent Rijmen sotto il nome Rijndael. Nel 2001, il NIST ha selezionato Rijndael come vincitore del concorso per un nuovo standard di crittografia statunitense dopo cinque anni di test pubblici e analisi. AES opera su blocchi di dati di dimensione fissa (128 bit) e supporta tre lunghezze di chiave: 128, 192 e 256 bit. Il numero di round di trasformazione dipende dalla lunghezza della chiave: 10 round per 128 bit, 12 per 192 bit e 14 per 256 bit. Ogni round include quattro operazioni: SubBytes (sostituzione non lineare di byte tramite S-box), ShiftRows (spostamento ciclico di righe), MixColumns (mescolanza di colonne) e AddRoundKey (XOR con la chiave di round).

Storia dello standard AES

Lo sviluppo di AES iniziò nel 1997 quando il NIST annunciò un concorso per sostituire DES, la cui chiave a 56 bit fu violata in 22 ore nel 1998 sul dispositivo specializzato Deep Crack. Quindici algoritmi di vari paesi parteciparono, tra cui Serpent (Regno Unito), Twofish (USA) e RC6 (USA). Per la finale del 1999, rimasero 5 candidati. Rijndael vinse grazie alla combinazione di alta velocità su tutte le piattaforme (da microcontrollori a 8 bit a server a 64 bit), resistenza alla crittoanalisi e implementazione compatta in hardware. Dal 2006, AES viene utilizzato per crittografare dati classificati SECRET e TOP SECRET nei sistemi governativi statunitensi. Oggi, AES è integrato in tutti i principali protocolli: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 e Bluetooth BR/EDR.

Come funziona la crittografia AES

AES elabora i dati in blocchi di 128 bit (16 byte), organizzati come una matrice 4x4 byte chiamata state. Ogni round di crittografia esegue una sequenza di trasformazioni deterministiche che creano collettivamente un effetto valanga: modificare un bit dei dati di input modifica circa il 50% dei bit di output. Questo effetto rende AES resistente alla crittoanalisi differenziale e lineare — i metodi principali per violare i cifrari a blocchi.

Il processo inizia con AddRoundKey — XOR della chiave iniziale con lo state. Quindi vengono eseguiti i round: SubBytes sostituisce ogni byte dello state con un valore dalla S-box (tabella di sostituzione). ShiftRows sposta ciclicamente la seconda riga di 1 posizione, la terza di 2, la quarta di 3 — garantendo la mescolanza tra le colonne. MixColumns moltiplica ogni colonna dello state per una matrice fissa nel campo di Galois GF(2^8), creando dipendenza di ogni byte di output da tutti e quattro i byte di input della colonna. AddRoundKey applica XOR con la chiave di round successiva, derivata dalla chiave originale tramite Key Expansion. L'ultimo round omette MixColumns. La decifratura utilizza le operazioni inverse InvSubBytes, InvShiftRows, InvMixColumns e AddRoundKey in ordine inverso. Per gli sviluppatori mobili, non è necessario comprendere la struttura interna di AES — è sufficiente sapere come chiamare correttamente le API integrate della piattaforma con i parametri appropriati.

Effetto valanga e forza crittografica di AES

La caratteristica principale di AES che garantisce la sua forza crittografica è l'effetto valanga. Modificare un bit nel testo in chiaro o nella chiave comporta la modifica di circa il 50% dei bit del testo cifrato, rendendo AES estremamente resistente alla crittoanalisi differenziale e lineare. La combinazione di SubBytes (non linearità tramite S-box) e MixColumns (diffusione tramite moltiplicazione nel campo di Galois) crea una complessità matematica tale che anche conoscendo parte del testo cifrato non è possibile recuperare la chiave più velocemente della forza bruta. Secondo l'analisi del NIST (2018), il miglior attacco noto ad AES-128 — l'attacco biclique — riduce la lunghezza effettiva della chiave di soli 2 bit (a 126.2 bit), senza fornire alcun vantaggio pratico all'attaccante. Per AES-256, non esistono attacchi praticamente realizzabili che superino la forza bruta.

Dimensioni delle chiavi AES e livelli di sicurezza

AES supporta tre dimensioni di chiave, ciascuna corrispondente a un livello specifico di forza crittografica. La scelta della dimensione della chiave influisce sulla sicurezza, sulle prestazioni e sui requisiti di risorse del dispositivo.

Dimensione chiaveNumero di roundLivello di sicurezzaApplicazione
AES-12810128 bitApplicazioni commerciali, TLS
AES-19212192 bitSistemi governativi (SECRET)
AES-25614256 bitTOP SECRET, settore finanziario

Regola pratica: per le applicazioni mobili utilizzare AES-256 per impostazione predefinita. La differenza di prestazioni tra AES-128 e AES-256 sui dispositivi moderni con supporto AES-NI non supera il 10–15%, ma il livello di sicurezza raddoppia. Secondo l'analisi quantistica (Grassl et al., 2016), violare AES-128 richiederebbe 2^77 operazioni quantistiche tramite l'algoritmo di Grover, mentre AES-256 ne richiederebbe 2^149, rendendo AES-256 resistente agli attacchi quantistici per i prossimi 20–30 anni. Anche AES-128 fornisce protezione sufficiente per la stragrande maggioranza degli scenari commerciali: la forza bruta di una chiave a 128 bit richiederebbe più energia di quanta ne esista nell'universo secondo la stima di Bruce Schneier. Tuttavia, gli standard di sicurezza (GDPR, HIPAA, PCI DSS) spesso richiedono esplicitamente AES-256, quindi i progetti in produzione dovrebbero utilizzare la lunghezza massima della chiave.

Modalità di funzionamento AES

AES come cifrario a blocchi crittografa blocchi di dimensione fissa (128 bit). Per crittografare dati di lunghezza arbitraria, vengono utilizzate modalità di funzionamento. La selezione della modalità influisce criticamente sulla sicurezza: la modalità sbagliata può annullare la forza di AES.

  • ECB (Electronic Codebook) — la modalità più semplice e più insicura. Ogni blocco viene crittografato indipendentemente con la stessa chiave. Blocchi di testo in chiaro identici producono blocchi di testo cifrato identici, consentendo di recuperare la struttura dei dati. Vietata in tutti gli standard di sicurezza moderni. Non utilizzare MAI ECB nelle applicazioni mobili.
  • CBC (Cipher Block Chaining) — ogni blocco di testo cifrato precedente viene utilizzato come vettore di inizializzazione (IV) per il successivo. Richiede un IV casuale per ogni messaggio. Vulnerabile agli attacchi padding oracle se implementato in modo errato. Adatto per la crittografia di file ma richiede MAC (HMAC) per l'integrità dei dati.
  • GCM (Galois/Counter Mode) — la modalità consigliata per le applicazioni mobili. Fornisce crittografia autenticata (AEAD): crittografia + verifica dell'integrità in un'unica operazione. Utilizza un contatore per la generazione del flusso di chiave e la moltiplicazione nel campo di Galois per l'autenticazione. GCM richiede un nonce univoco (12 byte) per ogni messaggio. Raccomandato dal NIST, utilizzato in TLS 1.2/1.3 e Android Keystore.
  • CCM (Counter with CBC-MAC) — una modalità AEAD alternativa basata su CTR + CBC-MAC. Più lenta di GCM e non supporta l'elaborazione parallela. Utilizzata nei protocolli ZigBee e 802.11 (Wi-Fi). Per le applicazioni mobili, GCM è preferibile.

Per i progetti mobili utilizzare AES-256-GCM con un nonce di 12 byte. GCM risolve due problemi contemporaneamente: crittografia dei dati e autenticazione, prevenendo attacchi padding oracle e chosen ciphertext. Android Keystore e iOS CryptoKit supportano AES-GCM nativamente senza bisogno di primitive crittografiche aggiuntive. Quando si lavora con GCM, è fondamentale non riutilizzare mai il nonce con la stessa chiave — questo distrugge completamente la sicurezza della crittografia. Generare un nuovo nonce casuale per ogni crittografia e memorizzarlo insieme al testo cifrato.

Implementazione di AES nelle applicazioni mobili

Vediamo un esempio di implementazione sicura di AES-256-GCM su Android utilizzando Jetpack Security. Il codice seguente mostra il ciclo completo: creazione di una chiave AES-256 tramite MasterKey, crittografia e decifratura di una stringa con dati autenticati aggiuntivi (AAD).

kotlin
import androidx.security.crypto.MasterKey
import androidx.security.crypto.EncryptedSharedPreferences

val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

val securePrefs = EncryptedSharedPreferences.create(
    context,
    "secure_prefs",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

fun storeSecureData(key: String, value: String) {
    securePrefs.edit().putString(key, value).apply()
}

fun readSecureData(key: String): String? {
    return securePrefs.getString(key, null)
}

La caratteristica principale di questa soluzione è che AES-256-GCM viene utilizzato a due livelli: per crittografare le coppie chiave-valore (PrefValueEncryptionScheme) e per proteggere i nomi delle chiavi stessi (PrefKeyEncryptionScheme utilizza AES-256-SIV, resistente al riutilizzo del nonce). MasterKey viene generato utilizzando l'algoritmo AES-256-GCM e memorizzato in Android Keystore, protetto hardware sui dispositivi con Trusted Execution Environment. Sui dispositivi senza supporto hardware (TEE), la chiave viene crittografata tramite Bouncy Castle, che è comunque più sicuro della memorizzazione in SharedPreferences.

Per la crittografia diretta di grandi volumi di dati (ad esempio, immagini o file), utilizzare AES-256-GCM tramite EncryptedFile di AndroidX Security. Per l'esportazione delle chiavi (ad esempio, per backup), utilizzare una crittografia aggiuntiva con una password utente tramite PBKDF2 con 100000+ iterazioni.

AES su iOS tramite CryptoKit

Su iOS, le operazioni AES sono organizzate tramite il framework CryptoKit (Swift 5.0+). Una chiave AES-256 viene creata tramite SymmetricKey(size: .bits256) e memorizzata nel Secure Enclave — un crittoprocessore hardware isolato dalla CPU principale e dal sistema operativo. CryptoKit fornisce due implementazioni di AES: AES.GCM (consigliato) e AES.CBC (per compatibilità con formati legacy). La crittografia viene eseguita tramite il metodo seal(), che accetta dati, chiave e nonce (12 byte), e restituisce AES.GCM.SealedBox — una struttura contenente il testo cifrato e il tag di autenticazione. La decifratura avviene tramite open(). Apple raccomanda vivamente di non utilizzare CommonCrypto direttamente: CryptoKit seleziona automaticamente i parametri ottimali, protegge dagli attacchi side-channel e utilizza l'accelerazione hardware AES-NI sui processori Apple Silicon. Sui dispositivi con Secure Enclave, le chiavi non lasciano mai il modulo hardware, impedendo il furto anche in caso di compromissione totale dell'applicazione. Per la serializzazione della chiave, utilizzare il metodo withUnsafeBytes seguito dall'archiviazione in Keychain tramite SecItemAdd con l'attributo kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.

Domande frequenti

Cos'è AES in parole semplici?

AES è un algoritmo che converte dati leggibili in un insieme illeggibile di byte utilizzando una chiave segreta. La stessa chiave è necessaria per riportare i dati alla loro forma originale. AES è così affidabile che viene utilizzato per crittografare i documenti segreti del governo statunitense.

Qual è la differenza tra AES-128 e AES-256?

AES-128 utilizza una chiave a 128 bit ed esegue 10 round di crittografia. AES-256 utilizza una chiave a 256 bit e 14 round, rendendolo 2^128 volte più difficile da violare. Per le applicazioni mobili, si consiglia AES-256 a causa della differenza di prestazioni minima.

Quale modalità AES è la più sicura?

AES-256-GCM è la modalità più sicura e consigliata. GCM fornisce crittografia autenticata (crittografia + verifica dell'integrità). La modalità ECB è vietata, CBC richiede un MAC separato. GCM è lo standard de facto per le applicazioni mobili.

Si può violare AES?

Teoricamente, AES può essere violato per forza bruta, ma per AES-256 sarebbero necessari 2^256 tentativi — più del numero di atomi nell'universo osservabile. Non esistono attacchi pratici ad AES-256. Gli attacchi side-channel (Spectre, Meltdown) non violano AES ma rubano le chiavi dalla memoria, quindi l'archiviazione hardware delle chiavi è fondamentale.

Come utilizzare AES in un'app mobile su Android?

Utilizzare la libreria AndroidX Security: MasterKey.Builder con KeyScheme.AES256_GCM crea una chiave protetta in Android Keystore, e EncryptedSharedPreferences crittografa automaticamente tutti i dati tramite AES-256-GCM. Nessuna crittografia manuale — l'API è sicura per impostazione predefinita, senza rischio di errori dello sviluppatore.

Riepilogo

  • AES è l'algoritmo di crittografia simmetrica più diffuso e collaudato, standardizzato dal NIST nel 2001.
  • AES-256 fornisce il massimo livello di sicurezza con un margine contro gli attacchi quantistici per i prossimi 20–30 anni.
  • Modalità GCM è l'unica modalità consigliata per le applicazioni mobili: crittografia + autenticazione in un'unica operazione.
  • Android Keystore e iOS Secure Enclave — archivi hardware che isolano le chiavi AES dall'applicazione.
  • Jetpack Security (Android) e CryptoKit (iOS) forniscono implementazioni sicure di AES-256-GCM senza crittografia manuale.
  • Nonce (IV) per GCM deve essere univoco per ogni crittografia — il riutilizzo distrugge completamente la sicurezza.
  • Raccomandazione: utilizzare AES-256-GCM tramite EncryptedSharedPreferences su Android e CryptoKit su iOS per tutti i dati sensibili.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche