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 приведена следующая процедура (перефразированная) для определения параметров, которые вы должны использовать:

    1. Выясните, сколько потоков вы можете использовать, выберите $ h $ соответственно.
    1. Выясните, сколько памяти вы можете использовать, выберите соответственно $ m $.
    1. Определите максимальное время, которое вы можете потратить на это в размере $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.

Измените три переменные в порядке, указанном в приведенной выше цитате (в разделе " Потоки"), поэтому настройте объем памяти, используя большое количество итераций.

Короче говоря, мы не можем дать вам руководство "лучший совет", потому что это зависит от того, какая спецификация. вы собираетесь запустить это на...

Другие вопросы по тегам