Складові частини хеш-рядки bcrypt
Хороший спосіб зберігання даних для аутентифікації - хеш-рядки 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 і сіль з хеш-рядки збереженого пароля. Далі, використовуючи їх, обчислює хеш нового пароля і порівнює з збереженим хешем.
Так і має бути.
Все вірно, щоб Брут було дорогою операцією навіть якщо буде витік паролів.
Брут буде дорого власнику сайту, адже на таких простих і важких операція дуже легко повісити сервак