Tengo una tabla donde todas las columnas deben estar cifradas (aparte de la PK). Esto se logrará utilizando AES en el nivel de aplicación. Sin embargo, hay un campo en particular que debe seguir siendo investigable.
Por ejemplo, una tabla de mensajes tiene:
- MessageTitle (encriptado)
- MessageBody (cifrado)
- SenderID (cifrado pero coincidente)
Dado un texto simple, SenderID debería poder seleccionar todos los mensajes relacionados.
Algunas restricciones / decisiones:
- Necesito cifrar los datos en reposo, incluida esta columna. No tengo otra opción.
- El SenderID tiene un formato fijo, por lo que si elimino el valor, no sería difícil utilizar la fuerza bruta
- He elegido cifrar campos específicos en lugar de toda la base de datos (TDE) para mitigar otras amenazas que no sean solo los discos robados.
Actualmente, mi solución preferida es cifrar el SenderID (y solo el SenderID) con un IV fijo. De esta manera, los datos se mantienen encriptados, pero aún podemos coincidir con ellos en las consultas.
Una desventaja de este enfoque es que los ataques de texto simple pueden ocurrir en los datos; Los DBA podrían crear registros con diferentes SenderID y tratar de encontrar un registro coincidente. Sin embargo, creo que esto se puede mitigar en el Servicio de cifrado con un control y control de acceso adecuados.
¿Esto parece una solución válida?