Contraseña recuperable encriptada

2

Tengo un enigma de contraseña. Necesito almacenar una contraseña cifrada en una tabla de base de datos, pero de tal manera que me permita recuperar la contraseña como texto simple más adelante.

Tenga en cuenta que esta es una decisión impulsada por el negocio para la que se me ha encomendado encontrar una solución técnica. ¿Podría alguien proporcionar sugerencias sobre cómo se podría lograr esto?

Encontré estas preguntas que no parecen proporcionar la solución a mi problema.

Almacenar la contraseña de un usuario de manera recuperable
Recuperación segura de datos en una base de datos

    
pregunta BustedSanta 21.11.2014 - 19:00
fuente

2 respuestas

6

Mientras esté trabajando solo con las necesidades en línea de la contraseña para integrarse con un sistema mientras el usuario está conectado, debe almacenar las contraseñas cifradas con una clave de base de datos y una clave derivada basada en el usuario. Contraseña para su servicio. Cuando el usuario envía la contraseña para su inicio de sesión, puede usarla para generar una clave derivada de la contraseña y usar ese PDK para descifrar el valor de la base de datos.

Se encripta con la propia clave de la base de datos para garantizar un cifrado sólido contra un ataque sin conexión donde solo se pierden los datos de la base de datos. Utiliza el PDK (mucho más débil) para evitar un compromiso trivial en el caso de que la base de datos y la clave de la base de datos se pierdan.

La clave para diseñar un sistema como este es intentar colocar las piezas necesarias para obtener la contraseña en la mayor cantidad de lugares posibles. Si tiene una parte en el servidor DB (clave de db), una parte en el servidor web (credenciales de conexión db), una parte en los datos de la base de datos y una parte que solo está en posesión del usuario, entonces un atacante debe comprometer mucho más áreas para hacer que el sistema falle.

    
respondido por el AJ Henderson 21.11.2014 - 21:42
fuente
2

Si necesita recuperar la contraseña de texto sin formato en algún momento, entonces realmente necesita cifrado y no hash (tenga en cuenta que muchas personas llaman "cifrado" lo que realmente es hashing). Supongo que su "necesidad comercial" proviene de la necesidad de admitir algún protocolo en el que el servidor debe conocer la contraseña de texto simple (por ejemplo, Método de autenticación APOP en el protocolo POP).

El punto crucial con el cifrado es que se realiza con una clave , que es un dato muy sensible, ya que conocer la clave permite descifrar las contraseñas. Su servidor necesitará saber la clave cuando se debe almacenar una contraseña (al momento del registro del usuario y al cambio de contraseña) y cuando se debe recuperar la contraseña (según las necesidades de su negocio). Si almacena la clave en la propia base de datos, tal como está, no habrá ganado nada con el cifrado: cifrará la contraseña porque prevé el caso de un atacante que obtiene acceso de lectura al contenido de la base de datos (por ejemplo, con un ataque de inyección SQL) pero no a todo el servidor.

Su base de datos podría hacer el cifrado por usted, sin almacenar la clave en un emplazamiento que podría revelarse a través de la inyección de SQL. Puede encontrar alguna guía para SQL Server allí .

    
respondido por el Tom Leek 21.11.2014 - 19:40
fuente

Lea otras preguntas en las etiquetas