Argon2i в PHP7 - выбор подходящих опций
Какие значения я должен использовать для генерации хэшей Argon2i и как найти подходящие настройки, которые мое оборудование может себе позволить?
А именно:
memory_cost
time_cost
threads
как:
$options = [
'memory_cost' => 1<<17,
'time_cost' => 4,
'threads' => 3,
];
$hash = password_hash('test', PASSWORD_ARGON2I, $options);
В PHP документах есть простой скрипт для поиска подходящего значения стоимости для хэшей bcrypt. Как это можно приспособить для Argon2?
1 ответ
От: PHP RFC Argon2 password_hash
Факторы стоимости
От:
Из-за разнообразия платформ, на которых работает PHP, факторы стоимости намеренно установлены низкими, чтобы случайно не использовать системные ресурсы в системах с общими или низкими ресурсами при использовании параметров стоимости по умолчанию. Следовательно, пользователи должны корректировать факторы стоимости в соответствии с системой, над которой они работают. В следующем списке представлена производительность хэширования в различных системах, использующих эти значения стоимости по умолчанию.
Common Cloud Server 512 MB, 1 Core: 3-5 ms Common Cloud Server 2 GB, 2 Core, 1-3 ms 512 MB Raspberry Pi Zero: 75-85ms
Поскольку Argon2 не имеет "плохих" значений, однако, потребление большего количества ресурсов считается лучше, чем потребление меньшего. Пользователям рекомендуется корректировать факторы стоимости для платформы, для которой они разрабатывают.
Потоки
От: Какое рекомендуемое количество итераций для Argon2
В статье argon2 приведена следующая процедура (перефразированная) для определения параметров, которые вы должны использовать:
- Выясните, сколько потоков вы можете использовать, выберите $ h $ соответственно.
- Выясните, сколько памяти вы можете использовать, выберите соответственно $ m $.
- Определите максимальное время, которое вы можете потратить на это в размере $x$, выберите самое большое значение $t$, которое будет меньше, чем $x$ для вашей системы и других параметров.
Т.е. они рекомендуют вам запускать его в вашей системе и определять самые большие параметры, которые соответствуют вашим ограничениям на использование памяти и процессорного времени.
Из аргона 2 спец.
( ссылка здесь)
Степень параллелизма
p
определяет, сколько независимых (но синхронизирующих) вычислительных цепочек можно запустить. Может принимать любое целое значение от 1 до 2^24 -1Размер памяти
m
может быть любым целым числом килобайт из8p
до 2^32 -1. Фактическое количество блоковm′
, которыйm
округляется до ближайшего кратного4p
,Количество итераций
t
(используется для настройки времени работы независимо от объема памяти) может быть любым целым числом от 1 до 2^32 -1
Дальнейшая литература
Выясните, сколько потоков можно использовать при каждом вызове Argon2 (параллелизм). Они рекомендуют вдвое больше, чем количество ядер, выделенных для хеширования паролей.
Выясните, сколько времени может занять каждый звонок. Одной из рекомендаций для одновременных пользовательских входов является сохранение этого значения менее 0,5 мс.
Измерьте время хеширования, используя выбранные вами параметры. Найдите time_cost, который находится в пределах вашего учтенного времени. Если time_cost=1 занимает слишком много времени, уменьшите memory_cost.
Заключение:
Таким образом, из приведенных выше выдержек кажется, что вы хотите стремиться к 0.5ms
как измерено PHP microtime
как в примере с BCrypt. Затем вы можете установить число потоков, равное удвоенному числу ядер, на которых работает ваш процессор, например, 8 для 4-ядерного процессора.
После этого вы сможете выполнить серию тестов с этими двумя значениями, чтобы найти допустимое третье значение для memory_cost.
Запустите несколько тестов на своем сервере, чтобы увидеть, что сервер может комфортно управлять. Узнайте , может ли помочь этот CLI.
Измените три переменные в порядке, указанном в приведенной выше цитате (в разделе " Потоки"), поэтому настройте объем памяти, используя большое количество итераций.
Короче говоря, мы не можем дать вам руководство "лучший совет", потому что это зависит от того, какая спецификация. вы собираетесь запустить это на...