¿Es posible almacenar contraseñas de forma segura utilizando encriptación reversible?

20

Todo el mundo dice que necesitas usar un hash no reversible cuando guardas las contraseñas para que, incluso si se filtra tu base de datos, las contraseñas en sí mismas sean seguras. Me pregunto si hay alguna forma de usar el cifrado reversible para almacenar contraseñas.

Por lo menos, debería requerir que cualquier vulnerabilidad que filtre la base de datos (inyección de SQL, acceso al shell del servidor, etc.) no filtre la clave de cifrado y que no sea razonablemente posible averiguar la clave de cifrado mediante una contraseña de texto simple conocida si tiene la base de datos filtrada.

No estoy considerando seriamente hacer esto porque parece que incluso si es técnicamente posible sería difícil hacerlo correctamente, pero parece un problema interesante.

    
pregunta Steve 10.08.2011 - 03:26
fuente

4 respuestas

20

El cifrado reversible no se usa comúnmente para contraseñas porque los requisitos y parámetros específicos de la autenticación de contraseñas son incompatibles con la debilidad del cifrado reversible.

La principal debilidad del cifrado reversible es simple: si la clave está comprometida, los datos cifrados se ven comprometidos, punto.

Las contraseñas se utilizan todo el tiempo, siempre que los usuarios inician sesión. Por lo tanto, el proceso de autenticación debe poder acceder a las credenciales de los usuarios todo el tiempo, de manera automatizada, sin controles obstructivos. Eso significa que la clave para el cifrado reversible debe estar en el disco o en la memoria todo el tiempo. Si ese programa, disco o memoria están comprometidos de alguna manera, entonces todas esas contraseñas encriptadas reversiblemente están comprometidas de una sola vez.

En contraste, considere el uso de hashes no reversibles. Si el programa, el disco o la memoria se ven comprometidos, el atacante obtiene los hashes "bloqueados" y no hay ninguna clave. Luego pueden atacar aún más (ataque de texto cifrado conocido, fuerza bruta, etc.) pero aún no han "ganado".

Usamos cifrado reversible (permítanme decirlo) todo el tiempo: discos, archivos, archivos adjuntos de correo electrónico. Sin embargo, lo que todos estos usos tienen en común es que alientan (si no requieren) la intervención humana para proporcionar la clave.

No estoy seguro de por qué lo preguntas, pero ¿qué pasa con un modelo híbrido? Tenga en cuenta que podría ser razonable almacenar tanto texto cifrado reversible como no reversible para las contraseñas de los usuarios. Cuando se crean las contraseñas, almacene dos versiones cifradas: una creada con una función de hashing de una vía y la otra creada con un algoritmo de cifrado asimétrico ("criptografía de clave pública"). Todos los procesos de autenticación automatizados utilizan los hashes no reversibles para fines de autenticación. Mantenga la mitad de la "clave pública" del par en el sistema para el uso que genera las contraseñas cifradas, y almacene la mitad de la "clave privada" del par sin conexión . En el caso de que se necesite la contraseña en texto sin formato, desconecte la contraseña cifrada y descifrela con la clave correspondiente. Siempre que la clave de descifrado no sea accesible para el sistema de autenticación, un atacante no puede aprovechar el hecho de que utilizó un cifrado "reversible" para almacenar contraseñas de texto simple.

Eso solo ayudará si su necesidad de acceder a las contraseñas de texto simple no es una necesidad automática, por supuesto. Pero me parece una idea ingeniosa.

    
respondido por el gowenfawr 10.08.2011 - 05:21
fuente
6
  

¿Es posible almacenar contraseñas de forma segura utilizando cifrado reversible?

Sí, pero es mucho más difícil y requiere un esfuerzo y un gasto mucho mayores. Clavar es difícil hacerlo bien.

Para admitir el cifrado reversible (no necesariamente simétrico como notas @goenfawr ), necesita al menos Una clave (dos para criptografía de clave pública). Debe generar la clave, almacenarla de manera segura, protegerla de daños o destrucción, recuperarla para usarla, protegerla mientras está en uso y reemplazarla periódicamente.

Una parte importante del problema es cómo proteger la clave mientras no está en uso. Si cifras la clave, necesitas otra clave para descifrarla. En cuyo caso estás de vuelta donde empezaste. Otros métodos de protección utilizan hardware especial, sistemas operativos seguros o incluso computadoras personalizadas con memoria y procesadores separados para los parámetros de seguridad. Todas estas soluciones requieren entrenamiento adicional y costos de soporte.

Compare esas soluciones con el uso de una computadora minorista, un sistema operativo minorista y una función hash.

    
respondido por el this.josh 10.08.2011 - 10:39
fuente
4

Una cosa que se agrega a las respuestas existentes, es que es posible usar un cifrado simétrico (reversible) para almacenar secretos (incluidas las contraseñas), pero es un poco más complejo / caro.

Un buen ejemplo de esto son las redes de cajeros automáticos / cajeros automáticos, que tradicionalmente usaban la administración de claves simétricas (aunque se están moviendo hacia una solución basada en PKI).

La clave (no se pretende hacer un juego de palabras) para esto es que las claves de cifrado se almacenan en una ubicación de confianza, en este caso se deben seguir un Módulo de seguridad de hardware (HSM) y procedimientos estrictos relacionados con la administración y carga de claves, para garantizar que las claves permanezcan secretas.

    
respondido por el Rоry McCune 10.08.2011 - 18:41
fuente
2

Echa un vistazo a la página wiki de cifrados. Aunque hay muchos cifrados seguros, siempre existe el riesgo de perder la clave. El uso de un hash unidireccional evita este riesgo al no tener una clave.

Un principio de la ingeniería de seguridad es minimizar la información que se puede obtener dado que el sistema está comprometido.

    
respondido por el nik3daz 10.08.2011 - 03:57
fuente

Lea otras preguntas en las etiquetas