Pack Camo

Генератор хеша bcrypt и Argon2

Хешируйте пароль через bcrypt или Argon2id или проверьте его по сохранённому хешу.

Всё выполняется локально — ничего не отправляется на сервер.

28 байт

Здесь появится закодированный хеш.

Хешируйте пароль через bcrypt или Argon2 или сверьте его с сохранённым хешем

Этот генератор хешей паролей создаёт хеши bcrypt (<code>$2b$</code>, cost от 4 до 15) и хеши Argon2id, Argon2i и Argon2d в стандартном формате строки PHC, с вашими значениями памяти, итераций, параллелизма, длины соли и результата. Переключитесь на <strong>Проверку</strong>, чтобы вставить хеш из базы данных, определить алгоритм и параметры по префиксу и проверить, совпадает ли пароль. Каждый хеш получает новую случайную соль и показывает, сколько времени он занял на вашем устройстве. Хеширование выполняется в WebAssembly в браузере; пароль никуда не отправляется.

Как создать хеш bcrypt или Argon2

  1. 1Выберите Хеш, затем алгоритм: Argon2id для новых систем, bcrypt для совместимости с существующей.
  2. 2Задайте cost: коэффициент cost для bcrypt или пресет Argon2, например OWASP 19 MiB, t=2. При необходимости повторить конфигурацию настройте память, итерации и параллелизм вручную.
  3. 3Введите пароль и нажмите Хешировать пароль. Ниже появятся закодированный хеш, его части и затраченное время.
  4. 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 внутри вашего браузера. Ничто из введённого не покидает страницу.