Що таке bcrypt?
Bcrypt — це функція хешування паролів, розроблена Нільсом Провосом і Девідом Мазьєром на основі шифру Blowfish. На відміну від швидких дайджестів, таких як MD5 або SHA-256, bcrypt навмисно повільний і вимогливий до обчислювальних ресурсів — це робить атаки грубою силою на викрадені хеші паролів непрактичними. Bcrypt автоматично генерує випадкову сіль для кожного пароля, тому однакові паролі дають різні хеші.
Як працює bcrypt?
Алгоритм bcrypt повністю виконується у вашому браузері. Ось що відбувається крок за кроком:
- Ваш пароль кодується як байти UTF-8 і подається в розклад ключів bcrypt, який ініціалізує 4184-байтовий масив P-array та S-бокси шифру Blowfish, використовуючи пароль і сіль.
- Генерується випадкова 128-бітна сіль. Сіль змішується в розклад ключів, тому кожна унікальна сіль дає зовсім інший хеш навіть для того самого пароля.
- Розклад ключів виконується протягом 2^cost раундів (наприклад, 2^10 = 1024 ітерації при вартості 10). Кожна ітерація повторно шифрує записи солі та P-масиву, що сповільнює обчислення зі збільшенням вартості.
- Кінцевий результат — рядок із 60 символів у форматі
$2b$<cost>$<salt><hash>, де вартість доповнена нулями (наприклад, 10), сіль — 22 символи Base64, а хеш — 31 символ Base64. - Для перевірки той самий алгоритм виконується знову з кандидатом пароля та сіллю, взятою зі збереженого хеша. Якщо отриманий хеш збігається зі збереженим, пароль правильний.
Який коефіцієнт вартості використовувати?
Коефіцієнт вартості — це логарифм кількості ітерацій: вартість 10 означає 2^10 = 1024 раунди, вартість 12 — 4096 раундів. Обирайте залежно від ваших потреб у безпеці та апаратного забезпечення:
- Вартість 4–6 (16–64 раунди) — лише для розробки та тестування. Занадто швидко для використання в продакшені; забезпечує мінімальний захист.
- Вартість 8 (256 раундів) — мінімум для некритичних застосунків. Близько 6 мс на сучасному обладнанні.
- Вартість 10 (1024 раунди) — поточний рекомендований базовий рівень. Займає близько 25 мс. Підходить для більшості вебзастосунків.
- Вартість 12 (4096 раундів) — рекомендовано для адмінпорталів, фінансових систем і застосунків із високими вимогами до безпеки. Займає близько 100 мс.
- Вартість 14 (16384 раунди) — високий рівень безпеки. Займає близько 400 мс. Використовуйте для головних паролів, ключів шифрування або коли затримка входу прийнятна.
Чому варто використовувати цей генератор bcrypt?
- Ваша конфіденційність захищена — кожен пароль хешується локально у вашому браузері, і жодні дані ніколи не залишають ваш пристрій.
- Ви отримуєте обидва режими поруч: створюйте нові хеші або перевіряйте наявні без переходу між сторінками.
- Коефіцієнт вартості регулюється від 4 (швидко) до 15 (дуже повільно), тож ви можете налаштувати його під потреби безпеки вашого застосунку.
- Хеші використовують стандартний формат
$2b$, який працює з усіма основними мовами та фреймворками.
Які типові застосування bcrypt?
Bcrypt широко використовується для зберігання та перевірки паролів у галузі:
- Автентифікація вебзастосунків — зберігання хешів паролів користувачів у базах даних, щоб паролі у відкритому вигляді ніколи не зберігалися.
- Хешування ключів API — хешування секретів API перед зберіганням, щоб витік бази даних не розкривав дійсні облікові дані.
- Аудит міграції — перевірка того, що хеші паролів зі старої системи все ще автентифікують користувачів після оновлення рівня автентифікації.
Як виглядає хеш bcrypt?
Хешування пароля hunter2 з коефіцієнтом вартості 10 дає рядок на кшталт $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. Формат розшифровується так: $2b$ (версія алгоритму), 10 (коефіцієнт вартості), $, потім 22 символи солі та 31 символ хеша, усі закодовані в Base64. Кожен запуск з одним і тим самим паролем дає різний хеш через випадкову сіль.
Цей генератор bcrypt повністю працює у вашому браузері за допомогою чистої JavaScript-реалізації. Хешуйте паролі перед зберіганням, перевіряйте наявні хеші та налаштовуйте коефіцієнт вартості відповідно до ваших вимог безпеки — і все це без надсилання жодного байта на сервер.