2011-10-07 21 views
8

Necesito encriptar contenido en mi aplicación web por usuario.¿Cómo puedo cifrar el contenido del usuario en mi sitio para que ni siquiera yo pueda acceder al contenido?

Yo, el usuario root, no quiero tener acceso al contenido de los usuarios, punto.

¿Cómo puedo hacer para que los usuarios sean los únicos con acceso a su contenido? Tal vez puedo hacerlo para que un hash de su contraseña de inicio de sesión actúe como una clave de encriptación y descifrado (entonces su contraseña se almacena en hash unidireccional en mi base de datos, y el hash de cifrado/descifrado se genera desde su contraseña sin procesar al iniciar sesión y se almacena en una galleta local)? Pero, ¿qué pasa si cambian su contraseña? Luego tengo que actualizar todo su contenido, lo que podría requerir mucho poder de procesamiento.

¿Hay algún método de cifrado que pueda proporcionar esto, sin tener que volver a cifrar su contenido si cambia su contraseña? Algo similar a ecryptfs en Linux, tal vez? Está investigando ecryptfs un buen lugar para comenzar?

¿Lo hace para que solo el usuario pueda acceder a su contenido en mis servidores (y ni siquiera a mí), incluso si es posible?

+0

Me pregunto cómo hushmail.com hace esto. – SQLMason

+0

Aquí hay un libro blanco sobre su encrpción: http://www.hushmail.com/public_documents/Hush%20Encryption%20Engine%20White%20Paper.pdf –

+0

De una respuesta por correo electrónico de Hushmail: Nuestro sistema está diseñado de tal manera que solo con su frase de contraseña puede descifrar el correo electrónico cifrado en su cuenta. La frase de contraseña en sí es almacenada en un hash cifrado por lo que incluso nuestro personal no puede verla. Esto significa si su correo está encriptado, no podemos leerlo. –

Respuesta

11

proceso:

  1. Generar un secreto aleatoria para cifrar su contenido.
  2. Usando su contraseña provista, encripte el secreto al azar desde # 1.
  3. Almacenar su contraseña como hash unidireccional (con salt, quizás multi-hash).

Al de cambio de contraseña:

  1. Re-generar el valor de la etapa # 2.
  2. Vuelva a generar el hash-caché desde el paso 3.

Al ingreso:

  1. hash de la contraseña y comprobar contra de hash generada en el paso # 3.
  2. Si la contraseña coincide - use contraseña actual proporcionada para descifrar el secreto al azar de # 2.
  3. Usa el secreto al azar del n. ° 2 para desbloquear los datos cifrados en el n. ° 1.

Notas:

  • Nadie puede decodificar los datos sin conocer el secreto aleatorio (# 1). El secreto aleatorio solo se puede desbloquear con la contraseña real del usuario (n. ° 2) (menos que la fuerza bruta). La contraseña real del usuario solo se conoce en forma de hash unidireccional (n. ° 3) para que pueda confirmar que es la misma, pero no puede decodificarla y recuperar n. ° 2.
  • No se puede realizar un proceso de contraseña olvidado (puede regenerar el n. ° 3, pero la clave aleatoria en n. ° 2 se pierde ahora y todo está bloqueado en su bóveda).
  • No tiene que volver a cifrar todo en el paso n. ° 1 cada vez que cambie su contraseña, solo el secreto aleatorio (simple/rápido) del n. ° 2.
  • Si almacena en caché la contraseña proporcionada, o el secreto aleatorio generado en el paso 1, o su contenido (descifrado) en cualquier lugar, podría causar filtraciones de datos.
+1

Lo generó, pero mientras no lo almacene, no. La única manera de averiguarlo es tener su contraseña para decodificar el formulario encriptado desde el # 2. O a través de la fuerza bruta;) Puede usar un hash de su contraseña en este paso pero * no * puede usar el formulario hash que almacena (de lo contrario sí, puede descifrarlo sin conocer su contraseña) – Rudu

+0

Lo siento, eliminé mi comentario porque Hice una pregunta que podría haber respondido si hubiera leído su publicación más de cerca. Me gusta tu idea. –

+0

¿No es posible generar el lado del cliente secreto al azar? De esta forma, realmente se asegura de que ni siquiera ve el secreto –

-1

No tiene sentido que necesite utilizar su contraseña como clave.

No me gustaría con ecryptfs porque un sistema de archivos cifrados no es la mejor solución. No querrá que los datos de un usuario se cifren con la misma clave que usó otro usuario.

Cuando cifra los datos, debe generar una cadena aleatoria para usar como sal. Esto evita que alguien use una lista pregenerada de hashes para descifrar sus datos. También cambia el hash de dos personas que podrían usar la misma contraseña.

Cuando un usuario cambia su contraseña, tendrá que volver a cifrar los datos y generar un nuevo valor de sal. Este es el nivel de seguridad que esperaría como cliente, sabiendo que cuando cambie mi contraseña, volveré a encriptar todos mis datos para evitar que alguien intente forzar mi llave bruta.

Puede almacenar el valor de sal en su base de datos sin cifrar.

+1

Con eCryptfs, los datos de cada usuario podrían cifrarse con sus propias claves. –

Cuestiones relacionadas