Конфигурация по умолчанию и её разбор

Библиотека password-hash в JavaScript ориентируется на безопасные значения «из коробки», минимизируя вероятность некорректной настройки при отсутствии явного конфигурирования. Внутренние параметры подбираются так, чтобы обеспечивать баланс между криптографической стойкостью и производительностью на типичных серверных средах Node.js.

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


Базовая структура конфигурации

Типовая конфигурация по умолчанию может быть представлена следующим образом:

{
  algorithm: "argon2id",
  saltLength: 16,
  timeCost: 3,
  memoryCost: 2 ** 16,
  parallelism: 1,
  hashLength: 32,
  outputEncoding: "encoded",
  version: 19
}

Каждое поле влияет на итоговую стойкость и стоимость вычислений.


Алгоритм хэширования

argon2id как стандарт

В качестве основного алгоритма используется argon2id, представляющий гибридную модель защиты от атак:

  • устойчивость к GPU-ускорению;
  • защита от side-channel атак;
  • адаптивная настройка памяти и времени вычислений.

Выбор argon2id в конфигурации по умолчанию обусловлен его балансом между безопасностью и современными требованиями к хранению паролей.

Альтернативные алгоритмы (bcrypt, scrypt) обычно доступны через явную переопределяемую настройку, но не используются автоматически.


Параметры соли

saltLength

Значение по умолчанию — 16 байт.

Соль генерируется криптографически стойким генератором случайных чисел и добавляется к каждому паролю индивидуально.

Функциональные особенности:

  • исключение атак с использованием радужных таблиц;
  • уникальность каждого хэша даже при одинаковых паролях;
  • минимизация риска коллизий.

Увеличение длины соли редко требуется, поскольку 128 бит уже считается безопасным пределом для большинства сценариев.


Параметры вычислительной сложности

timeCost

Значение по умолчанию — 3 итерации.

Этот параметр определяет количество циклов выполнения алгоритма.

Повышение timeCost:

  • увеличивает время генерации хэша;
  • значительно усложняет перебор паролей;
  • линейно влияет на нагрузку CPU.

Снижение параметра возможно только в высоконагруженных системах с осознанным компромиссом в безопасности.


memoryCost

Значение по умолчанию — 65536 KiB (64 MiB).

memoryCost определяет объём памяти, используемый алгоритмом.

Особенности влияния:

  • делает атаки на GPU и ASIC менее эффективными;
  • увеличивает стоимость параллельного перебора;
  • критически влияет на серверные ресурсы при массовой верификации.

Значение 64 MiB выбрано как компромисс между безопасностью и возможностью обработки большого числа запросов.


parallelism

Значение по умолчанию — 1.

Параллелизм определяет количество потоков вычисления.

Однопоточная конфигурация выбрана для:

  • предсказуемого потребления ресурсов;
  • отсутствия конкуренции потоков;
  • стабильной работы в serverless-средах.

В системах с высокой нагрузкой параметр может быть увеличен, но это требует дополнительной оценки производительности.


Длина хэша

hashLength

Значение по умолчанию — 32 байта.

Длина итогового хэша влияет на:

  • устойчивость к коллизиям;
  • размер хранимых данных;
  • совместимость с внешними системами.

32 байта (256 бит) считается достаточным уровнем для долговременного хранения паролей без риска практической коллизии.


Формат выходных данных

outputEncoding

Значение по умолчанию — encoded.

Формат включает структурированную строку:

$argon2id$v=19$m=65536,t=3,p=1$<salt>$<hash>

Состав строки:

  • идентификатор алгоритма;
  • версия;
  • параметры памяти, времени и параллелизма;
  • соль;
  • итоговый хэш.

Такой формат позволяет:

  • сохранять все параметры в одной строке;
  • обеспечивать обратную совместимость;
  • восстанавливать конфигурацию при проверке пароля.

Версия алгоритма

version

Значение по умолчанию — 19.

Версия определяет внутреннюю спецификацию алгоритма Argon2.

Фиксация версии важна для:

  • воспроизводимости результатов;
  • корректной проверки старых хэшей;
  • предотвращения несовместимости при обновлениях библиотеки.

Внутренние принципы формирования конфигурации

При отсутствии пользовательских параметров библиотека использует детерминированный механизм инициализации:

  1. Подключается криптографический генератор случайных чисел для соли.
  2. Устанавливаются фиксированные параметры сложности.
  3. Выбирается алгоритм argon2id как базовый профиль.
  4. Формируется сериализуемый объект конфигурации.
  5. Конфигурация закрепляется за экземпляром хэш-функции.

Такой подход исключает случайные отклонения между вызовами и обеспечивает стабильность поведения.


Влияние конфигурации по умолчанию на производительность

Конфигурация сбалансирована для типичного серверного окружения Node.js:

  • генерация одного хэша: десятки миллисекунд;
  • проверка: сопоставимое время с генерацией;
  • нагрузка на память: умеренная, предсказуемая.

Основной компромисс заключается между скоростью регистрации пользователей и устойчивостью к атаке перебором.


Особенности безопасности дефолтных параметров

Выбранные значения ориентированы на защиту от следующих классов атак:

Брутфорс

Увеличенные параметры memoryCost и timeCost существенно замедляют перебор.

GPU-ускорение

Архитектура Argon2id и использование памяти делают параллельные вычисления менее эффективными.

Радужные таблицы

Соль фиксированной достаточной длины исключает предварительно вычисленные атаки.

Массовая компрометация

Уникальность каждого хэша предотвращает утечку связей между пользователями.


Поведение при отсутствии конфигурации

Если библиотека вызывается без параметров:

hashPassword("secret");

происходит автоматическая подстановка всех значений по умолчанию. Это включает:

  • генерацию соли;
  • выбор алгоритма;
  • установку параметров нагрузки;
  • формирование итогового хэша в стандартном формате.

Проверка пароля использует встроенную декодировку строки, извлекая параметры из самого хэша.


Ограничения конфигурации по умолчанию

Несмотря на универсальность, стандартные параметры имеют ряд ограничений:

  • не адаптируются под конкретную инфраструктуру;
  • могут быть избыточными для слабых устройств;
  • не учитывают требования масштабируемых систем с высокой нагрузкой;
  • не оптимизированы под минимальную задержку ответа.

Эти ограничения компенсируются возможностью переопределения конфигурации на уровне приложения.


Интерпретация параметров при проверке пароля

При верификации используется не глобальная конфигурация, а параметры, зашитые в строку хэша.

Это означает:

  • изменения дефолтных значений не ломают старые хэши;
  • каждая запись самодостаточна;
  • библиотека работает в режиме обратной совместимости.

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


Стабильность и предсказуемость поведения

Основная цель дефолтной конфигурации — обеспечение одинакового результата при одинаковых входных данных в разных средах выполнения.

Для этого фиксируются:

  • алгоритм;
  • версия;
  • формат сериализации;
  • параметры сложности.

Это позволяет использовать библиотеку в распределённых системах без риска рассинхронизации логики хэширования.