Crittografia autenticata con dati associati (AEAD)

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 si sa nulla del testo normale, tranne la sua lunghezza.
  • Autenticità: è impossibile modificare il testo normale criptato sottostante il testo cifrato senza essere rilevati.
  • Simmetrica: la crittografia del testo normale e la decrittografia del testo cifrato vengono eseguite con la stessa chiave.
  • Randomizzazione: la crittografia è randomizzata. Due messaggi con lo stesso testo normale producono testi cifrati diversi. Gli aggressori non possono sapere quale testo cifrato corrisponde a un determinato testo normale. Se vuoi evitare questo, utilizza invece AEAD deterministico.

Dati associati

AEAD può essere utilizzato per collegare il testo cifrato a dati associati specifici data. Supponiamo che tu abbia 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 aggressore non può spostare la cartella clinica da un utente all'altro.

I dati associati sono facoltativi. Se specificati, la decrittografia ha esito positivo solo se gli stessi dati associati vengono passati sia alle chiamate di crittografia sia a quelle di 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 quando si sceglie una modalità sono:

  1. QPS: quanti messaggi vengono criptati con la stessa chiave?
  2. Dimensioni del messaggio: 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 validi.
    • Key-committing.
  • AES-EAX (AES128_EAX, AES256_EAX) è leggermente meno conservativo e leggermente più veloce di AES128_CTR_HMAC_SHA256.
    • MLGR non key-committing .
  • AES-GCM (AES128_GCM, AES256_GCM) è in genere la modalità più veloce con i limiti più rigorosi sul numero di messaggi (232) e sulle dimensioni dei messaggi (~64 GB per messaggio). Quando questi limiti vengono superati, AES-GCM fallisce in modo catastrofico, rivelando il testo normale e la parte di autenticazione della chiave interna AES-GCM.
    • AES-GCM non è robusto [ABN] né key-committing [GLR]. È possibile generare un testo cifrato decriptabile con due chiavi diverse. Questo può portare ad attacchi pratici [DGRW]. Esamina attentamente il modello di minaccia se la chiave viene scelta dall'avversario.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] è resistente all'uso improprio accidentale di nonce e ha prestazioni quasi pari a quelle di AES-GCM. I limiti sul numero di messaggi e sulle dimensioni dei messaggi per AES-GCM-SIV con IV casuali sono molto più elevati rispetto ai 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 utilizzare, ma in pratica è meno diffuso.
    • Limiti per i nonce casuali:
      • 232 messaggi, dove ogni testo normale è al massimo 8 GiB
      • 248 messaggi, dove ogni testo normale è al massimo 32 MiB
      • 264 messaggi, dove ogni testo normale è al massimo 128 KiB
    • Per utilizzarlo in Java, installa Conscrypt.
    • ADGKLS non key-committing.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) ha un limite molto più elevato sul numero di messaggi e sulle dimensioni dei messaggi rispetto ad AES-GCM, ma quando fallisce (cosa molto improbabile), rivela anche il materiale della chiave. Non è accelerato dall'hardware, quindi può essere più lento delle modalità AES nelle situazioni in cui è disponibile l'accelerazione hardware.
    • LGR non key-committing LGR.

Scopri di più sul formato di trasmissione del testo cifrato AEAD.

Garanzie di sicurezza

Le implementazioni di AEAD offrono:

  • Sicurezza CCA2.
  • Forza di 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 normali 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 a l suo contesto.