Требует ли Bcrypt что-нибудь для обеспечения безопасности?

Я уже давно изучаю методы шифрования, и на данный момент я обнаружил, что Bcrypt — один из лучших способов сделать это прямо сейчас. Что я пока не понимаю, так это то, как Bcrypt работает точно. Я понимаю, что это занимает больше времени, поэтому брутфорс так трудно.

Но я не понимаю, нужны ли для этого другие меры, такие как случайная соль, чтобы обеспечить ее безопасность. Особенно после прочтения о md5 и о том, что наличие случайной соли почти обязательно, прежде чем хеш станет безопасным.

Вот пример кода, который я нашел на php.com:

$options = [  'cost' => 12, ];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>

Я предполагаю, что стоимость просто делает так, что она проходит через функцию 12 раз, чтобы зашифровать слово «rasmuslerdorf». И «PASSWORD_BCRYPT» выбирает алгоритм Blowfish.

Есть ли большие различия между PASSWORD_DEFAULT и PASSWORD_BCRYPT?
Достаточно ли мне использовать функцию по умолчанию для шифрования пароля при регистрации. И чем сравнить пароль после его шифрования, что пользователь вводит при входе в систему с зашифрованным паролем в базе данных?

2

Решение

Я предполагаю, что стоимость просто делает так, что она проходит через функцию 12 раз, чтобы зашифровать слово «rasmuslerdorf»

Нет, параметр стоимости влияет на экспоненциальный объем работы.

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

password_hash() функция автоматически генерирует случайную соль при каждом ее запуске; альтернативно, пользовательская соль может быть передана через опции:

password_hash('bla', PASSWORD_BCRYPT, ['salt' => ...]);

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

Есть ли большие различия между PASSWORD_DEFAULT и PASSWORD_BCRYPT?

PASSWORD_DEFAULT Алгоритм предназначен для защиты вашего кода в будущем, всегда используя самый сильный алгоритм, доступный в то время (при условии, что вы обновите PHP). Заметная разница заключается в требованиях к хранению; в то время как Bcrypt всегда использует 60 символов, вам необходимо обеспечить больший объем памяти (например, 255 символов) для всего, что будет использоваться в будущем.

И чем сравнить пароль после его шифрования, что пользователь вводит при входе в систему с зашифрованным паролем в базе данных?

Пожалуйста, посмотрите на password_verify() примеры того, как проверить пароль, введенный пользователем.

5

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

Алгоритм Bcrypt является алгоритмом по умолчанию. Так, PASSWORD_DEFAULT а также PASSWORD_BCRYPT подобные. Алгоритм по умолчанию может быть настроен в вашем php.ini файл, но если вы не знали об этом, то, скорее всего, по-прежнему по умолчанию.

cost число не сколько раз оно хешируется. Сколько раз он хэшируется, рассчитывается по формуле: 2^cost, Итак, если стоимость равна 12, то она будет хеширована 2^12 раз (4096).

Вам не нужно думать о солях при использовании функции. Он сам создает соль и добавляет ее к выходному хешу:

$[algorithm]$[cost]$[salt 22 chars][rest is the hash]

Вы никогда не должны касаться хеша, когда используете функции хеширования пароля. Для проверки пароля против пользователя вы должны использовать password_verify(),

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

2

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