Per proteggere i dati sensibili dell'utente, sto considerando i seguenti 2 approcci:
- Crea 1 chiave di crittografia dei dati (DEK) per ogni utente, utilizzalo per crittografare (usando la modalità CBC AES con un IV casuale per ogni operazione di crittografia) tutti i dati dello stesso utente. DEK è protetto e memorizzato separatamente dai dati.
- Utilizza più DEK, 1 ogni volta che una nuova parte di dati utente deve essere crittografata (utilizzando AES / CBC con IV come sopra). Il DEK è quindi ecrypted usando un KEK corrispondente a quell'utente, e memorizzato side by lato (ad esempio la stessa riga nel database) con i dati con cui è crittografato esso. Il KEK è memorizzato in modo sicuro, separato dai dati e DEK.
Esistono vulnerabilità conosciute in AES / CBC con buone IV casuali? Qual è il vantaggio del secondo approccio, oltre a ridurre al minimo la quantità di dati crittografati con la stessa chiave, riducendo così il rischio di essere crittograficato?