Almacenamiento seguro de datos usando una clave derivada de contraseña. ¿Cómo lidiar con la contraseña perdida?

0

Para almacenar de forma segura los datos de un usuario registrado, obtengo una clave de su contraseña cuando se conecta y la uso para cifrar los datos almacenados localmente para este usuario.

Sin la contraseña del usuario, que solo obtengo cuando el usuario se conecta (solo se almacena localmente un hash_mac de la contraseña para el inicio de sesión), no puedo descifrar los datos almacenados para este usuario.

Sin embargo, en tal escenario, si el usuario pierde su contraseña, nadie podrá descifrar sus datos. ¿Cómo se maneja tal problema?

    
pregunta Nicolas Manzini 28.11.2015 - 18:43
fuente

2 respuestas

3

Es difícil decir qué tan exactamente estás cifrando las cosas. En la situación exacta que ha descrito, los datos del usuario se pierden y no se puede hacer nada.

Sin embargo, si está haciendo todo el escenario (tenga en cuenta que existen muchos escollos y es fácil idear algo que solo parece seguro), tiene algunas opciones /

Un posible escenario es que los datos del usuario se cifren mediante una clave aleatoria. Esta clave aleatoria se encripta utilizando una clave derivada de contraseña.

Lo bueno de este esquema:

  • Cuando el usuario cambia la contraseña, no tiene que volver a cifrar todos sus datos, solo la clave cifrada, por lo que el cambio de contraseña puede finalizar en un tiempo razonable.
  • Puede tener varias 'ranuras', cada una con la clave de cifrado real cifrada por algo diferente: contraseña de usuario, alguna contraseña maestra, lo que sea, use su imaginación.

Cosas malas:

  • Es mucho más fácil robar la ranura cifrada, montar un crack de contraseña fuera de línea y luego regresar con una clave conocida y robar todos los datos.
  • Debe tener mucho cuidado al eliminar una clave: si 'olvida' la contraseña, pero no borra por completo los datos de la ranura, permanecerá abierta para descifrar la contraseña.
  • Su contraseña maestra / clave / lo que sea un objetivo mucho mejor que las contraseñas individuales del usuario: después de todo, probablemente tendrá una contraseña maestra, que puede desbloquear los datos de todos los usuarios.
  • Subvierte la confianza en su sistema; anteriormente, solo el usuario tenía acceso a sus datos, ahora el administrador también los tiene.
respondido por el Torinthiel 28.11.2015 - 21:21
fuente
0

Una forma de evitar un desastre si el usuario pierde su clave es usar una clave de respaldo que se puede usar para descifrar los datos sin la contraseña del usuario. Cuando el usuario se encripta con su clave de encriptación principal, también debe encriptar en la clave de respaldo.

La segunda clave puede ser un par de claves asimétricas, de modo que el usuario (o atacante) solo tenga acceso a la clave pública para cifrar sus datos para que la clave privada de respaldo pueda descifrarla, pero no puede proporcionar la clave privada a cualquier otra persona (accidental o no).

Si sus datos son grandes, también puede introducir una clave de cifrado de datos (DEK). En lugar de cifrar los datos utilizando la clave derivada de la contraseña del usuario, crea un DEK para cifrar los datos y cifrar el DEK con los datos con la clave derivada de la contraseña del usuario. También cifraría una segunda copia del DEK con la clave de copia de seguridad.

Ahora el problema es cómo proteger esta clave de copia de seguridad. Varios modelos de amenazas dan varias soluciones a esto. Algunas opciones posibles:

  1. Use un módulo de seguridad de hardware, con un registro de auditoría sólido. Debería asegurarse de que el HSM físico se encuentre en un centro de datos seguro. El HSM asegura que los secretos nunca salgan del HSM sin que lo sepa. Necesitaría un proceso organizativo para auditar los registros regularmente.
  2. Use la división secreta / compartir secreto para dividir la segunda clave a varias personas. Un intercambio secreto como el intercambio secreto de Shamir le permite dividir un N secreto y requiere al menos M partes para reconstruir el secreto. Puede dar una parte al usuario, una parte guardada por el administrador del sistema, una parte es guardada por un tercero en el que ambos confían; para descifrar sin contraseña, necesita al menos dos partes para revelar su parte del secreto.
  3. O simplemente dígale al usuario que escriba / imprima la clave de respaldo y la guarde en un lugar realmente seguro.
respondido por el Lie Ryan 30.11.2015 - 15:23
fuente

Lea otras preguntas en las etiquetas