Cómo cifrar una contraseña almacenada en una base de datos (es necesario descifrar más tarde)

8

Estoy trabajando en un sistema que puede conectarse a cualquier número de sistemas diferentes. Alguien ingresa las credenciales para que un sistema se conecte, y mi sistema recuerda las credenciales y las usa para autenticar y comunicarse con él en una fecha posterior (lo que ocurrirá sin la interacción del usuario).

Todas las otras preguntas como esta tienen la respuesta "hash hash hash!", pero puedes ver que el hashing no funciona para mí, ya que necesito descifrar la contraseña más adelante para conectarme a los otros sistemas (que son independientes de mio).

Ahora mismo estoy pensando que debería generar dinámicamente una clave aleatoria para cada nuevo sistema y almacenarla en el disco, luego almacenar la contraseña (cifrada con un algoritmo simétrico) en la base de datos. De esa manera, la información en la base de datos por sí sola no es suficiente para descifrar la clave.

¿Es eso lo mejor que puedo hacer?

    
pregunta 31.01.2012 - 17:29
fuente

2 respuestas

4

Usted tiene razón si el sistema al que se está conectando no puede aceptar más que una contraseña como credencial. Si así es como funciona el sistema remoto, desafortunadamente está diseñado y, si es posible, debería extenderse para aceptar otro tipo de token. Ejemplos de tokens más apropiados son tickets Kerberos, claves SSH, credenciales OpenID u otras credenciales personalizadas por aplicación.

Todas las buenas soluciones de autenticación tienen algo en común: permiten que el usuario lo autorice a conectarse en su nombre, sin tener que darle sus credenciales. Un buen sistema permite a mi asistente administrativo comprar boletos de avión en mi nombre. No requiere que mi administrador se haga pasar por mí.

Sin embargo, si los sistemas remotos están mal diseñados y no pueden aceptar este tipo de credenciales delegadas, entonces no tiene más remedio que almacenar las contraseñas. En ese caso, es tradicional ofuscar la contraseña en su base de datos utilizando algún tipo de "algoritmo y clave de cifrado". (Por ejemplo, AES encripta las contraseñas contra una clave almacenada en el disco). Esto no debe confundirse con el cifrado real; es solo ofuscación Pero puede ser una ofuscación útil si no tiene otras opciones.

Una solución mejor que una única contraseña almacenada en el disco es una clave de hardware que realiza el descifrado por usted. Un dispositivo de este tipo a menudo se denomina módulo de seguridad de hardware y, a menudo, adopta la forma de una tarjeta inteligente (a veces es un dispositivo montado en un bastidor completo, una placa o una llave USB). Presenta la contraseña cifrada al HSM y le devuelve la contraseña no cifrada. La ventaja de este enfoque es que si alguien clona su disco, no podrá descifrar las contraseñas. Los HSM son difíciles de clonar físicamente, lo que hace que sea más difícil para un atacante robar las credenciales sin ser detectado. En los mejores diseños, el proceso que habla con el HSM tiene una credencial que se ingresa manualmente en el inicio y solo se almacena en la memoria. Por lo tanto, los procesos aleatorios no pueden consultar el HSM y, si la máquina está desconectada, ya no puede acceder a las contraseñas. Incluso en este escenario, es posible que el atacante pueda engañar al sistema para que descifre todas las contraseñas para él, pero la superficie de ataque está muy disminuida.

    
respondido por el Rob Napier 31.01.2012 - 17:59
fuente
0

Debería generar una clave de cifrado a partir de la contraseña del usuario en su sistema.

De esta manera, nadie puede ver ninguna contraseña a menos que ya tengan la contraseña del usuario.

Sin embargo, eso significa que no puedes restablecer las contraseñas de los usuarios.

    
respondido por el SLaks 31.01.2012 - 17:31
fuente

Lea otras preguntas en las etiquetas