Усі статті

Argon2: чому цей алгоритм переміг конкурс на хешування паролів

У 2015 році відбувся Password Hashing Competition — відкритий конкурс криптографів, метою якого було знайти найкращий алгоритм для хешування паролів. Переможцем став Argon2, який відтоді вважається золотим стандартом і рекомендований OWASP як пріоритетний вибір над bcrypt.

Чим Argon2 відрізняється від bcrypt

Bcrypt вимагає лише обчислювального часу, тоді як Argon2 додатково вимагає значного обсягу пам'яті (memory-hard функція). Це ускладнює атаки на спеціалізованому обладнанні: GPU й ASIC-чипи чудово паралелізують прості обчислення, але паралелізувати доступ до великого обсягу пам'яті значно важче й дорожче.

Три варіанти Argon2

  • Argon2d — максимальний захист від атак на GPU, але потенційно вразливий до атак по побічних каналах (timing attacks).
  • Argon2i — стійкий до атак по побічних каналах, оптимізований для хешування паролів, де вхідні дані вводить користувач.
  • Argon2id — гібрид, що поєднує переваги обох. Рекомендований варіант за замовчуванням для більшості застосунків.

Три параметри налаштування

Argon2 дозволяє незалежно налаштовувати час обчислення (кількість ітерацій), обсяг пам'яті та рівень паралелізму — це дає гнучкість підлаштувати стійкість під конкретне обладнання сервера, чого не дозволяють старіші алгоритми з єдиним параметром складності.

Навіщо це потрібно

  • Обирати сучасний алгоритм для нової системи автентифікації.
  • Розуміти, чому Argon2 краще захищає від атак на спеціалізованому обладнанні для добування криптовалют.
  • Планувати міграцію з bcrypt чи PBKDF2 на сучасніший стандарт.

Параметр паралелізму

Окрім часу й пам'яті, Argon2 дозволяє налаштувати кількість паралельних потоків обчислення. На перший погляд це мало б лише прискорювати хешування на багатоядерних серверах, але той самий параметр так само прискорює перебір для зловмисника з багатоядерним чи багатоканальним обладнанням — тому паралелізм підбирають відповідно до реальної кількості ядер сервера, а не збільшують «про запас».

Спробувати інструмент