La primitiva AEAD in streaming fornisce crittografia autenticata per i dati in streaming. È utile quando i dati da criptare sono troppo grandi per essere elaborati in un unico passaggio. I casi d'uso tipici includono la crittografia di file di grandi dimensioni o flussi di dati in tempo reale.
La crittografia viene eseguita in segmenti, che sono legati alla loro posizione all'interno di un testo cifrato e non possono essere rimossi o riordinati. I segmenti di un testo cifrato non possono essere inseriti in un altro testo cifrato. Per modificare un testo cifrato esistente, l'intero stream di dati deve essere criptato di nuovo.1
La decrittografia è rapida perché viene decriptata e autenticata solo una parte del testo cifrato alla volta. È possibile ottenere i testi in chiaro parziali senza elaborare l'intero testo crittografato.
Le implementazioni AEAD per i flussi di dati soddisfano la definizione AEAD e sono nOAE-secure. Hanno le seguenti proprietà:
- Riservatezza: non è nota alcuna informazione sul testo non cifrato, tranne la sua lunghezza.
- Autenticità: è impossibile modificare il testo non crittografato alla base del testo crittografato senza che questo venga rilevato.
- Simmetrica: la crittografia del testo in chiaro e la decrittografia del testo cifrato vengono eseguite con la stessa chiave.
- Randomizzazione: la crittografia è casuale. Due messaggi con lo stesso testo in chiaro generano testi cifrati diversi. Gli aggressori non possono sapere quale messaggio cifrato corrisponde a un determinato testo non criptato.
Dati associati
La crittografia lato client con crittografia lato client può essere utilizzata per legare il testo cifrato a dati associati specifici. Supponi 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ò trasferire la storia clinica da un utente all'altro.
Scegli un tipo di chiave
Per la maggior parte degli utilizzi, consigliamo AES128_GCM_HKDF_1MB. In generale:
- AES128_GCM_HKDF_1MB (o AES256_GCM_HKDF_1MB) è l'opzione più veloce. Può criptare 264 file con un massimo di 264 byte ciascuno. Durante il processo di crittografia e decrittografia viene utilizzato circa 1 MB di memoria.
- AES128_GCM_HKDF_4KB consuma ~4 kB di memoria ed è una buona scelta se il 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 in streaming offrono:
- Sicurezza CCA2.
- Efficacia dell'autenticazione di almeno 80 bit.
- La possibilità di criptare almeno 264 messaggi3 per un totale di 251 byte2 . Nessun attacco con fino a 232 codici in chiaro o cifrati scelti ha una probabilità di successo superiore a 2-32.
Esempio di caso d'uso
Consulta Voglio criptare file di grandi dimensioni o stream di dati.
-
Uno dei motivi di questa limitazione è l'utilizzo della crittografia AES-GCM. La crittografia di un segmento di testo non cifrato diverso nella stessa posizione equivarrebbe al riutilizzo dell'IV, che viola le garanzie di sicurezza di AES-GCM. Un altro motivo è che in questo modo vengono evitati gli attacchi di rollback, in cui l'aggressore potrebbe tentare di ripristinare una versione precedente del file senza essere rilevato. ↩
-
Sono supportati 2 segmenti 32, ciascuno contenente
segment_size - tag_size
byte di testo non cifrato. Per i segmenti di 1 MB, la dimensione totale del testo non cifrato è 232 * (220-16) ~= 251 byte. ↩ -
La crittografia AEAD in streaming diventa non sicura quando viene ripetuta una combinazione di una chiave derivata (128 bit) e un prefisso nonce (valore casuale indipendente di 7 byte). Abbiamo una resistenza alle collisioni a 184 bit, che corrisponde approssimativamente a 264 messaggi se vogliamo che la probabilità di successo sia inferiore a 2-32. ↩