Составные части хеш-строки bcrypt
26 ноября 2015
Хороший способ хранения данных для аутентификации — хеш-строки bcrypt. В PHP это реализуется при помощи crypt с алгоритмом blowfish. В более поздних версиях PHP — при помощи password_hash. В Yii для этого есть Security::generatePaswordHash(). Выглядит строка на выходе вот так:
$2y$13$YUUgrko03UmNU/fe6gNcO.Hka4lrdRlkq0iJ5d4bv4fK.sKS.6jXu
Длина в случае пароля всегда 60 символов.
- 2y - версия алгоритма bcrypt. Мы используем blowfish, так что в новых версиях PHP должна быть всегда
2y
. - 13 - cost. Стоимость вычислений. 2^13 итераций функции формирования ключа.
- Оставшееся — конкатенированные соль и хеш, закодированные через base64 с немного нестандартным набором символов. Первые 22 символа — 16 байт соли. Оставшееся — хеш.
При сравнении пароля bcrypt достаёт версию алгоритма, cost и соль из хеш-строки сохранённого пароля. Далее, используя их, вычисляет хеш нового пароля и сравнивает с сохранённым хешем.
Комментарии RSS по email OK
Судя по нашим вычисления, это довольно ресурсоёмкая операция, поэтому авторизация и регистрация занимает приличное время
Так и должно быть.
Все верно, чтобы брутить было дорогостоящей операцией даже если будет утечка паролей.
Брутить будет дорого владельцу сайта, ведь на таких простых и тяжёлых операция очень легко повесить сервак
Чтобы не брутили, можно воспользоваться сервисом типа cloudflare или поставить систему мониторинга на сервак с ограничением количества запросов по параметрам. А если захотят заDDoSить, то найдут способ заDDoSить и другими способами.