<rmcreative>

RSS

Составные части хеш-строки 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

  1. №10072
    Влад
    Влад 28 нояб. 2015 г., 18:49:18

    Судя по нашим вычисления, это довольно ресурсоёмкая операция, поэтому авторизация и регистрация занимает приличное время

  2. №10073
    Sam
    Sam 29 нояб. 2015 г., 11:49:24

    Так и должно быть.

  3. №10074
    BetterWeb Solutions
    BetterWeb Solutions 30 нояб. 2015 г., 20:44:10

    Все верно, чтобы брутить было дорогостоящей операцией даже если будет утечка паролей.

  4. №10083
    Алекс
    Алекс 03 дек. 2015 г., 0:52:24

    Брутить будет дорого владельцу сайта, ведь на таких простых и тяжёлых операция очень легко повесить сервак

  5. №12093
    Dev
    Dev 18 февр. 2021 г., 19:01:55

    Чтобы не брутили, можно воспользоваться сервисом типа cloudflare или поставить систему мониторинга на сервак с ограничением количества запросов по параметрам. А если захотят заDDoSить, то найдут способ заDDoSить и другими способами.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.