Учиться · 7 мин. чтения
Argon2id vs PBKDF2: какую функцию формирования ключа использовать?
Обе превращают пароль в ключ шифрования, но обходятся злоумышленникам в совершенно разные суммы.
Когда вы шифруете что-либо с парольной фразой, сама фраза слишком коротка для прямого использования в качестве ключа AES. KDF берёт парольную фразу и растягивает её — выполняя тысячи операций для получения 256-битного ключа, при этом делая перебор дорогостоящим.
PBKDF2 — старый надёжный
PBKDF2 был стандартизирован в 2000 году и по-прежнему используется повсеместно — TLS, FileVault, OpenPGP. Он итеративно применяет HMAC-SHA-256 настраиваемое количество раз. Больше итераций = медленнее для злоумышленников.
Слабость PBKDF2: он дёшев на специализированном оборудовании. GPU может выполнять тысячи итераций параллельно. Злоумышленник с небольшой GPU-фермой может перебирать варианты на порядки быстрее, чем CPU.
Argon2id — современный стандарт
Argon2 выиграл конкурс Password Hashing Competition 2015 года: он требует много памяти. Каждая итерация требует большого блока ОЗУ. GPU с 4 ГБ может выполнять 4 атаки одновременно вместо 4000 — соотношение затрат смещается в пользу защитника.
Argon2id — рекомендуемый вариант, объединяющий Argon2i (устойчивый к атакам по сторонним каналам) и Argon2d (более быстрый). Используется по умолчанию в libsodium, Bitwarden, 1Password и OpenPGP с 2024 года.
Когда что использовать
- Используйте Argon2id для любого нового шифрования. Стоимость библиотеки невелика (~250 КБ WASM), а прирост безопасности ощутим.
- Используйте PBKDF2, когда нужна максимальная совместимость — старые PGP-клиенты, архивные инструменты, встроенные устройства.
- Это приложение использует Argon2id для новых шифрований и PBKDF2 для старых шифртекстов.
Практические цифры
На современном ноутбуке Argon2id (m=65536 KiB, t=3, p=1) занимает ~200 мс. GPU, выполняющий PBKDF2-SHA256 с 200k итераций, даёт ~50M попыток/с. Тот же GPU с Argon2id и 64 МБ памяти даёт ~100 попыток/с. Шесть порядков величины преимущества для защитника.