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-бітова сіль у власному алфавіті Base64 для bcrypt (./A-Za-z0-9).
  • Останні 31 символ – 184-бітовий результат.

Оскільки сіль випадкова й зберігається всередині хешу, хешування того самого пароля двічі дає два різні хеші, і обидва успішно проходять перевірку. Саме тому пароль перевіряють спеціальною функцією перевірки, а не порівнянням хешів.

Вибір вартості

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

Для нових систем OWASP тепер віддає перевагу Argon2id, а bcrypt залишається прийнятним, коли Argon2id недоступний.

Обмеження в 72 байти

bcrypt використовує лише перші 72 байти пароля; усе, що далі, мовчки ігнорується. Байти – це не символи: літера з діакритикою займає 2 байти в UTF-8, а емодзі – 4. Українські літери в UTF-8 також займають по 2 байти, тож пароль із кирилиці вичерпає ліміт уже після 36 літер. Два довгі паролі зі спільними першими 72 байтами дають однаковий хеш. Лічильник байтів попереджає, якщо пароль задовгий. Деякі системи попередньо хешують довгі паролі (наприклад, за допомогою HMAC-SHA256, а потім Base64) перед bcrypt; якщо ви так робите, ніколи не передавайте «сирі» двійкові дайджести, бо нульовий байт у багатьох реалізаціях передчасно завершить пароль.

Поширені запитання

Чому той самий пароль щоразу дає інший хеш?

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

Чи можна розшифрувати хеш bcrypt?

Ні. bcrypt – одностороння функція. Єдиний спосіб відновити пароль – вгадувати його й хешувати кожну спробу, а саме це фактор вартості робить повільним.

Який фактор вартості використовувати?

Щонайменше 10, а більше – якщо ваш сервер лишається достатньо швидким. Вимірюйте на реальному обладнанні: час, який показано тут, відображає роботу JavaScript у вашому браузері, що зазвичай повільніше за сервер.

Чи взаємозамінні хеші $2a$, $2b$ і $2y$?

Для паролів до 256 байтів вони дають однаковий результат, і цей інструмент перевіряє всі три. $2b$ виправив помилку переповнення довжини в реалізації OpenBSD, а $2y$ – назва в PHP для коректної реалізації.

Чи безпечно вводити тут справжній пароль?

Усе виконується локально, нічого не надсилається й не зберігається. Для реальних облікових записів усе одно краще перевіряти на тестовому паролі, а не на тому, яким ви користуєтеся.