Bcrypt срещу Argon2: кой хеш на паролата през 2026 г

Bcrypt и Argon2 са двете хеш функции на думата най-използваните пароли днес. И двете са проектирани да бъдат бавни и устойчиви на Атаки с груба сила, за разлика от MD5 или SHA-256, които са бързи по конструкция. Аргон2а спечели състезанието за хеширане на пароли през 2015 г. и сега е препоръчаният от OWASP избор за нови приложения. Bcrypt остава отличен, зрял и широко поддържан избор. това Тази статия обяснява разликите точно, за да ви помогне да решите.

Защо хешът на паролата е различен

Класически криптографски хеш като SHA-256 е проектиран да бъде бърз: ние искаме да хеш GB данни за секунда. За пароли това свойство е по подразбиране: нападател който извлича вашата таблица с потребители, може да тества милиарди пароли в секунда на a GPU. Функцията за хеширане на парола (PHF), напротив, се стреми да бъди:

  • Бавно по конструкция, с регулируем разходен параметър
  • Солено, за предотвратяване на дъгови таблици и паралелни атаки на множество акаунти
  • Устойчив на специализиран хардуер (GPU, FPGA, ASIC) за ограничаване на конкурентното ускоряване

Параметърът сол и цена се съхраняват с хеша, обикновено в един низ във формата $algo$params$sel$hash. Това позволява разходите да се увеличават с времето без наложи незабавна миграция на стари хешове.

Bcrypt: 1999, Blowfish, параметър на разходите

Bcrypt е проектиран от Niels Provos и David Mazières за OpenBSD през 1999 г. Той е базиран на алгоритъма за криптиране Blowfish, който използва високата цена на инициализацията маси. Bcrypt излага един параметър, cost (или rounds), който дефинира брой итерации във формата 2^цена. Увеличаването на разходите с 1 удвоява времето за изчисление.

Типичен изходен формат:

$2y$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
 |  |  |                      |
 |  |  цена = 12 сол + хеш в base64
 |  вариант (2y = openbsd)
 algo bcrypt

Bcrypt ограничава въвеждането до 72 байта: по-дълга парола се съкращава тихо, което е известен капан. Обичайното решение е предварително хеширане с SHA-256 и след това base64 кодиране преди това bcrypt, но това може да въведе проблемни нулеви байтове при някои реализации. Argon2 няма това ограничение.

Argon2: 2015, PHC победител, 3 варианта

Argon2 е проектиран от Алекс Бирюков, Даниел Дину и Дмитрий Ховратович. Той има спечели конкурса за хеширане на пароли през юли 2015 г. и е стандартизиран от RFC 9106 (2021 г.). Argon2 излага три параметъра:

  • Разходи за памет (m): количество използвана памет, в KiB
  • Разходи за време (t): брой итерации в блока памет
  • Паралелизъм (p): брой паралелни нишки

Argon2 съществува в три варианта:

  • Argon2d: зависим от данните достъп до паметта. По-устойчив на GPU атаки, но податлив на странични канални атаки (тайминг, кеш).
  • Argon2i: независим от данните достъп до паметта. Устойчив на странични канали, малко по-малко устойчив на GPU атаки.
  • Argon2id: хибриден, стартира в режим i, след което превключва на режим d. Препоръчва се по подразбиране от RFC 9106 и OWASP.

Параметрите, препоръчани от OWASP през 2026 г. за Argon2id: m=19456 KiB (19 MiB), t=2, p=1. Типичен изходен формат:

$argon2id$v=19$m=19456,t=2,p=1$c2VsX2FsZWF0b2lyZQ$aGFzaF9jYWxjdWxl
 |         |   |                  |                 |
 |         |   base64 сол параметри base64 хеш
 |         версия
 algo argon2id

Защо се препоръчва Argon2id

Устойчивостта на специализирано оборудване днес е решаващият критерий. Bcrypt използва малко памет (~4 KiB), което позволява на GPU от висок клас да тества стотици хиляди хешове в секунда. Argon2id е твърд с памет: принуждавайте няколко MiB памет на опит драстично намалява паралелизма, постижим на GPU, и прави дизайна на специални ASIC икономически неизгодно.

Хибридният режим на Argon2id допълнително осигурява защита срещу странични канални атаки през първата половина на изчислението. Именно тази комбинация оправдава мястото си на препоръка по подразбиране от OWASP, NIST SP 800-63B (от ревизия 2024) и RFC 9106.

Сравнителна таблица

Критерий Bcrypt Argon2id
Година19992015
СтандартизацияДе факто, USENIX 1999RFC 9106 (2021)
Параметриценапамет, време, паралелност
Използвана памет~4 KiBМоже да се конфигурира (препоръчва се ~19 MiB)
Твърда паметНеДа
Съпротивление на GPUУмереноСилно
Съпротивление на страничния каналДобро (постоянно време)Добро (ид режим)
Ограничение за въвеждане72 байтаНяма
Препоръка на OWASP 2026ПриемливоПредпочитано
Зрялост на екосистематаМного широкоШироко от ~2018

Производителност и устойчивост на атаки

На модерен сървър bcrypt при цена=12 отнема около 250 ms и argon2id с параметри OWASP около 100-300 ms в зависимост от машината. Абсолютното време не е критерият: важното е съотношението между вашите разходи (едно изчисление, веднъж на влизане) и тези на нападателя (милиарди изчисления на GPU за прекъсване на дъмп).

На RTX 4090 hashcat достига около 200 000 bcrypt/s при цена=12, в сравнение с няколко дузини хиляди argon2id при 19 MiB. За същото време за изчисление от страната на сървъра Argon2id се забавя нападателят 5 до 10 пъти повече от bcrypt и разликата се разширява с новините поколения GPU.

PHP примери

PHP поддържа две собствени настройки чрез password_hash() и password_verify() depuis PHP 7.2 за Argon2i (и 7.3 за Argon2id). PHP конструкторът е избран във формат автоматика.

Bcrypt

$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$ok = password_verify($password, $hash);

if (password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 12])) {
    $hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
}

Argon2id

$opts = [
    'memory_cost' => 19456, // 19 MiB
    'time_cost' => 2,
    'нишки' => 1,
];
$hash = password_hash($password, PASSWORD_ARGON2ID, $opts);
$ok = password_verify($password, $hash);

if (password_needs_rehash($hash, PASSWORD_ARGON2ID, $opts)) {
    $hash = password_hash($password, PASSWORD_ARGON2ID, $opts);
}

Vous pouvez générer ou identifier des hashs de tous types avec notre генератор на хеш и не идентификатор на хеш.

Препоръка

За ново приложение през 2026 г. изберете Argon2id с настройки OWASP като базова линия (m=19456, t=2, p=1), която трябва да се коригира според целево време (обикновено 250 до 500 ms). Ако поддържате съществуващо приложение в bcrypt, то няма спешност за мигриране: bcrypt на цена=12 или повече остава защитен през 2026 г. Възползвайте се от password_needs_rehash() при следващото влизане за постепенно мигриране на потребителите активи към Argon2id.

Абсолютно избягвайте MD5, SHA-1 и голи SHA-256 за пароли (вижте нашия сравнение MD5 срещу SHA-256). Нито един от тези алгоритми не е предназначен за тази употреба.

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

Bcrypt все още ли е сигурен през 2026 г.?

Да, при условие че използвате достатъчна цена (12 минимум, 14, ако е възможно). Bcrypt няма известен криптографски дефект. Единствената му слабост спрямо Argon2id е малкият му отпечатък памет, което я прави по-достъпна за GPU и FPGA атаки.

Трябва ли да мигрираме bcrypt база данни към Argon2id?

Не спешно. Подходът е постепенна миграция с password_needs_rehash() препоръчително: при всяко успешно влизане отново хеширате паролата в Argon2id. В края на няколко месеца по-голямата част от активните потребители са мигрирани и можете да принудите a нулиране за пасивни акаунти.

Какъв е правилният брой нишки за Argon2id?

OWASP препоръчва p=1 по подразбиране. Увеличаването на p не прави нищо, ако вашият уеб сървърът вече обработва много заявки паралелно и усложнява настройката. Приоритизирайте по-скоро увеличаването на m (памет), което е основният лост за съпротивлението на GPU.

Какво е „bcrypt decrypter“?

Няма bcrypt decryptor: функцията е еднопосочна по конструкция. Инструментите които твърдят, че „дешифрират“ bcrypt, просто тестват речници за пароли токове срещу хеш. Това е точно същото като нападател да има вашата маса.

Argon2i или Argon2id?

Argon2id във всички случаи за пароли. Argon2i е малко повече безопасен срещу странични канали, но по-слаб срещу GPU атаки. Argon2id комбинира предимства и на двете и е изрично препоръчан от RFC 9106 за хеширане на пароли.

Трябва ли да добавим черен пипер в допълнение към солта?

Солта е достатъчна за по-голямата част от приложенията. Чушка (таен ключ, съхраняван извън основата от данни и се използва като HMAC преди хеша) добавя слой в случай на изтичане на база данни без компрометиране на сървъра на приложения. Argon2id не го предоставя първоначално, трябва да е така наберете ръчно.