Tengo una base de datos MySQL que almacena datos confidenciales (personales) sobre individuos; y se han encargado de garantizar que estos datos estén encriptados de alguna manera para proteger a las personas y sus datos, por ejemplo. el servidor debe estar comprometido, o un usuario malintencionado de nuestro proveedor de servicios de alojamiento accede al servidor sin autorización. La base de datos es utilizada por un marco web PHP que reside en el mismo servidor.
Estoy luchando con un buen esquema que permite que los datos se cifren & imposible de leer sin la debida autorización; mientras se mantiene la funcionalidad (índices, relaciones de base de datos, poder leer los datos en el marco web). ¿Cuáles son las mejores opciones?
Dos enfoques que he considerado son:
1) Encriptar campos / datos específicos en la base de datos con una clave para que, si la base de datos se ve comprometida, la información que contiene no sea deducible para un usuario individual (por ejemplo, mantenemos índices y relaciones, pero la información de identificación personal se cifra) ). La aplicación descifraría la información usando la clave en tiempo de ejecución. El desafío está en cómo administrar la clave: si se coloca en la lógica de la aplicación o si la lógica de la aplicación puede acceder a ella como un archivo en el mismo servidor, aún puede verse comprometida. Posiblemente podría estar ubicado en otro servidor; pero aún sería necesario acceder en tiempo de ejecución mediante la lógica de la aplicación; es decir, el acceso a la lógica de la aplicación permitiría tomar posesión de la clave. Posiblemente podría almacenar la clave en la memoria al arrancar el servidor; pero introduce un posible problema de estabilidad (servicio inactivo después de reiniciar). ¿Qué son las opciones? ¿Es este un buen enfoque?
2) Implementando algún tipo de división lógica de datos entre la información de identificación personal y la base de datos restante. P.ej. una tabla con información personal (nombre de usuario, correo electrónico) un índice; una tabla con los datos confidenciales (por ejemplo, tabla de información de salud) con otro índice; y luego introducir algún tipo de cifrado basado en clave unidireccional (piense, por ejemplo, enlace ) una tabla entre los dos, donde Relación entre la información personal y amp; los datos confidenciales solo se pueden generar (incluso en tiempo de ejecución mediante la lógica de la aplicación) si se puede suministrar una clave para que coincida con la tabla. Pero una vez más, me topo con la necesidad de administrar el acceso a la clave utilizada en el escenario anterior; similar al anterior.
¿Qué es la mejor práctica?