hash — А как насчет password_hash () в переполнении стека

Я читал всевозможные форумы и учебники об этом password_hash() это кажется хорошим для защиты паролем.

Но теперь я хочу знать, лучше ли сделать собственную соль и хеш для такой функции, как

$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
password_hash($password, PASSWORD_BCRYPT, $options);

Или просто позвольте функции сделать это:

password_hash($password, PASSWORD_DEFAULT);

Похоже, много спорят о том, хорошо это или плохо использовать собственную соль.

Может кто-нибудь объяснить, почему плохо (или нет) использовать собственную соль?

4

Решение

Потому что, если вы не создадите свою собственную соль, она автоматически создаст безопасную соль для вас.

Из документации:

предосторожность

Настоятельно рекомендуется не создавать свою собственную соль для
эта функция. Это создаст безопасную соль автоматически для вас, если
Вы не указываете один.

Итак, для ответа на ваш вопрос, если вы не знаете больше о соли или о другом … Просто не используйте свою собственную соль, эта функция достаточно сильна!

3

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

Соли — просто защита от атаки радуги.
Это не сделает один хеш более сложным для взлома, но вместо этого будет больше целое.
Если вы используете разные соли для каждого хэша, злоумышленнику нужно будет создать радужную таблицу для каждого пароля.
Что непрактично в смысле работы и времени.
Генерация соли с помощью псевдослучайного rng ​​сделает работу по защите большего количества ваших паролей.
https://crypto.stackexchange.com/questions/1776/can-you-help-me-understand-what-a-cryptographic-salt-is

Поскольку функция уже генерирует безопасную соль, не рекомендуется создавать свою собственную с рнг, который практически хуже.
Просто позвольте функции генерировать сильную соль, и она будет в порядке и будет стоить меньше работы, так как вам не нужно создавать соли самостоятельно.

Правильный способ создания соленого хеш-пароля

Цитата из предыдущей ссылки:

Рекомендуется не передавать свою собственную соль, вместо этого позвольте функции создать криптографически безопасную соль из случайного источника операционной системы.

Соль будет включена в результирующее хеш-значение, поэтому вам не нужно хранить ее отдельно. Просто создайте 60-символьное строковое поле в вашей базе данных и сохраните хеш-значение. Функция password_verify () извлечет использованную соль из сохраненного хеш-значения. Для получения дополнительной информации вы можете взглянуть на мой учебник о хранении паролей.

1

По вопросам рекламы [email protected]