Один из трёх соавторов Argon2 — Алекс Бирюков, криптограф родом из СССР, ныне профессор Университета Люксембурга. В 2015 году созданный его командой алгоритм выиграл Password Hashing Competition. При этом в России Argon2 не связан ни с каким государственным стандартом: в отличие от AES, для которого есть обязательный ГОСТ-аналог «Кузнечик», для хеширования паролей ФСТЭК и Росстандарт отдельного национального алгоритма не вводили — поэтому российские компании (от Яндекса до небольших стартапов) выбирают Argon2 просто как лучшую доступную технологию, без регуляторной привязки.
Почему память, а не только время
Bcrypt и PBKDF2 замедляют перебор только за счёт процессорного времени. Argon2 дополнительно требует определённый объём оперативной памяти на каждую попытку хеширования — это называется memory-hard функцией. GPU-фермы, которые дёшево параллелизуют миллионы простых операций, гораздо хуже справляются с параллельным выделением больших объёмов памяти: память дорога и физически ограничена на одной плате, в отличие от вычислительных ядер.
Три варианта: d, i, id
- Argon2d — обращение к памяти зависит от самого пароля, что даёт максимальную защиту от GPU, но теоретически открывает атаки по времени выполнения.
- Argon2i — обращение к памяти не зависит от пароля, что защищает от атак по побочным каналам, но чуть слабее против GPU.
- Argon2id — комбинирует оба подхода в разных раундах вычисления. Это вариант по умолчанию и в PHP (
PASSWORD_ARGON2ID), и в большинстве современных фреймворков.
Три параметра стоимости
Помимо выбора варианта, Argon2 отдельно настраивает объём памяти (в КиБ), число итераций и степень параллелизма. Это удобнее старых схем с единственным «cost factor»: администратор может, например, ограничить память до 64 МиБ на сервере с малым запасом ОЗУ, компенсировав это увеличением числа итераций — так безопасность подстраивается под реальное железо, а не только под абстрактную «сложность».
Зачем это нужно
- Выбирать современный алгоритм для новой системы аутентификации вместо MD5 или SHA-256.
- Понимать, почему Argon2 значительно дороже взламывать на GPU-фермах для майнинга и перебора паролей.
- Планировать миграцию с bcrypt или PBKDF2, когда старая система хеширования требует обновления.
Ловушка параметра параллелизма
Параллелизм кажется чисто «положительным» параметром — больше потоков, быстрее сервер обрабатывает вход пользователей. Но тот же параметр одинаково ускоряет перебор для атакующего с многоядерным оборудованием: если увеличить параллелизм с 1 до 4 «на всякий случай», взлом становится примерно во столько же раз быстрее. Разумная практика — выставлять параллелизм равным реальному числу доступных ядер сервера, не больше.