Crittografia autenticata con dati associati (AEAD)

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.