¿es viable este esquema de encriptación de datos?

1

Mi objetivo es poder cifrar los datos para que nadie pueda usarlos si fue robado.

Datos del usuario
- el que será encriptado
- Puede ser cualquier tipo de datos

Clave de cifrado de datos
- la clave para cifrar y descifrar los datos de usuario
- almacenados encriptados
- no cambia
- único por usuario
- generado al registrarse
- tiene dos copias encriptadas:

  • 1st se cifra y se descifra con la contraseña no cifrada del usuario
  • 2nd está encriptado y desencriptado usando el correo electrónico del usuario

Contraseña de usuario
- se utiliza para cifrar y descifrar la primera copia de la clave de cifrado de datos
- almacenado encriptado utilizando bcrypt

Correo electrónico del usuario
- se utiliza para cifrar y descifrar la segunda copia de la clave de cifrado de datos
- tiene una copia separada almacenada encriptada usando bcrypt. La otra copia era parte de los datos del usuario

[LOGIN]
Cuando el usuario inicie sesión, la contraseña enviada se verificará utilizando la contraseña cifrada almacenada. Si es válido, su clave de encriptación de datos será descifrada usando la misma contraseña enviada. La clave de cifrado de datos ahora se puede utilizar para cifrar y descifrar los datos del usuario.

[CAMBIAR CONTRASEÑA]
El usuario proporciona su contraseña anterior. Esto se utilizará para descifrar la clave de cifrado de datos que luego se cifrará con la nueva contraseña.

[OLVIDAR CONTRASEÑA]
El usuario debe proporcionar su nombre de usuario y correo electrónico. Este nombre de usuario se usará para encontrar el correo electrónico cifrado que se almacenará por separado y se usará para verificar el correo electrónico proporcionado. Si tanto el nombre de usuario como el correo electrónico son correctos, el correo electrónico proporcionado recibirá una clave de reinicio. La tecla de reinicio permitirá al usuario proporcionar una nueva contraseña. La segunda clave de cifrado de datos se descifrará mediante el correo electrónico y se cifrará con la nueva contraseña. El valor resultante reemplazará la primera clave de cifrado de datos.

Me pregunto si este es un esquema viable. Todavía no he buscado un enfoque similar. Si conoce uno o tiene uno mejor, hágamelo saber.

    
pregunta Gene Diaz 13.10.2014 - 14:44
fuente

1 respuesta

1

Entonces, si tengo sus objetivos correctos, usted quiere proteger los datos del usuario y desea que sus datos sean recuperables si pierden su contraseña de inicio de sesión.

Lo básico: hay cosas que sabes; cosas que saben y cosas que ambos saben.

Preferiblemente, para que el cifrado de sus datos en su sistema realmente tenga sentido, debe estar protegido por algo que no sepa, al menos no todo el tiempo.

Dejando a un lado la recuperación de la contraseña / cuenta por el momento, el método más simple es mantener y hacer coincidir un hash con sal de su contraseña, pero almacenar en caché su contraseña ingresada como datos de sesión temporales para descifrar / acceder / modificar su contenido mientras están conectados . Descartar los datos de la sesión cuando se desconectan o se agotan.

La recuperación de la contraseña cuando se trata de un cifrado de datos serio debe ser responsabilidad del usuario, ya que el manejo de este problema en particular socava la misma seguridad que espera proporcionar. Su sitio web o aplicación debe proporcionar opciones de copia de seguridad para su contraseña, como un código QR que pueden imprimir. Tener esta opción de recuperación como una contraseña o credencial diferente no tiene ningún sentido en este caso, ya que sus datos solo están cifrados en el fondo por una clave simétrica. También puede tener un canal, una credencial o un mecanismo por separado que sea de una sola vez o de correo electrónico para recuperar su cuenta pero no sus datos . Esa distinción debe ser clara para ellos. Sin contraseña, sin copia impresa, sin recuperación de datos.

La principal preocupación del enfoque inicial que ha descrito es que las funciones y responsabilidades de la seguridad de sus datos están confusas. Debería alojar sus datos de manera útil para el sitio web o la aplicación cuando están conectados, pero deben conservar la única credencial para acceder a sus datos. Bcrypt es una forma indirecta de almacenar sus datos en su sistema sin cifrado; ya que toda la información necesaria para descifrarla ya está persistentemente en el servidor.

Naturalmente, si el cifrado / descifrado se produce en el lado del cliente, el riesgo de seguridad para el usuario es aún menor, pero eso depende en gran medida de cómo el sitio web o la aplicación necesita utilizar sus datos, por lo que puede que no sea una opción práctica. / p>     

respondido por el LateralFractal 13.10.2014 - 15:12
fuente

Lea otras preguntas en las etiquetas