¿Cómo verificar una clave * y * almacenar datos encriptados?

1

Deseo crear un sistema en el que almacene datos encriptados .

Los usuarios pueden acceder a estos datos si tienen la clave. Si dan una clave incorrecta, no tienen acceso en absoluto. Si dan la clave correcta, obtienen los datos y pueden modificarlos.

Una idea que se me ocurrió es almacenar el bcrypt de la clave, una sal y el AES de datos encriptados usando un PBKDF2 con la sal y un alto número de iteración.

Obtener los datos seguiría este proceso:

  1. Obtenga la clave del usuario.
  2. Obtenga el código de esa clave.
  3. Si el bcrypt no coincide, deniegue el acceso.
  4. Obtenga el PBKDF2 de la clave con la sal.
  5. Use ese PBKDF2 para descifrar los datos.
  6. Proporcione los datos al usuario a través de un canal seguro (más allá de este diseño).

El sistema debería hacer que sea difícil obtener los datos, incluso si tiene acceso a los datos sin procesar y encriptados.

Mi diseño parece lograr ese objetivo, pero tengo inquietudes de criptoanálisis diferencial en torno al hecho de que la clave está encriptada con bcrypt y con PBKDF2 encriptación AES . ¿Podrían las referencias cruzadas de bcrypt y los datos en bruto, AES encriptados hacen que sea más fácil romper la clave? ¿Hay problemas conocidos con este tipo de diseños?

¿Hay una forma más simple?

Obviamente no puedo deshacerme de la parte bcrypt , ya que cualquier clave descifraría los datos AES (aunque el resultado sería un engaño). No puedo usar bcrypt como la clave para AES , porque la clave se almacenaría junto con los datos cifrados, lo que anula la finalidad del cifrado.

    
pregunta Thaddee Tyl 18.04.2012 - 03:12
fuente

1 respuesta

4

¿Por qué no utiliza el cifrado autenticado? Si el usuario proporciona la clave correcta, el cifrado se realiza correctamente y puede devolver los datos al usuario. Si la clave es incorrecta, el cifrado falla y no proporcionará los datos.

Mira la solución usada en TrueCrypt. La contraseña del usuario no se almacena en ningún lugar en el contenedor cifrado. Se verifica descifrando el encabezado del volumen TC y verificando algunos datos después del descifrado. Más detalles aquí: Esquema de cifrado

La solución utilizada en TrueCrypt no es un cifrado de autenticación, pero muestra que no es necesario almacenar la clave / contraseña del usuario para saber si la contraseña ingresada es correcta.

    
respondido por el pgolen 18.04.2012 - 07:23
fuente

Lea otras preguntas en las etiquetas