it-swarm.dev

Quando si utilizzano AES e CBC, è necessario mantenere segreto l'IV?

Se crittografo alcuni dati con una chiave e un vettore di inizializzazione generati casualmente, memorizzo tutte e tre le informazioni nella stessa riga della tabella; è necessario crittografare il IV e la chiave?

Struttura della tabella semplificata:

  • Dati crittografati
  • Chiave (crittografata con un secondo metodo)
  • IV (crittografato?)

Supponiamo che l'architettura e il metodo siano necessari: la spiegazione alla base è lunga e noiosa.

44
Stu Pegg

Da Wikipedia :

Un vettore di inizializzazione ha requisiti di sicurezza diversi rispetto a una chiave, quindi il IV di solito non deve essere segreto . Tuttavia, nella maggior parte dei casi, è importante che un vettore di inizializzazione non venga mai riutilizzato con la stessa chiave . Per CBC e CFB, il riutilizzo di un IV perde alcune informazioni sul primo blocco di testo in chiaro e su qualsiasi prefisso comune condiviso dai due messaggi.

Non è necessario mantenere il IV segreto, ma deve essere casuale e unico.

51
Polynomial

Sebbene nel tuo caso l'IV dovrebbe essere ok in chiaro nel DB, c'è una grave vulnerabilità se permetti all'utente di controlla IV.

La IV nella decrittografia viene utilizzata (e utilizzata solo) per XOR il primo blocco nel testo in chiaro finale, quindi se un attaccante può controllare IV possono controllare arbitrariamente il primo blocco di dati e il resto del testo in chiaro sopravviverà senza modifiche.

enter image description here

Se l'attaccante conosce il testo in chiaro originale del primo blocco, il problema viene nuovamente ingrandito in quanto l'attaccante può scegliere dati arbitrari per il primo blocco senza prova e errore.

Ciò è particolarmente importante nel caso in cui i dati crittografati vengano trasmessi attraverso canali non attendibili con IV, forse in un browser o in un'app ecc.

8
George Powell