Utilia

Bcrypt генератор и проверка на хеш

Генерирайте bcrypt хеш с фактор на цената от 4 до 14, проверете парола спрямо наличен хеш и вижте версията, цената, солта и хеша му.

Хеширане на парола

Проверка на парола спрямо хеш

Как да хеширате парола с bcrypt

  1. Под Хеширане на парола въведете Парола. Брояч показва дължината ѝ в байтове UTF-8 и ви предупреждава, когато надхвърли 72 байта.
  2. Изберете Фактор на цената (4–14). Редът отдолу показва броя рундове, например 10 → 2^10 = 1 024 рунда.
  3. Щракнете Генерирай хеш. Лента за напредък следи работата, а страницата остава използваема, докато тя тече. Когато приключи, инструментът показва отнетото време и Bcrypt хеш, готов за копиране.
  4. Хешът се разделя на частите си: Версия, Цена, Сол (22 символа) и Хеш (31 символа).

За да проверите парола спрямо хеш, въведете паролата, поставете хеша (току-що генерираният се попълва автоматично) и щракнете Провери паролата. Резултатът казва дали съвпадат. Отметнете Скрий паролите, за да се маскират и двете полета за парола.

Хеширането се изпълнява във вашия браузър с библиотеката bcryptjs, която се зарежда само когато ви потрябва за първи път. Нито паролата, нито хешът се изпращат някъде.

Как работи bcrypt

bcrypt (Провос и Мазиер, 1999) е функция за хеширане на пароли, изградена върху шифъра Blowfish. За разлика от SHA-256 тя е нарочно бавна и бавността ѝ е регулируема: факторът на цената е степен на двойката, така че всяка стъпка +1 удвоява работата. Цена 10 означава 1 024 итерации на скъпата настройка на ключа, а цена 12 – 4 096. Тази бавност почти не личи при вход на потребител, но прави прекия подбор върху откраднала база данни много по-скъп.

Хеш като $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy се чете така:

  • $2b$ – версията. $2a$ и $2y$ (PHP) са съвместими и могат да се проверяват тук, а $2x$ отбелязва хешове от стара реализация с грешка и се отхвърля.
  • 10 – факторът на цената.
  • Следващите 22 символа – случайна 128-битова сол в собствената азбука на bcrypt за Base64 (./A-Za-z0-9).
  • Последните 31 символа – 184-битовият резултат.

Тъй като солта е случайна и се пази в хеша, хеширането на една и съща парола два пъти дава два различни хеша и двата се проверяват правилно. Затова паролата се проверява с функция за проверка, а не със сравняване на хешове.

Избор на цена

Изберете най-високата цена, която сървърът ви може да си позволи, без да забавя входа, обикновено около четвърт секунда на хеш. OWASP препоръчва минимална цена 10 за bcrypt. Браузърите изпълняват bcrypt на JavaScript, който е няколко пъти по-бавен от вградена сървърна реализация: от цена 12 нагоре инструментът предупреждава, че хеширането може да отнеме от една до няколко секунди, а всяка следваща стъпка удвоява времето. Работата е разделена на кратки части, затова страницата не замръзва.

За нови системи OWASP вече предпочита Argon2id, а bcrypt остава приемлив там, където Argon2id не е наличен.

Ограничението от 72 байта

bcrypt използва само първите 72 байта от паролата, а всичко след тях се пренебрегва мълчаливо. Байтовете не са символи: буква с диакритичен знак заема 2 байта в UTF-8, а емоджи – 4. Кирилските букви също са по 2 байта, така че при кирилица лимитът се стига още при 36 букви. Две дълги пароли със същите първи 72 байта дават един и същ хеш. Броячът на байтове ви предупреждава, когато паролата е прекалено дълга. Някои системи хешират предварително дългите пароли (например с HMAC-SHA256 и после Base64) преди bcrypt; ако правите така, никога не подавайте сурови двоични резултати, защото нулев байт би прекъснал паролата преждевременно в много реализации.

Често задавани въпроси

Защо една и съща парола дава различен хеш всеки път?

Всеки хеш получава нова случайна сол, която се пази в самия хеш. Бутонът Провери паролата чете солта и цената от хеша и го изчислява наново, така че всяка версия се проверява.

Може ли bcrypt хеш да се дешифрира?

Не. bcrypt е еднопосочна функция. Единственият начин да се възстанови парола е да се налучква и да се хешира всеки опит, което факторът на цената прави бавно.

Каква цена да използвам?

Поне 10, и повече, ако сървърът ви остава достатъчно бърз. Измерете на реалния си хардуер: показаното тук време отразява JavaScript във вашия браузър, който обикновено е по-бавен от сървър.

Взаимозаменяеми ли са хешовете $2a$, $2b$ и $2y$?

За пароли под 256 байта дават един и същ резултат, а този инструмент проверява и трите. $2b$ поправя грешка при препълване на дължината в реализацията на OpenBSD, а $2y$ е името в PHP на коректна реализация.

Безопасно ли е да въвеждам тук истинска парола?

Всичко се изпълнява локално и нищо не се изпраща или съхранява. За реални акаунти все пак е добра практика да тествате с примерна парола, а не с такава, която използвате.