Usar números aleatorios para eliminar contraseñas

5

En un proyecto que tengo, estoy saltando contraseñas con 3 sales en este momento ...

  • Sal estática: codificada en el código fuente.
  • Sal generada aleatoriamente (mediante una función diseñada para generar sales de contraseña). Esto se almacena en la base de datos MySQL.
  • Un número aleatorio que no se almacena.

Al verificar el hash, genero 100 hashes diferentes con el salt estático, el salt almacenado en la base de datos y uno de los posibles números aleatorios, si uno de ellos coincide con la contraseña correcta.

Estoy usando sha512, por cierto.

¿Es esta una forma segura de hash de contraseñas?

¡Gracias!

    
pregunta Mitchfizz05 13.09.2014 - 04:39
fuente

1 respuesta

5
  

¿Es esta una forma segura de hash de contraseñas?

Probablemente, pero gran parte de su complejidad adicional realmente no agrega mucho valor de seguridad.

La idea de un salt es asegurarse de que no haya un método más eficaz para recuperar sus contraseñas que forzar a todos y cada uno de ellos desde cero. Por lo tanto, su objetivo es garantizar que no haya dos cuentas que tengan el mismo valor (es decir, es globalmente único). Si lo hicieran, un atacante podría básicamente obtener dos por el precio de uno construyendo una tabla de búsqueda mientras que Brute forzaba el primero.

Para lograr esto, necesita suficiente entropía en su sal para garantizar que la probabilidad de que dos cuentas tengan la misma sal sea insignificante.

  

Sal generada aleatoriamente (mediante una función diseñada para generar sales de contraseña). Esto se almacena en la base de datos MySQL.

Esta es la fuente principal de entropía en su esquema. Probablemente podrías descartar el resto sin comprometer significativamente la seguridad.

Sin embargo, para que esta sal sea efectiva, debe asegurarse:

  • El valor aleatorio que está utilizando se genera mediante un RNG adecuado para aplicaciones criptográficas.
  • Hay suficientes bits en su valor aleatorio para minimizar la probabilidad de una colisión de sal. OWASP sugiere al menos 32 bits.
  

Sal estática: codificada en el código fuente.

Esto es agregar un valor criptográfico mínimo. Desde una perspectiva teórica, no está agregando ninguna entropía adicional, asumiendo que el atacante conoce el valor, y desde una perspectiva práctica, los servidores de DB generalmente se ven comprometidos a través de las credenciales obtenidas de una aplicación comprometida.

  

Estoy usando sha512, por cierto.

Si bien este es un algoritmo de hash criptográficamente seguro, también es un problema "rápido", lo cual es un problema dado que los usuarios suelen usar contraseñas débiles. Debería considerar utilizar un algoritmo de hashing lento (por ejemplo, bcrypt) o repetir su proceso de hashing 10k o más veces. Si se tarda aproximadamente un segundo en calcular cada hash, incluso un ataque de diccionario llevará mucho tiempo.

  

Al verificar el hash, genero 100 hashes diferentes con el salt estático, el salt almacenado en la base de datos y uno de los posibles números aleatorios, si uno de ellos coincide con la contraseña correcta.

El valor de esto es mínimo, básicamente solo estás agregando uno o dos caracteres adicionales a la contraseña y luego los fuerza bruta forzándolos cada vez. Esto ralentizará tu esquema de hash, lo que es bueno, pero sería mejor que utilizaras la técnica anterior para lograr esto.

    
respondido por el thexacre 13.09.2014 - 05:24
fuente

Lea otras preguntas en las etiquetas