Cifrar / descifrar información en la base de datos

6

Entonces, digamos que tengo un mensaje secreto que quiero cifrar y almacenar en mi base de datos, desde donde un usuario autenticado puede recuperar, descifrar, leer y actualizar el mensaje.

EDITAR: el problema que encuentro es este: no tiene sentido usar la misma contraseña para la autorización y el descifrado. Por lo general, una contraseña con hash se almacena en la base de datos para verificar al usuario. Pero si también uso la contraseña hash para cifrar el mensaje, todo lo que debe hacer un pirata informático una vez que vea que la base de datos descifra el mensaje con la contraseña hash

De hacer algunas búsquedas de stackoverflow (http://stackoverflow.com/questions/2388256/secure-encrypted-database-design?rq=1), ahora corríjame si lo entendí incorrectamente, parece que la solución es para cifrar el mensaje secreto con claves públicas, descifrar el mensaje con claves privadas y luego cifrar simétricamente estas claves privadas con frases de contraseña del usuario. Las claves privadas cifradas se pueden almacenar en la base de datos. En resumen, así es como funciona: el usuario proporciona una frase de paso, que descifra la clave privada como se almacena en la base de datos, que luego se utiliza para descifrar el mensaje secreto tal como está almacenado en la base de datos.

Ahora, mi pregunta es esta: ¿puede usar la frase de contraseña para autenticar y descifrar el mensaje? No quiero que los piratas informáticos puedan adivinar las frases de contraseña hasta que la clave privada se haya descifrado correctamente, por lo que una autenticación de usuario (es decir, un nombre de usuario, una contraseña, una contraseña almacenada en la base de datos) sería buena. Sin embargo, la idea de tener que ingresar una contraseña para la autenticación y una frase de contraseña para descifrar el mensaje parece excesiva.

Creo que puedo estar malinterpretando la publicación enlazada, pero mi pregunta final es cómo puedo estructurar el sistema de seguridad para que el mensaje pueda cifrarse en la base de datos (en caso de que alguien obtenga acceso no autorizado a la base de datos) sin tener La contraseña de una persona es la clave para el descifrado.

    
pregunta 08.08.2012 - 18:59
fuente

2 respuestas

3

SÍ PUEDES.

Es posible utilizar la misma contraseña para la autenticación y para el cifrado de datos. Lo que necesita es derivar de la contraseña, utilizando su función de derivación de claves favorita, lo suficientemente secuencia larga dependiente de la contraseña. Luego, utiliza la primera mitad de la transmisión para la autenticación (esa es la parte que almacena en la base de datos) y la segunda mitad como clave de cifrado.

Para el KDF, use por ejemplo PBKDF2 , con SHA-256 como función hash interna. Ajuste el recuento de iteraciones para que el cómputo sea bastante caro (un recuento de iteraciones alto ralentiza a todos: su servidor, y un atacante que intentaría adivinar la contraseña; así que hágalo alto). Asegúrese de seleccionar una sal nueva, aleatoria, lo suficientemente grande (por ejemplo, 16 bytes) para cada contraseña (almacenará la sal a lo largo del valor hash en la base de datos). Generar 32 bytes con PBKDF2; use los primeros 16 bytes como token de autenticación (almacenados en la base de datos), y use los otros 16 bytes para el cifrado (con un sistema de cifrado simétrico adecuado, preferiblemente uno con verificación de integridad integrada, como EAX .

Si aplica todo eso y no obstaculiza la implementación, estará seguro de que cuando sea hackeado, será culpa del usuario (por ejemplo, un usuario usará el nombre de su perro como contraseña).

    
respondido por el Tom Leek 10.08.2012 - 00:38
fuente
1

Creo que apuntas a un modelo de seguridad en capas. Así que quieres poder cifrar los datos con alguna clave, pero esa clave debe ser independiente de la contraseña. Por lo tanto, si la contraseña es robada o pirateada, los datos no se ven comprometidos.

La seguridad puede basarse en

  • algo que tiene (archivo SSH físico, dispositivo de identificación segura, código SMS que se envía una vez que se verifica la contraseña)
  • algo que sabes (contraseña)
  • algo que eres (biometría)

En este caso, lo que desea hacer es combinar varias cosas para proporcionar una protección más fuerte. Ya tienes una contraseña, por lo que es mejor elegir algo que tengas o que seas.

La biometría podría ser una exageración para su escenario, por lo que le recomendaría algo que tenga.

Puede verificar algo que tienen, como uno de esos dispositivos de un solo uso (dispositivos de identificación segura), o solo permite la conexión a través de SSH, verificando de manera implícita las claves SSH (que han sido previamente registradas). También puede enviar un SMS a un dispositivo registrado y pedirle al usuario que coincida con el código. Si es una coincidencia, descifras los datos. Aquí la elección de la clave no sería tan importante. Puede ser independiente del usuario y también ser único para cada usuario.

Para obtener más consejos de expertos, recomendaría dirigirse a enlace , con suerte, alguien puede indicarle la dirección correcta.

Esto también se está volviendo popular como autenticación de dos factores.

    
respondido por el Nasir 08.08.2012 - 19:14
fuente

Lea otras preguntas en las etiquetas