La primitiva di crittografia autenticata con dati associati (AEAD) è la più comune per la crittografia dei dati ed è adatta alla maggior parte delle esigenze.
AEAD ha le seguenti proprietà:
- Secrecy: non è noto nulla del testo non crittografato, ad eccezione della sua lunghezza.
- Autenticità: è impossibile modificare il testo non crittografato sottostante al testo cifrato senza che questa azione venga rilevata.
- Simmetrica: la crittografia del testo non crittografato e la decrittografia del testo cifrato vengono eseguite con la stessa chiave.
- Randomizzazione: la crittografia è randomizzata. Due messaggi con lo stesso testo non crittografato producono testi crittografati diversi. Gli utenti malintenzionati non possono sapere quale testo cifrato corrisponde a un determinato testo non crittografato. Se vuoi evitare che ciò accada, utilizza invece AEAD deterministica.
Dati associati
AEAD può essere utilizzato per collegare il testo cifrato a dati associati specifici. Supponiamo di avere un database con i campi user-id
e encrypted-medical-history. In questo scenario, user-id può essere utilizzato come dati associati durante la crittografia di encrypted-medical-history. In questo modo, un malintenzionato non può spostare la cronologia medica da un utente all'altro.
I dati associati sono facoltativi. Se specificati, la decrittografia va a buon fine solo se gli stessi dati associati vengono passati alle chiamate di crittografia e decrittografia.
Scegli un tipo di chiave
Sebbene consigliamo AES128_GCM per la maggior parte degli utilizzi, esistono vari tipi di chiavi per esigenze diverse. AES128 offre una sicurezza a 128 bit, mentre AES256 offre una sicurezza a 256 bit.
I due vincoli di sicurezza principali da considerare quando si sceglie una modalità sono:
- QPS: quanti messaggi sono criptati con la stessa chiave?
- Dimensioni dei messaggi: quanto sono grandi i messaggi?
Tipi di chiavi supportati:
- AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) con un vettore di inizializzazione (IV) di 16 byte è la modalità più conservativa con limiti adeguati.
- Key-committing.
- AES-EAX (AES128_EAX, AES256_EAX) è leggermente meno conservativo e leggermente più veloce di AES128_CTR_HMAC_SHA256.
- MLGR senza key-commitment.
- AES-GCM (AES128_GCM, AES256_GCM) è in genere la modalità più veloce con i limiti più severi sul numero di messaggi (232) e sulle dimensioni dei messaggi (~64 GB per messaggio). Quando questi limiti vengono superati, AES-GCM non riesce in modo catastrofico, lasciando trapelare il testo non crittografato e la parte di autenticazione della chiave interna AES-GCM.
- AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV)
[RFC8452] è resistente all'uso improprio accidentale
del nonce ed è quasi altrettanto efficiente di AES-GCM. I limiti relativi al numero di messaggi e alle dimensioni dei messaggi per AES-GCM-SIV con IV casuali sono molto più elevati dei limiti di AES-GCM. Quando questi limiti vengono superati, AES-GCM-SIV
fallisce in modo meno catastrofico: rivela solo che
due messaggi sono uguali.
AES-GCM-SIV è più sicuro da usare, ma è meno utilizzato nella pratica.
- Limiti per i nonce casuali:
- 232 messaggi, in cui ogni testo non crittografato è al massimo di 8 GiB
- 248 messaggi, in cui ogni testo non cifrato è al massimo di 32 MiB
- 264 messaggi, in cui ogni testo non crittografato è al massimo di 128 KiB
- Per utilizzarlo in Java, installa Conscrypt.
- ADGKLS non key-committing.
- Limiti per i nonce casuali:
- XChaCha20-Poly1305 (XCHACHA20_POLY1305) ha un limite molto più elevato per il numero di messaggi e le dimensioni dei messaggi rispetto ad AES-GCM, ma quando non funziona (molto improbabile), causa anche la perdita di materiale della chiave. Non è accelerato dall'hardware,
quindi può essere più lento delle modalità AES in situazioni in cui è disponibile
l'accelerazione hardware.
- LGR senza key-committing.
Scopri di più sul formato di trasmissione del testo cifrato AEAD.
Garanzie di sicurezza
Le implementazioni AEAD offrono:
- Sicurezza CCA2.
- Efficacia dell'autenticazione di almeno 80 bit.
- La possibilità di criptare almeno 232 messaggi con un totale di 250 byte. Nessun attacco con un massimo di 232 testi non cifrati scelti o testi cifrati scelti ha una probabilità di successo superiore a 2-32.
Esempi di casi d'uso
Consulta Voglio criptare i dati e Voglio associare il testo cifrato al suo contesto.