La primitiva Authenticated Encryption with Associated Data (AEAD) è la più comune per la crittografia dei dati ed è adatta alla maggior parte delle esigenze.
AEAD ha le seguenti proprietà:
- Riservatezza: nulla sul testo normale è noto, a parte la sua lunghezza.
- Autenticità: è impossibile modificare il testo non crittografato criptato alla base del testo crittografato senza che venga rilevato.
- Simmetrica: la crittografia del testo non crittografato e la decriptazione del testo crittografato vengono eseguite con la stessa chiave.
- Randomizzazione: la crittografia è casuale. Due messaggi con lo stesso testo non crittografato generano testi criptati diversi. Gli utenti malintenzionati non possono sapere quale testo crittografato corrisponde a un dato testo non crittografato. Se vuoi evitarlo, utilizza invece l'AEAD deterministico.
Dati associati
AEAD può essere utilizzato per associare il testo crittografato a specifici dati associati. Supponi di avere un database con i campi user-id
e encrypted-medical-history
. In questo scenario, è possibile utilizzare user-id
come
dati associati durante la crittografia di encrypted-medical-history
. In questo modo, un utente malintenzionato non può trasferire la cronologia clinica di un utente da un utente all'altro.
Scegli un tipo di tasto
Anche se consigliamo di utilizzare AES128_GCM per la maggior parte degli utilizzi, esistono vari tipi di chiavi per esigenze diverse (per la sicurezza a 256 bit, sostituisci AES128 con AES256 di seguito). In genere:
- AES128_CTR_HMAC_SHA256 con un vettore di inizializzazione (IV) da 16 byte è la modalità più conservativa con buoni limiti.
- AES128_EAX è leggermente meno conservativo e leggermente più veloce rispetto a AES128_CTR_HMAC_SHA256.
- AES128_GCM è di solito la modalità più veloce, con i limiti più severi in termini di numero di messaggi e dimensioni. Quando vengono superati i limiti relativi al testo non crittografato e alla lunghezza dei dati associati (di seguito), si verifica un errore in AES128_GCM e comporta la perdita del materiale della chiave.
- AES128_GCM_SIV è veloce quasi quanto AES128_GCM, con limiti molto buoni per una grande quantità di messaggi, ma è leggermente meno stabile. Per utilizzarla in Java, devi installare Conscrypt.
- XChaCha20Poly1305 ha un limite molto maggiore in merito al numero di messaggi e alle dimensioni dei messaggi rispetto a AES128_GCM, ma quando l'operazione non riesce (molto improbabile) perde anche il materiale della chiave. Non ha accelerazione hardware, pertanto può risultare più lento rispetto alle modalità AES in situazioni in cui è disponibile l'accelerazione hardware.
Garanzie di sicurezza
Le implementazioni AEAD offrono:
- Sicurezza CCA2.
- Livello di sicurezza dell'autenticazione di almeno 80 bit.
- La possibilità di criptare almeno 232 messaggi per un totale di 250 byte. Nessun attacco con un massimo di 232 testi non crittografato scelti o testi criptati scelti ha una probabilità di successo superiore a 2-32.
Esempi di casi d'uso
Vedi Voglio criptare i dati e voglio associare il testo crittografato al suo contesto.