Un semplice hash Whirlpool con sale casuale è abbastanza sicuro? [duplicare]

2

Ho lavorato su un sito che richiede l'accesso da parte degli utenti. È scritto in PHP con MySQL e le password sono memorizzate come hash Whirlpool con un salt (codice sorgente più tardi).

Tuttavia, i siti di sicurezza o altri sviluppatori lo hanno sconsigliato (in realtà, SHA-256, ma il punto rimane) e hanno consigliato bcrypt o PBKDF2. Non sono sicuro dei vantaggi dell'utilizzo di uno di questi o del perché quello corrente è sbagliato. Qualcuno ha in mente di spiegare il loro ragionamento?

Ecco il mio codice da registrare:

$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"];

Ecco il mio codice di accesso:

$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.";
}
    
posta cjfaure 25.01.2014 - 06:02
fonte

1 risposta

2

I'm not sure of the advantages of using one of these or why the current one is wrong. Does anybody mind explaining their reasoning?

Bcrypt PU BE ESSERE più strong di whirlpool, dipende dalla tua impostazione di forza . Questo è uno dei vantaggi più importanti di bcrypt, che puoi aumentare la forza man mano che i computer diventano più potenti, inoltre è estremamente difficile da decifrare utilizzando una GPU rispetto ai semplici hash SHA / Whirlpool.

Da PHP 5.5, abbiamo bcrypt disponibile come funzioni facili da usare. Per creare un hash devi utilizzare password_hash($pass) , non devi preoccuparti dei sali perché uno è generato automaticamente e inserito all'interno dell'hash , per questo devi usare password_verify($pass, $hash) per controlla un hash, poiché la generazione di un hash utilizzerà un sale diverso ogni volta (e le tue impostazioni di forza potrebbero cambiare).

Non vi è quasi alcun motivo per non usarlo per una nuova applicazione, poiché si è dimostrato molto più sicuro rispetto agli algoritmi di hashing standard. Se hai una versione di PHP precedente alla 5.5 ci sono una varietà di librerie disponibili per aiutarti con questo, più comunemente password_compc di ircmaxell .

    
risposta data 25.01.2014 - 07:52
fonte

Leggi altre domande sui tag