¿Es esta una forma segura de almacenar contraseñas? [duplicar]

3

Hace un par de años, cuando estaba aprendiendo el desarrollo web básico de back-end, encontré un tutorial para crear un registro básico en el sistema. No he modificado mucho el código desde entonces, pero ahora tengo la oportunidad de usar un sistema más robusto si es necesario.

Así que aquí está el código que estoy usando actualmente:

$pepper    =    "String of 24 random characters";
$salt       =   dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
$loopcount  =   97674;

for($i = 0; $i < $loopcount; $i++){
    $value  =   hash("sha256", $value . $salt . $pepper);
}

return $value;

Básicamente, un pimiento estático de 24 caracteres, una sal y la contraseña se recortan más de 90,000 veces. Probablemente también vale la pena mencionar que la sal se almacena en la base de datos.

Mi mayor pregunta es si hash que muchas veces realmente hace algo. También quiero saber si la sal y la pimienta son lo suficientemente fuertes.

    
pregunta Meredith 02.07.2014 - 13:07
fuente

3 respuestas

11

en realidad, hashing it MUCHAS veces es malo. Aquí hay una cita de enlace para demostrarlo.

  

"Para abreviar una larga historia, el hash de un hash N veces no hace que sus contraseñas sean más seguras y puede hacer que sea menos seguro, ya que un pirata informático puede revertir el proceso fácilmente generando colisiones de hash".

lea la explicación completa en enlace

    
respondido por el H3lp3ingth3p33ps 02.07.2014 - 13:25
fuente
3

Recomendaría no usar sha256 para las contraseñas de hash. La suite sha2 está diseñada para ser rápida, exactamente lo que no quieres. En resumen, use bcrypt: enlace

En un KDF adecuado, las iteraciones se incluyen de manera similar para ralentizar el proceso de hashing de contraseñas (para responder a su pregunta de si el hashing 90000 veces hace algo), todo esto se defiende principalmente contra el forzamiento de brutos en línea.

Más aquí: enlace

    
respondido por el AlexH 02.07.2014 - 13:26
fuente
1

El beneficio de seguridad del hashing más de 90,000 veces es básicamente mínimo. De hecho, es menos seguro, ya que cualquier posible pirata informático puede resolverlo al buscar colisiones. También puede utilizar un hashrate más alto (es decir, sha512) y, por lo tanto, tener un hash más largo en lugar de simplemente realizar un bucle y anexar los resultados anteriores. Todo lo que realmente hace es aumentar la carga del servidor, por lo que probablemente querrá mejorar este código como pueda. Aunque la sal y la pimienta están bien.

Además, si utilizas un método hash diferente, asegúrate de aumentar la longitud del campo en el que lo estás poniendo.

    
respondido por el Apple_Master 02.07.2014 - 13:23
fuente

Lea otras preguntas en las etiquetas