Открыть сервис

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 может использовать несколько ядер процессора, что ускоряет вычисление на многоядерных системах, но не снижает защиту.

Этапы работы

  1. Инициализация. На основе пароля, соли (salt) и параметров (t, m, p) формируется начальный блок данных.
  2. Заполнение памяти. Алгоритм последовательно заполняет массив памяти блоками, используя функцию сжатия (BLAKE2b). Каждый новый блок вычисляется на основе предыдущих, что создаёт зависимость от данных.
  3. Итерации. Процесс заполнения памяти повторяется заданное число раз (t). На каждом проходе блоки перезаписываются, что усложняет атаки, основанные на повторном использовании памяти.
  4. Финализация. После завершения всех итераций результирующий блок сжимается в итоговый хеш (обычно 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 →