Crittografia autenticata in streaming con dati associati (AEAD streaming)

La primitiva AEAD Streaming fornisce crittografia autenticata per i flussi di dati. È utile quando i dati da criptare sono troppo grandi per essere elaborati in un solo passaggio. I casi d'uso tipici includono la crittografia di file di grandi dimensioni o flussi di dati in tempo reale.

La crittografia avviene in segmenti, associati alla loro posizione all'interno di un testo crittografato e non possono essere rimossi o riordinati. I segmenti di un testo crittografato non possono essere inseriti in un altro testo crittografato. Per modificare un testo crittografato esistente, l'intero stream di dati deve essere criptato di nuovo.1

La decrittografia è rapida perché solo una parte del testo crittografato viene decriptata e autenticata alla volta. È possibile ottenere testi non crittografato parziali, senza elaborare l'intero testo crittografato.

Le implementazioni di AEAD di flussi di dati soddisfano la definizione AEAD e sono protette da OAE2. Hanno 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.

Dati associati

L'AEAD in modalità flusso può essere utilizzato per associare il testo crittografato a dati associati specifici. 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

Consigliamo AES128_GCM_HKDF_1MB per la maggior parte degli utilizzi. In genere:

  • AES128_GCM_HKDF_1MB (o AES256_GCM_HKDF_1MB) è l'opzione più veloce. Può criptare 264 file con una dimensione massima di 264 byte ciascuno. Durante il processo di crittografia e decriptazione viene consumato circa 1 MB di memoria.
  • AES128_GCM_HKDF_4KB consuma circa 4 kB ed è un'ottima scelta se il tuo sistema non ha molta memoria.
  • AES128_CTR_HMAC_SHA256_1MB (o AES256_CTR_HMAC_SHA256_1MB) è un'opzione più conservativa.

Garanzie di sicurezza

Le implementazioni AEAD di flussi di dati offrono:

  • Sicurezza CCA2.
  • Livello di sicurezza dell'autenticazione di almeno 80 bit.
  • La possibilità di criptare almeno 264 messaggi3 per un totale di 251 byte2 . Nessun attacco con un massimo di 232 testi non crittografato o testi criptati scelti ha una probabilità di successo superiore a 2-32.

Esempio di caso d'uso

Vedi Voglio criptare file o flussi di dati di grandi dimensioni.


  1. Uno dei motivi di questa limitazione è l'utilizzo della crittografia AES-GCM. Criptare un segmento di testo non crittografato diverso nella stessa posizione equivarrebbe al riutilizzo dell'IV, il che viola le garanzie di sicurezza di AES-GCM. Un'altra ragione è che ciò impedisce gli attacchi di rollback, grazie ai quali un utente malintenzionato potrebbe tentare di ripristinare una versione precedente del file senza essere rilevata. 

  2. Sono supportati 232 segmenti e ogni segmento contiene segment_size - tag_size byte di testo non crittografato. Per segmenti da 1 MB, le dimensioni totali del testo non crittografato sono pari a 232 * (220-16) ~= 251 byte.

  3. L'AEAD di streaming non è sicuro quando viene ripetuta una combinazione di chiave derivata (a 128 bit) e prefisso nonce (valore casuale indipendente di 7 byte). Abbiamo una resistenza alle collisioni a 184 bit, che si traduce all'incirca in 264 messaggi se vogliamo che la probabilità di successo sia inferiore a 2-32.