У 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 дозволяє налаштувати кількість паралельних потоків обчислення. На перший погляд це мало б лише прискорювати хешування на багатоядерних серверах, але той самий параметр так само прискорює перебір для зловмисника з багатоядерним чи багатоканальним обладнанням — тому паралелізм підбирають відповідно до реальної кількості ядер сервера, а не збільшують «про запас».