¿Por qué regenerar el hash de una contraseña?

4

He leído enlace sobre cómo almacenar contraseñas Usando PHP y MySQL, la forma segura. Elbert dice:

  
  • Use una función hash criptográficamente fuerte como SHA-1 o incluso SHA-256 (vea la función hash () de PHP).
  •   
  • Use un salt largo y aleatorio para cada contraseña.
  •   
  • Use un algoritmo de hashing lento para hacer que los ataques de fuerza bruta sean casi imposibles.
  •   
  • Regenera el hash cada vez que un usuario inicia sesión.
  •   

Recibo las tres primeras reglas, sin embargo, no veo por qué la contraseña debe regenerarse todo el tiempo. ¿Por qué es eso?

    
pregunta Keelan 11.04.2013 - 20:44
fuente

1 respuesta

8

Lo que probablemente signifique el póster del blog es que debe marcar la contraseña provista cuando el usuario intenta iniciar sesión, y tendrá que hacer ese hash para cada intento de inicio de sesión, ya que el servidor almacena solo el hash.

Es posible, pero no probable, que el autor realmente haya querido cambiar la sal y volver a calcular un nuevo hash en cada inicio de sesión, lo que sería un poco estúpido, explicando por qué lo considero "improbable". Pero bueno, esto es Internet, cualquier cosa puede pasar.

La publicación del blog está parcialmente a la derecha. Sí, necesitas un hash lento y salado . Pero no, un bucle casero de hashing no puede ser aprobado. Los algoritmos criptográficos no deben improvisarse; hecho en casa es malo . Lo que debe usarse es una construcción bien examinada que ha sido inspeccionada por muchos criptógrafos durante mucho tiempo. Consulte esta respuesta para obtener detalles sobre las soluciones habituales. En PHP, esto significa usar la función crypt() con el parámetro CRYPT_BLOWFISH .

(Aparte de la necesidad de usar construcciones estándar, también es importante usar una implementación rápida , ya que todo el concepto de hashing lento es una competencia muscular entre la máquina del atacante y la máquina del defensor. El uso de las funciones estándar de PHP permite acceder a implementaciones de código nativo, que serán mucho más eficientes que cualquier cosa escrita en PHP.)

    
respondido por el Thomas Pornin 11.04.2013 - 20:55
fuente

Lea otras preguntas en las etiquetas