Tenemos un cliente que desea que sus datos confidenciales de usuario se almacenen con un cifrado.
Estos son los requisitos básicos:
- Los datos confidenciales del usuario se almacenan en una base de datos mediante el cifrado
- Un atacante remoto que tiene acceso al servidor web y / o la base de datos no obtiene acceso a los datos confidenciales
- Los usuarios que han iniciado sesión deben poder acceder a los datos
Se nos ocurrió el siguiente entorno & Flujo de trabajo
Ambiente
-
Servidor 1
- Servidor web que aplica HTTPS
- Base de datos con datos de usuario encriptados
- No tiene acceso al servidor 2, solo a un servicio
-
Servidor 2
- Servicio con autenticación de 2 vías
- Tiene acceso a la base de datos cifrada en el servidor 1
- Tiene clave de cifrado para los datos de usuario en la base de datos en el servidor 1
Flujo de trabajo
- El usuario inicia sesión en el sitio web con el nombre de usuario & contraseña [inicio de sesión parte 1]
- El servidor 1 solicita un token en el servidor 2
- El servidor 2 descifra el número de teléfono móvil de los datos de usuario en el servidor 1 y envía un SMS de autenticidad.
- El usuario ingresa el código de autenticación del SMS en el formulario [Parte 2 de inicio de sesión]
- El servidor 1 solicita la clave de cifrado del servidor 2 mediante el token y el código de autenticación
- El servidor 1 almacena la clave solicitada en la sesión de usuario (sesión de PHP, el usuario del servidor web no tiene acceso) . El servidor 1 utiliza algunos de los datos de conexión de los usuarios web (dirección IP y cadena de agente de usuario) para cifrar la clave en la sesión de usuario
¿Es esta una solución lo suficientemente buena para proteger los datos confidenciales?