Хешуйте пароль через bcrypt або Argon2 чи звірте його зі збереженим хешем
Цей генератор хешів паролів створює хеші bcrypt (<code>$2b$</code>, cost від 4 до 15) та хеші Argon2id, Argon2i й Argon2d у стандартному форматі рядка PHC, з вашими значеннями пам’яті, ітерацій, паралелізму, довжини солі й результату. Перейдіть до <strong>Перевірки</strong>, щоб вставити хеш із бази даних, визначити алгоритм і параметри за префіксом та перевірити, чи збігається пароль. Кожен хеш отримує нову випадкову сіль і показує, скільки часу він зайняв на вашому пристрої. Хешування виконується у WebAssembly в браузері; пароль нікуди не надсилається.
Як створити хеш bcrypt або Argon2
- 1Виберіть Хеш, потім алгоритм: Argon2id для нових систем, bcrypt для сумісності з наявною.
- 2Задайте cost: коефіцієнт cost для bcrypt або пресет Argon2, наприклад OWASP 19 MiB, t=2. Якщо треба відтворити конфігурацію, налаштуйте пам’ять, ітерації й паралелізм вручну.
- 3Введіть пароль і натисніть Хешувати пароль. Нижче з’являться закодований хеш, його частини та витрачений час.
- 4Щоб перевірити хеш, виберіть Перевірку, вставте збережений хеш і пароль та натисніть Перевірити.
Чому паролям потрібен повільний хеш
Швидкий хеш на кшталт SHA-256 не підходить для паролів. Одна відеокарта обчислює мільярди хешів SHA-256 за секунду, тож витеклу таблицю SHA-256-хешів паролів можна перебирати з такою швидкістю. Функції хешування паролів навмисно повільні, а Argon2 до того ж потребує багато пам’яті, щоб кожна спроба коштувала реального часу й заліза. Налаштування, що займає чверть секунди на вашому сервері, коштує зловмисникові ту саму чверть секунди на кожну спробу для кожного користувача.
Кожен хеш також містить власну випадкову сіль, тож у двох користувачів з однаковим паролем хеші різні, а заздалегідь обчислені таблиці марні. Сіль і всі параметри зберігаються всередині рядка хешу, тому бібліотека може перевірити пароль лише за хешем.
Як читати хеш bcrypt
Хеш bcrypt, наприклад $2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW, складається з чотирьох частин: версія 2b, cost 12 (212 = 4096 раундів розширення ключа), сіль із 22 символів і хеш із 31 символу, обидва у власному алфавіті Base64 bcrypt. Кожне збільшення cost на одиницю подвоює час.
$2a$, $2b$ і $2y$ дають однаковий результат для паролів до 72 байтів; літери позначають виправлення помилок старих реалізацій. bcrypt читає лише перші 72 байти пароля й ігнорує решту, про що попереджає цей інструмент: довга парольна фраза або пароль кирилицею чи іншим нелатинським письмом, де символ займає від двох до чотирьох байтів, може досягти цієї межі раніше, ніж ви очікуєте.
Argon2id, Argon2i і Argon2d
Рядок PHC містить усе потрібне для перевірки: $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash> означає версію 1.3, 19 456 КіБ пам’яті, 2 проходи й 1 лінію, а далі сіль і хеш у Base64 без доповнення.
- Argon2id
- Гібрид двох варіантів нижче; саме його RFC 9106 і OWASP рекомендують для зберігання паролів. Використовуйте його, якщо ніщо не змушує інакше.
- Argon2i
- Доступ до пам’яті не залежить від пароля, що захищає від атак сторонніми каналами, але за малої кількості проходів він слабший проти зламу на GPU.
- Argon2d
- Доступ до пам’яті залежить від пароля: найстійкіший до GPU, але вразливий до сторонніх каналів. Підходить для proof-of-work, а не для серверів, що перевіряють вхід.
Рекомендовані налаштування
- Argon2id: OWASP рекомендує 19 MiB пам’яті, 2 ітерації та паралелізм 1 або рівноцінний компроміс, наприклад 47 MiB з 1 ітерацією чи 12 MiB з 3. RFC 9106 пропонує 64 MiB, 3 ітерації й 4 лінії, якщо дозволяє пам’ять.
- bcrypt: cost не менше 10; сьогодні 12 — поширене значення за замовчуванням. Обирайте найвищий cost, який витримає ваш ендпоінт входу: близько 250 мс на хеш на сервері — розумна мета.
- Сіль: 16 випадкових байтів. Довжина хешу: 32 байтів більш ніж достатньо.
- Час тут вимірюється на вашому пристрої у WebAssembly, який зазвичай повільніший за нативну бібліотеку на сервері. Перш ніж обрати cost, проведіть заміри на продакшн-обладнанні.
Коли знадобиться цей інструмент
Використовуйте його, щоб створити хеш для seed-користувача чи файлу конфігурації, перевірити, що хеш у базі даних справді відповідає паролю, який ви припускаєте, або з’ясувати, з якими параметрами створено наявний хеш. Ваш застосунок має хешувати паролі власною бібліотекою під час реєстрації й ніколи не надсилати паролі у відкритому вигляді на сайт для хешування. Щоб спершу придумати надійний пароль, скористайтеся генератором паролів; для підписів із ключем замість зберігання паролів дивіться генератор HMAC.
Поширені запитання
- Що обрати: bcrypt чи Argon2?
- Argon2id для нових систем: він переміг у Password Hashing Competition і є memory-hard, що робить злам на GPU та ASIC набагато дорожчим. bcrypt досі прийнятний і дуже широко підтримується, тож залиште його, якщо ваш стек уже його використовує.
- Чому хеш щоразу інший для того самого пароля?
- Кожен хеш використовує нову випадкову сіль, тому результат щоразу змінюється. Так і задумано. Щоб перевірити пароль, звіряйте його зі збереженим хешем, а не порівнюйте два щойно створені хеші.
- Чи можна розшифрувати хеш bcrypt або Argon2?
- Ні. Це односторонні функції. Єдиний спосіб знайти пароль — перебирати кандидатів і хешувати кожного, а ці алгоритми навмисно роблять це повільним.
- Що за обмеження у 72 байти в bcrypt?
- bcrypt використовує лише перші 72 байти пароля. Усе, що далі, не впливає на хеш, тож два довгі паролі з однаковими першими 72 байтами дають збіжні хеші. В Argon2 такого обмеження немає.
- Який коефіцієнт cost обрати для bcrypt?
- Не менше 10, а 12 — поширене значення за замовчуванням. Кожне збільшення подвоює роботу. Оберіть найвище значення, за якого вхід на вашому сервері лишається достатньо швидким.
- Чи сумісні хеші bcrypt $2a$, $2b$ і $2y$?
- Так, для паролів до 72 байтів вони дають однаковий хеш. Більшість бібліотек приймають усі три префікси, і цей інструмент перевіряє будь-який із них.
- Чому перевірка триває стільки ж, скільки хешування?
- Перевірка — це повторне хешування пароля із сіллю й параметрами з хешу та порівняння результатів, тож вона потребує рівно тієї самої роботи. Саме це робить перебір дорогим.
- Чи надсилається пароль на сервер?
- Ні. bcrypt і Argon2 працюють у WebAssembly у вашому браузері. Ніщо з введеного не залишає сторінку.