Argon2
Argon2 — это алгоритм хеширования паролей, разработанный в 2015 году для конкурса Password Hashing Competition (PHC), победителем которого он стал. Относится к классу функций, устойчивых к атакам с использованием специализированного аппаратного обеспечения (ASIC, FPGA, GPU), и предназначен для безопасного хранения учётных данных пользователей. В отличие от универсальных криптографических хеш-функций (например, SHA-256), Argon2 специально спроектирован для защиты от перебора паролей (brute-force) и радужных таблиц, требуя значительных вычислительных ресурсов и памяти.
История
Разработка Argon2 была инициирована в рамках Password Hashing Competition (PHC) — открытого конкурса, проводившегося с 2013 по 2015 год. Целью конкурса было создание современного, криптостойкого алгоритма хеширования паролей, который заменил бы устаревшие схемы вроде bcrypt, scrypt и PBKDF2. Команда разработчиков из Университета Лотарингии (Франция) и Университета Сент-Этьена представила алгоритм, получивший название Argon2.
В июле 2015 года Argon2 был объявлен победителем PHC. Алгоритм был выбран за сбалансированное сочетание устойчивости к атакам, эффективности реализации и гибкости настройки. После победы Argon2 начал постепенно внедряться в популярные программные продукты и библиотеки. В 2017 году RFC 9106 закрепил спецификацию алгоритма, а в 2020 году он был рекомендован для использования в государственных информационных системах США (NIST SP 800-63B). В России алгоритм также применяется в ряде отечественных решений, хотя официального статуса государственного стандарта не имеет.
Виды и варианты
Argon2 существует в двух основных вариантах, отличающихся способом использования памяти и устойчивостью к определённым типам атак:
- Argon2d — вариант, оптимизированный для защиты от атак по сторонним каналам (timing attacks) на основе данных. Использует зависимый от данных доступ к памяти, что делает его более устойчивым к атакам с использованием GPU, но потенциально уязвимым для атак, основанных на времени выполнения. Рекомендуется для приложений, где пароли хранятся на стороне сервера и не передаются по сети.
- Argon2i — вариант, использующий независимый от данных доступ к памяти. Это делает его устойчивым к атакам по сторонним каналам, но несколько снижает производительность на GPU. Рекомендуется для случаев, когда пароли могут быть подвергнуты атакам с измерением времени (например, при хешировании на стороне клиента).
- Argon2id — гибридный вариант, объединяющий свойства Argon2d и Argon2i. На первых этапах использует независимый от данных доступ (как Argon2i), а на последующих — зависимый (как Argon2d). Считается наиболее сбалансированным и рекомендованным для общего использования.
Устройство и принцип работы
Argon2 основан на итеративном применении функции сжатия к блокам данных, хранящимся в памяти. Алгоритм использует три ключевых параметра, которые задаются при хешировании:
- Время (t) — количество итераций (проходов) по памяти. Увеличение времени линейно замедляет вычисление хеша.
- Память (m) — объём используемой оперативной памяти (в килобайтах). Чем больше памяти требуется, тем сложнее атаковать алгоритм на GPU или ASIC, так как эти устройства имеют ограниченный объём памяти.
- Параллелизм (p) — количество параллельных потоков (каналов). Argon2 может использовать несколько ядер процессора, что ускоряет вычисление на многоядерных системах, но не снижает защиту.
Этапы работы
- Инициализация. На основе пароля, соли (salt) и параметров (t, m, p) формируется начальный блок данных.
- Заполнение памяти. Алгоритм последовательно заполняет массив памяти блоками, используя функцию сжатия (BLAKE2b). Каждый новый блок вычисляется на основе предыдущих, что создаёт зависимость от данных.
- Итерации. Процесс заполнения памяти повторяется заданное число раз (t). На каждом проходе блоки перезаписываются, что усложняет атаки, основанные на повторном использовании памяти.
- Финализация. После завершения всех итераций результирующий блок сжимается в итоговый хеш (обычно 32 байта).
Применение
Argon2 широко применяется в современных системах для безопасного хранения паролей. Основные области использования:
- Веб-приложения. Многие фреймворки (например, Django, Laravel, Symfony) и библиотеки (libsodium, argon2-cffi) поддерживают Argon2 как стандартный алгоритм хеширования паролей.
- Операционные системы. Некоторые дистрибутивы Linux (например, Fedora) используют Argon2 для хеширования паролей пользователей в файле
/etc/shadow. - Криптовалюты. Алгоритм применяется в некоторых криптовалютах (например, в проекте Arionum) для майнинга, обеспечивая устойчивость к ASIC-майнерам.
- Шифрование ключей. Argon2 используется для генерации ключей шифрования из паролей (Key Derivation Function, KDF) в таких программах, как VeraCrypt и KeePass.
Сравнение с другими алгоритмами
| Алгоритм | Основная защита | Устойчивость к GPU/ASIC | Параметры настройки | Рекомендация |
|---|---|---|---|---|
| PBKDF2 | Итерации (время) | Низкая | Время | Устарел |
| bcrypt | Итерации (время) | Средняя | Время | Устарел |
| scrypt | Память + время | Высокая | Память, время | Рекомендуется |
| Argon2 | Память + время + параллелизм | Очень высокая | Память, время, параллелизм | Современный стандарт |
Критика и ограничения
Несмотря на преимущества, Argon2 имеет ряд ограничений:
- Требовательность к ресурсам. Для достижения высокой защиты требуется значительный объём оперативной памяти (например, 64 МБ и более), что может быть проблематично для встраиваемых систем или облачных сред с ограниченной памятью.
- Сложность настройки. Выбор оптимальных параметров (t, m, p) требует понимания аппаратного обеспечения сервера и ожидаемой нагрузки. Неправильная настройка может снизить защиту или привести к чрезмерному потреблению ресурсов.
- Отсутствие стандартизации в России. На момент написания статьи Argon2 не включён в перечень рекомендованных криптографических алгоритмов Федеральной службы по техническому и экспортному контролю (ФСТЭК России) или Центрального банка РФ. Для государственных информационных систем в России предпочтительнее использовать алгоритмы из ГОСТ Р 34.11-2012 (Стрибог) или PBKDF2 с ГОСТ-овскими хешами.
Интересные факты
- Название «Argon2» происходит от химического элемента аргон (Ar) — инертного газа, что символизирует устойчивость алгоритма к атакам.
- В 2019 году была обнаружена атака на Argon2i, позволяющая снизить его защиту при определённых настройках, но она не затрагивает Argon2id.
- Разработчики Argon2 получили премию в 10 000 долларов США от фонда Password Hashing Competition.
Источники
- RFC 9106 — Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications.
- Password Hashing Competition (PHC) — официальный сайт и результаты конкурса.
- NIST SP 800-63B — Digital Identity Guidelines: Authentication and Lifecycle Management.
- Документация библиотеки libsodium (версия 1.0.18).
- Статья «Argon2: the state of the art in password hashing» (Birjukov et al., 2016).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →