¿Es mi función hash suficientemente buena

1

¿Existe una falla obvia con esta función de hash (escrita en PHP)?

function hash($password) {
  sleep(1); // Make hashing slow
  $hash = "";
  $iterations = strlen($password);
  for ( $i = 0; $i < $iterations; $i++ ) {
      $hash = hash('sha512', USER_PASSWORD_SALT . $password);
  }
  return $hash;
}

Gracias.

    
pregunta Jonathan Roy 02.04.2015 - 18:35
fuente

2 respuestas

15

Sí, hay fallas obvias. Aquí hay algunos:

  • No puede hacer que el hash sea lento introduciendo retrasos simples. Un atacante no tiene que evaluar el hash de la misma manera que tú lo hiciste; solo necesitan obtener la misma respuesta al final. Eso significa que todo lo que hace que el hash sea lento debe ser un componente necesario del hash; debe ser imposible calcular el hash sin hacer eso. De hecho, el sleep(1) es el tipo de cosa que debe evitar , ya que hace que el hashing legítimo sea más lento que el hashing de un atacante (el objetivo del diseño de hash es minimizar la ventaja de un atacante ).
  • El número de iteraciones es la longitud de la contraseña. Esto no es suficiente. Quieres al menos decenas de miles de iteraciones.
  • La sal parece ser global. Eso no es una sal; una sal tiene que ser diferente para cada usuario.
  • Este no es un algoritmo estándar. Eso significa que no es una buena idea confiar en él para su uso real. Hay tres algoritmos con una buena cantidad de análisis ( scrypt , bcrypt , PBKDF2). Estos han sido observados por criptógrafos reales y parecen seguros. Usa uno de ellos.
  • La forma correcta de hacer un hash de contraseña en PHP es con la función password_hash , que se encarga de todo por usted (implementar un algoritmo usted mismo es una mala idea para la seguridad, al igual que crear su propio algoritmo). li>
respondido por el cpast 02.04.2015 - 18:46
fuente
1

no. Parece que estás usando una constante global para la sal. desea que cambie por registro de usuario.

vea enlace

también, @coverosgene tiene razón: no tiene sentido desacelerar su propio método hash.

    
respondido por el bkr 02.04.2015 - 18:41
fuente

Lea otras preguntas en las etiquetas