Может ли быть хорошей идеей «заново хешировать» пароль после каждого входа в систему и сохранять новый хеш в базе данных? Есть ли для этого плюсы и минусы с точки зрения современных стандартов безопасности?
Вот минимальный пример кода на PHP:
function login(string $username, string $password): bool {
// function arguments coming from $_POST
$user = User::findByUsername($username);
if($user) {
if(password_verify($password, $user->password)) {
// re-hash password ...
$user->password = password_hash($password, PASSWORD_DEFAULT);
// ... and save it in database
$user->save();
return true;
}
}
return false;
}
Перефразировка пароля после каждого успешного входа не повышает безопасность.
Если функция password_hash()
будет использовать фиксированную глобальную соль, хеш будет выглядеть точно так же для того же пароля. Так что злоумышленник даже не заметит никакой разницы в базе данных.
Хотя функция password_hash()
будут генерируйте достаточно длинную уникальную соль при правильном использовании, и несколько хэшей одного и того же пароля с разными солями не облегчат грубое форсирование.
Таким образом, хотя перефразировка не ослабляет безопасность, она также никоим образом не помогает, но лучше использовать время для увеличения коэффициента затрат.
Нет необходимости перефразировать пароль вашего пользователя при каждом входе в систему. Это не улучшит вашу безопасность.