2009-07-28 5 views
10

Tengo un problema de cifrado interesante en la mano. No sé si se puede resolver, pero aquí va:Encriptación bidireccional de la base de datos segura incluso desde Admin

Una base de datos debe contener información confidencial del usuario. Como tal, la información del usuario debe ser encriptada (encriptación bidireccional). El usuario tiene un nombre de usuario/contraseña y estos pueden ser utilizados en el cifrado bidireccional. Ahora, el cifrado debe diseñarse de tal manera que incluso el administrador que visualiza las tablas de la base de datos no pueda comprender la información del usuario.

Sin embargo, el diseño debe ocuparse de los casos en que el usuario puede olvidar su contraseña. Si la contraseña se utiliza para el cifrado, olvidar la contraseña significa que la información se pierde, no se desea. Si la contraseña del usuario se almacena en la base de datos utilizando un algoritmo bidireccional (en lugar de un hash unidireccional) con una clave codificada en el script, el administrador puede descubrir la clave codificada mirando el script (el administrador tiene acceso, por supuesto) al guion).

¿Alguien sabe una manera de salir de esto?

PD: Esto es un problema real. Mi compañía es un fanático de la seguridad absoluta (ISO 27001 y todo) y me han encomendado diseñar un sistema con la funcionalidad mencionada. Por cierto, estoy usando un script PHP y MySQL.

EDIT: Tal vez no estaba claro antes, el usuario necesita ver/editar esta información del usuario en el día a día.

+0

Pregunta: ¿Cuán fuerte debe ser su cifrado de datos? ¿Sería suficiente la ofuscación de datos (es decir, los datos no se almacenarían como texto claro pero con un poco de esfuerzo la gente podría descifrarla) o se desea un esquema de cifrado * real * fuerte? – Nicolas

+0

Encriptación real fuerte: ¡no hay posibilidad de que se descubran datos! –

+1

Bueno, si no quiere que los datos se puedan descifrar pero al mismo tiempo necesiten mostrar datos descifrados al usuario ... – Nicolas

Respuesta

15

Lo que quiere es un agente de recuperación. Cifre todos los datos dos veces: una vez con la clave de usuario, una vez con la clave del agente de recuperación (pública); al menos el último necesita ser asimétrico. Mantenga la clave del agente de recuperación en una caja de seguridad pyhsical, con un protocolo de acceso formal (por ejemplo, el principio de cuatro ojos). Por lo general, el administrador no puede acceder a los datos cifrados, pero si el usuario pierde la clave y se autoriza la recuperación, se obtiene la clave de recuperación.

También hay formas de encriptar la clave del agente de recuperación para que m-de-la gente tenga que aceptar usarla.

Editar: Una estrategia de implementación es encriptar todo dos veces. Alternativamente, para cada conjunto de datos que debe ser recuperable de forma independiente, cree una clave simétrica nueva y encripte solo esa clave dos veces; los datos originales se cifran solo con la clave de sesión.Ese enfoque puede extenderse a múltiples lectores independientes; requiere claves asimétricas por lector (para que pueda encriptar la clave de sesión con las claves públicas de todos los lectores, uno de los cuales es el agente de recuperación).

He copiado la terminología de Encrypting File System de Microsoft, que tiene ese esquema implementado.

+0

Simple y elegante –

+0

¿Podría proporcionar algunos enlaces de referencia donde pueda leer más? –

+0

Además, ¿no codificaría todo dos veces significa que la propia usuaria no podría recuperar/editar la información del usuario? –

1

No se puede hacer.

En todos los casos, alguien tiene que poder volver a crear la clave para descifrarlo. Consideremos las opciones:

  1. Clave almacenada en el servidor. Falla: el administrador tiene acceso.
  2. Clave cifrada con la contraseña del usuario. Falla: el usuario puede olvidarlo.

La solución es relajar al administrador que tiene restricción de acceso, y en lugar de imposible, lo hace muy difícil. Por ejemplo, si los datos fueron encriptados con una clave almacenada encriptada con la contraseña del usuario, pero esa clave fue guardada en otro sistema al que el administrador no puede acceder en el curso normal de los eventos (tal vez solo otro administrador tiene acceso?) entonces aún puede recuperarse de un usuario olvidando su contraseña (con la intervención de quien tenga acceso a claves en custodia), pero el administrador no puede simplemente descargar su base de datos y leer todos los datos.

+0

¿Pero es así cómo funcionan los sistemas extremadamente seguros como los bancos, etc.? Pregunto esto porque creo que alguien más definitivamente habría resuelto este problema y los bancos parecen ser un buen candidato. –

+0

Los bancos, etc. utilizan módulos de seguridad de hardware para su cifrado –

+3

Estoy de acuerdo, es un escenario de Cazafantasmas. Separe los Keymasters de los Gatekeepers, las personas que controlan las contraseñas de cuentas de usuario de aquellos que controlan los datos del usuario, y podrá evitar tener un empleado malo como un único punto de falla. Eso es bueno, porque la alternativa es la inversión protónica total. – zombat

Cuestiones relacionadas