У меня есть вопрос, касающийся предложения по двум основным ответам на этот вопрос .
В последней части ответов они говорят, что лучше зашифровать парольхэш, чем использование жестко закодированного перца для удобства обслуживания (в случае утечки хешей вы можете повернуть ключи).
Это псевдокод того, что они говорят?
$key = 'random_key_stored_elsewhere';
$hash = bcrypt($password);
$encrypted = encrypt($hash, $key);
// store $encrypted to DB
Сейчасчтобы проверить попытку входа:
if (bcrypt($user_input) == decrypt($encrypted, $key))
{
// proceed login...
}
Скажем, утечка хеша, теперь нам нужно изменить ключ и повторно зашифровать хэши:
$decrypted_data = decrypt($encrypted, $key)
$new_key = 'new_random_key_stored_elsewhere';
$encrypted = encrypt($decrypted_data, $new_key);
// store $encrypted to DB
Это так?Если да, то как вращение ключей в случае утечки хеша может сделать недействительными взломанные пароли, если такая же процедура используется для проверки попыток входа в систему?Например,
if (bcrypt($user_input) == decrypt($encrypted, $new_key))
{
// proceed login...
}
Вращение клавиш было бы бесполезным, или я что-то упустил?