¿Un hash Whirlpool simple con sal aleatoria es lo suficientemente seguro? [duplicar]

2

He estado trabajando en un sitio que requiere que los usuarios inicien sesión. Está escrito en PHP con MySQL, y las contraseñas se almacenan como hash de Whirlpool con un salt (código fuente más adelante).

Sin embargo, los sitios de seguridad o los otros desarrolladores han desaconsejado esto (en realidad, SHA-256, pero el punto sigue siendo) y han recomendado bcrypt o PBKDF2. No estoy seguro de las ventajas de usar uno de estos o por qué el actual es incorrecto. ¿A alguien le importa explicar su razonamiento?

Aquí está mi código para registrarme:

$escusrnm = $con->real_escape_string($_POST["usrnm"]);
$newSalt = substr(str_shuffle(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ),0, 1) . substr(str_shuffle(aBcEeFgHiJkLmNoPqRstUvWxYz0123456789),0, 31);
$passHashed = hash("whirlpool", $_POST["pss"].$newSalt);
$con->query("INSERT INTO users (username, pass, hash) VALUES ('{$escusrnm}', '{$passHashed}', '{$newSalt}')");
$_SESSION["usernm"] = $_POST["usrnm"];

Aquí está mi código de inicio de sesión:

$escusrnm = $con->real_escape_string($_POST["usrnm"]);
$getdats = $con->query("SELECT * FROM users WHERE username='{$escusrnm}'");
if (mysqli_num_rows($getdats) > 0) {
    $getdats = $getdats->fetch_assoc();
    if(hash("whirlpool", $_POST["pss"].($getdats["hash"])) == $getdats["pass"]) {
        $_SESSION["usernm"] = $getdats["username"];
    } else {
        $errormsg = "There was an error. Check your information again, or register.";
    }
} else {
    $errormsg = "There was an error. Check your information again, or register.";
}
    
pregunta cjfaure 25.01.2014 - 06:02
fuente

1 respuesta

2
  

No estoy seguro de las ventajas de usar uno de estos o por qué el actual es incorrecto. ¿A alguien le importa explicar su razonamiento?

Bcrypt PUEDE SER más fuerte que el remolino, depende de su ajuste de fuerza . Esta es una de las ventajas más importantes de bcrypt, ya que puede aumentar la resistencia a medida que las computadoras se vuelven más potentes, además de que es extremadamente difícil de descifrar usando una GPU en comparación con los simples hash SHA / Whirlpool.

Desde PHP 5.5, hemos tenido bcrypt como funciones fáciles de usar. Para crear un hash, usaría password_hash($pass) , no necesita preocuparse por las sales porque una se genera automáticamente y se coloca dentro del hash , por lo que necesita usar password_verify($pass, $hash) para marque un hash, ya que generar un hash utilizará un sal diferente cada vez (y su configuración de fuerza podría cambiar).

Casi no hay razón para no usar esto para una nueva aplicación, ya que se ha demostrado que es mucho más seguro que los algoritmos de hash estándar. Si tiene una versión de PHP anterior a 5.5, hay una variedad de bibliotecas disponibles para ayudarlo con esto, generalmente password_compat de ircmaxell .

    
respondido por el Someguy123 25.01.2014 - 07:52
fuente

Lea otras preguntas en las etiquetas