Actualización de la seguridad de las contraseñas de hash [duplicado]

1

Supongamos que tenemos una base de datos con nombres de usuario y contraseñas, donde las contraseñas se protegen de forma ingenua utilizando una sola ronda de SHA-1 (como la práctica recomendada hace algunos años).

Ahora, digamos que deseamos actualizar la seguridad del almacenamiento de credenciales, pero los usuarios deben permanecer felizmente inconscientes de que se están produciendo cambios.

Obviamente, no tenemos las contraseñas en texto sin formato, pero estoy considerando simplemente tratar el sha1 (contraseña) como si fuera la contraseña en texto sin formato, y estoy seguro de eso.

Aquí está mi pensamiento:

  1. Generar sal aleatoria por usuario (128 bits)
  2. Reemplace "username","sha1(password)" en la base de datos con "username","salt","bcrypt(salt,sha1(password)),iterations=20000"
  3. Cambie el código de validación para validar las contraseñas haciendo primero sha1, luego codifique el resultado con el salt n veces y luego verifique.

¿Hay fallas evidentes en esta estrategia?

Aunque no es perfecto, ¿es razonable decir que esto mejora enormemente la seguridad de las contraseñas de los usuarios, en el caso de una infracción?

    
pregunta Niels2000 06.04.2016 - 10:19
fuente

2 respuestas

1

No veo fallas allí. Cuando se usa bcrypt, a menudo es una buena idea usar un hash regular primero, porque bcrypt tiene un pequeño inconveniente conocido de estar limitado a solo 72 caracteres de entrada. El uso de un hash antes hace que el tamaño de entrada sea efectivamente ilimitado, sin reducir la seguridad en absoluto. Por lo tanto, no solo obtiene la fuerza adicional de bcrypt, sino que el uso de SHA-1 mejora la flexibilidad de bcrypt, en lugar de mejorar su fuerza (que solo mejora en una cantidad insignificante).

    
respondido por el forest 06.04.2016 - 10:55
fuente
1

Con este esquema, ciertamente estás haciendo más difícil la vida de un atacante. Aquí está el algoritmo general de ataque para descifrar contraseñas de texto plano protegidas con bcrypt:

  1. Obtener hashes (obviamente)
  2. Generar contraseñas candidatas para la herramienta de descifrado de contraseñas
  3. realizar el intento de craqueo

Y aquí está el algoritmo de ataque para descifrar tus contraseñas sha1-hashed-than-bcrypted:

  1. Obtener hashes
  2. Generar contraseñas candidatas para la herramienta de descifrado de contraseñas
  3. Calcule el SHA-1 correspondiente
  4. realizar el intento de craqueo

Entonces, como puede ver, el atacante debe realizar un paso adicional barato para descifrar la contraseña. Por lo tanto, su esquema debe proporcionar al menos el mismo nivel de seguridad que el uso de bcrypt para proteger las contraseñas de texto simple.

Como un pequeño bono, está obteniendo un esquema que no se implementa de manera inmediata en las herramientas comunes de craqueo. Hará que el descifrado de contraseñas sea aún más difícil si el atacante no es muy sofisticado y no podrá descubrir el esquema de hash. Pero esta característica es seguridad por oscuridad, por lo que es mejor esperar que el atacante sepa todo acerca del enfoque de hash de contraseña.

    
respondido por el Artem Bychkov 06.04.2016 - 10:46
fuente

Lea otras preguntas en las etiquetas