Документация Алгоритмы формирования ключа Argon2id

# 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 в десятичной системе)
Дополнительные сведения о значениях PIM и их влиянии на параметры Argon2id см. в разделе Персональный множитель итераций (PIM).