Насколько безопасен этот метод хеширования и сопоставления паролей?

Я взял информацию из ряда постов и некоторые предварительные знания, чтобы реализовать следующий алгоритм хеширования. Однако много говорится о том, какие реализации безопасны и не безопасны. Как мой метод соответствует? Это безопасно?

public static function sha512($token,$cost = 50000,$salt = null) {
$salt = ($salt == null) ? (generateToken(32)) : ($salt);
$salt = '$6$rounds=' . $cost . '$' . $salt . ' $';
return crypt($token, $salt);
}

public static function sha512Equals($token,$hash) {
return (crypt($token,$hash) == $hash);
}


public static function generateToken($length,$characterPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
$token = '';
$max = mb_strlen($characterPool);

for ($i = 0;$i < $length;$i++){
$token .= $characterPool[cryptorand(0,$max)];
}

return $token;
}

public static function cryptorand($min, $max) {
$range = $max - $min;

if ($range < 0)
return $min;

$log = log($range, 2);
$bytes = (int) ($log / 8) + 1; // length in bytes
$bits = (int) $log + 1; // length in bits
$filter = (int) (1 << $bits) - 1; // set all lower bits to 1

do {
$rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
$rnd = $rnd & $filter; // discard irrelevant bits
} while ($rnd >= $range);

return $min + $rnd;
}

Так безопасен ли этот метод? Есть ли в PHP более безопасные методы для хеширования токенов и последующего сопоставления с токенами? Любая критика очень ценится.

1

Решение

Нет, потому что ты доверяешь crypt и вы не используете постоянную времени сравнения в sha512Equals,

Также могут быть проблемы с платформой: openssl_random_pseudo_bytes не должен быть криптографически безопасным. Я не уверен, откуда ты это знаешь crypt также использует SHA-512.

Ваши расчеты в cryptorand слегка отключены (например, для значений $log это точно на границе байта), но, к счастью, это контролируется циклом do / while.


Пожалуйста, используйте password_hash или же password_verify функциональность вместо

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru