Argon2id
Argon2id — это функция формирования ключа с повышенными требованиями к памяти, разработанная для противодействия как атакам с компромиссом время-память, так и атакам по сторонним каналам. В 2015 году она была выбрана победителем Password Hashing Competition (PHC) и определена в RFC 9106. VeraCrypt поддерживает Argon2id как альтернативу PBKDF2-HMAC для формирования ключа заголовка несистемных томов.
Основные свойства
-
Повышенные требования к памяти: использует настраиваемый объём памяти, что повышает устойчивость к атакам с применением специализированного оборудования.
-
Устойчивость к атакам по сторонним каналам: сочетает шаблоны доступа к памяти, зависящие и не зависящие от данных.
-
Внутренняя хеш-функция: использует BLAKE2b-512 внутри алгоритма, поэтому отдельный выбор хеш-алгоритма не требуется.
-
Настраиваемые параметры: позволяет изменять затраты памяти, затраты времени и степень параллелизма.
Варианты Argon2
У Argon2 есть три варианта:
-
Argon2d: использует доступ к памяти, зависящий от данных; устойчив к атакам с компромиссом время-память, но уязвимее к атакам по сторонним каналам.
-
Argon2i: использует доступ к памяти, не зависящий от данных; устойчив к атакам по сторонним каналам, но менее устойчив к атакам с компромиссом время-память.
-
Argon2id: гибридный вариант, объединяющий оба подхода и обеспечивающий устойчивость к обоим типам атак (используется в VeraCrypt).
Параметры в VeraCrypt
VeraCrypt использует Argon2id со следующей конфигурацией параметров:
Затраты памяти (m_cost)
Объём памяти, используемый при формировании ключа, управляется значением PIM:
-
Формула: m_cost(pim) = min(64 MiB + (pim - 1) × 32 MiB, 1024 MiB)
-
Диапазон: от 64 MiB до 1024 MiB (ограничение достигается при PIM = 31)
-
По умолчанию: 416 MiB (эквивалентно PIM = 12)
Затраты времени (t_cost)
Количество итераций, выполняемых при формировании ключа:
-
Для PIM ≤ 31: t_cost(pim) = 3 + floor((pim - 1) / 3)
-
Для PIM > 31: t_cost(pim) = 13 + (pim - 31)
-
По умолчанию: 6 итераций (эквивалентно PIM = 12)
Параллелизм
Количество параллельных потоков, используемых при вычислении:
-
Значение: в VeraCrypt всегда фиксировано на уровне 1 потока.
-
Причина: обеспечивает одинаковое поведение на разных аппаратных конфигурациях.
Преимущества перед PBKDF2
-
Требовательность к памяти: требует выделения значительного объёма памяти, что делает атаки с использованием GPU и ASIC дороже.
-
Современная конструкция: специально разработан с учётом современных методов атак.
-
Устойчивость к атакам по сторонним каналам: содержит встроенные меры защиты от атак по времени доступа к кэшу и других сторонних каналов.
-
Стандартизация: официально стандартизован в RFC 9106.
Рекомендации по использованию
При использовании Argon2id в VeraCrypt:
-
Требования к памяти: убедитесь, что доступен достаточный объём ОЗУ, особенно при больших значениях PIM.
-
Производительность: более высокие затраты памяти могут увеличить время монтирования, но обеспечивают более высокий уровень защиты.
-
Совместимость: доступен в версиях VeraCrypt, поддерживающих несколько функций формирования ключа.
-
Без выбора хеш-алгоритма: в отличие от PBKDF2-HMAC, отдельный хеш-алгоритм выбирать не нужно.
Технические характеристики
Алгоритм: Argon2id согласно RFC 9106
Внутренняя хеш-функция: BLAKE2b-512
Размер соли: 512 бит (как и у PBKDF2-HMAC)
Длина вывода KDF заголовка: фиксирована и составляет 1536 бит (192 байта) для текущего формата VeraCrypt. Для выбранного алгоритма шифрования используется требуемый префикс этого вывода (например, первые 64 байта для AES (AES-256-XTS)). Сторонние реализации должны запрашивать у Argon2id 192 байта до выбора требуемого префикса; запрос только длины ключевого материала выбранного алгоритма даёт другой вывод Argon2id.
Версия: Argon2 версии 0x13 (19 в десятичной системе)