Вопрос или проблема
Сначала хочу сказать, что я очень плохо разбираюсь в криптографических алгоритмах.
Я узнал онлайн, что Argon2 более безопасен, чем SHA-512, поэтому я использовал его для хеширования паролей.
Рекомендуемые параметры для Argon2:
- Память: 4 Гб
- Количество итераций: 4 или больше
На моем древнем сервере это занимает чуть меньше бесконечности для 100 пользователей… Поэтому я уменьшил параметры до:
- Память: 100 Мб
- Количество итераций: 3
- Потоки: 4 (если это важно)
- Тип: Argon2i (рекомендуется для хешей паролей)
- Размер соли: 20 байт
Эти параметры значительно ниже тех, что я нашел как рекомендуемые. Мне стало интересно…
Будет ли Argon2 с моими параметрами все еще более безопасным, чем SHA-512? Или мне стоит вернуться к SHA-512?
П.С. Если мой вопрос неясен, напишите мне, пожалуйста, я постараюсь переформулировать его.
Argon2 намеренно медленный: медленные функции хеширования хороши для хранения паролей, потому что ломать их требует времени и ресурсов. В случае Argon2 хеширование также потребляет память. Торговля в вашей настройке заключается в том, что ваше оборудование может немного быстрее вычислять хеши, и злоумышленник будет иметь такое же преимущество в той же степени. Кроме того, вам нужно потреблять ресурсы только один раз за попытку входа или создание пароля, в то время как злоумышленнику, взламывающему хеш, нужно делать это при каждой попытке.
С другой стороны, SHA-512 не предназначен для хранения паролей. Он не только быстрее на обсуждаемом оборудовании, но и значительно быстрее вычисляется на GPU или специализированном оборудовании, в то время как Argon2 не имеет этой слабости.
Argon2 настроенный на максимальную задержку, которую вы можете терпеть, если вам нужно выбирать между двумя – но лучший ответ может быть: ни то, ни другое.
Несколько судей Конкурса по хешированию паролей, которые выбрали семейство Argon2 победителем, впоследствии признали, что когда вы настраиваете Argon2 для быстродействия, как указано в исследованиях UX для интерактивной аутентификации (<=500 мс), это на самом деле хуже, чем bcrypt с точки зрения защиты (лучше для злоумышленника, хуже для защитника). Это связано с тем, что на этих уровнях настройки Argon2 менее устойчив к параллельным атакам, чем bcrypt, настроенный на ту же отзывчивость.
Так что, если вас устраивают другие ограничения bcrypt (максимум 72 символа и избегание вложенности), bcrypt может быть все еще лучшим выбором, в зависимости от вашего масштаба и модели угроз.
И любой из них будет лучшим выбором по сравнению с сырым SHA-512 (поскольку даже высокие итерации не достаточно снижают параллелизм) или sha512crypt (поскольку у него есть собственные проблемы).
Редактирование: некоторые бенчмарки, которые один из других судей PHC (Стив Томас) опубликовал, чтобы поддержать это утверждение.
Другие ответы уже объяснили, почему Argon2d лучше, чем SHA512 для хеширования паролей, но я хотел бы поделиться своим опытом настройки Argon2 для веб-сервера.
- Во-первых, выберите вариант Argon2. Хотя в спецификации написано, что
Argon2i использует память с независимым доступом к данным, что предпочтительно для хеширования паролей и основанного на пароле извлечения ключа
, мне больше нравитсяArgon2id
потому, что он обеспечивает баланс устойчивости как к атакам бокового канала, так и к атакам на основе GPU. - Во-вторых, выберите requisito памяти, поскольку веб-серверу нужно обслуживать несколько пользователей одновременно. Рекомендации OWAPS рекомендуют минимум
19MB
, но вы можете использовать меньшее количество, не снижая безопасность, увеличив количество итераций. - В-третьих, выберите количество потоков / степень параллелизма:
1
– безопасный выбор, поскольку веб-сервер уже должен использовать несколько потоков для обслуживания запросов. - В-четвертых, выберите количество итераций, чем больше число, тем лучше, если скорость проверки не слишком медленная для вас. Правило таково: чем меньше количество памяти вы хотите, тем больше количества итераций вам потребуется для достижения того же уровня безопасности.
- Что касается размера соли и размера вывода, просто используйте значение по умолчанию вашей библиотеки хеширования. Если хотите настроить, размер соли
16 байтов
и размер вывода32 байта
будет вполне достаточен.
На мой взгляд, Argon2 лучше, потому что он медленный по причине. Хакеры могут использовать устройства с очень хорошими GPU, которые могут вычислять миллиарды хешей SHA-512 в секунду, но с медленной функцией хеширования это число изменится значительно.
Ответ или решение
Когда речь заходит о выборе между Argon2 и SHA-512 для хеширования паролей, важно учитывать несколько ключевых факторов, включая безопасность, производительность и адаптацию к вашим условиям.
Почему Argon2 предпочтительнее для хеширования паролей
-
Проектирование для хеширования паролей: Argon2 был специально разработан для безопасного хеширования паролей и выиграл Конкурс по хешированию паролей, что подтверждает его высокую степень безопасности. Он более устойчив к атакам на основе параллелизма, что становится особенно актуальным, когда злоумышленники используют устройства с мощными графическими процессорами (GPU).
-
Замедление вычислений: Argon2 замедляет процесс хеширования, требуя значительных ресурсов (памяти и времени), что делает атаки с использованием перебора значительно сложнее. Напротив, SHA-512 предназначен для быстрого вычисления, что делает его уязвимым для атак с использованием специализированного оборудования.
О ваших настройках Argon2
Ваши настройки Argon2, хотя и хороши для некоторых случаев, значительно ниже рекомендованных. Однако они все же обеспечивают более высокий уровень безопасности по сравнению с SHA-512:
-
Объём памяти: 100 Мб – это довольно хороший компромисс для веб-сервера, обеспечивающий приемлемое время обработки. Большинство рекомендаций подразумевают большее значение, но ваше оборудование может ограничивать возможности.
-
Итерации: 3 итерации могут показаться низкими, особенно для хеширования паролей. Чем больше итераций, тем более устойчивым будет хеш к атакам. Если возможно, рассмотрите увеличение этого числа.
-
Параллельность: Параметр "потоки" (threads) в 4 также позволит вам лучше использовать ваши ресурсы, особенно на многопоточных серверах.
-
Тип Argon2: Argon2i хорошо подходит для защиты от атак с использованием побочных каналов, но Argon2id предоставляет лучшую защиту с учетом как побочных каналов, так и атак на GPU. Если это возможно, подумайте о переходе на Argon2id.
Сравнение с SHA-512
Хотя SHA-512 является сильным хеш-функцией, его применение для хеширования паролей не рекомендуется, поскольку:
-
Легкость атаки: Высокая скорость вычисления позволяет злоумышленникам, использующим множество ресурсов, пробовать множество комбинаций хешей за короткое время.
-
Отсутствие защитных механизмов: SHA-512 не учитывает его устойчивость к параллельным атакам, что делает его менее безопасным вариантом по сравнению с Argon2 даже с вашими меньшими настройками.
Рекомендации
-
Не возвращайтесь к SHA-512: Вашиaltered Argon2 настройки по-прежнему обеспечивают лучшую безопасность для хеширования паролей, чем SHA-512.
-
Оптимизация параметров Argon2: Если вы сможете повысить количество итераций или оптимизировать параметры памяти, сделайте это с целью повышения безопасности.
-
Рассмотрите bcrypt: Если ваши текущие настройки Argon2 вызывают значительные задержки, возможно, стоит рассмотреть использование bcrypt, который до сих пор является хорошим вариантом для хеширования паролей и обеспечивает приемлемую защиту.
Заключение
Таким образом, Argon2 – это более безопасный выбор по сравнению с SHA-512 для хеширования паролей, даже с вашими текущими настройками. Однако важно продолжать настраивать и оптимизировать алгоритм для достижения максимальной безопасности при работе с вашими ограничениями по ресурсам.