Библиотека password-hash в JavaScript ориентируется на безопасные значения «из коробки», минимизируя вероятность некорректной настройки при отсутствии явного конфигурирования. Внутренние параметры подбираются так, чтобы обеспечивать баланс между криптографической стойкостью и производительностью на типичных серверных средах Node.js.
При инициализации без пользовательских опций используется единый объект конфигурации, определяющий алгоритм хэширования, параметры соли, вычислительную сложность и формат выходной строки.
Типовая конфигурация по умолчанию может быть представлена следующим образом:
{
algorithm: "argon2id",
saltLength: 16,
timeCost: 3,
memoryCost: 2 ** 16,
parallelism: 1,
hashLength: 32,
outputEncoding: "encoded",
version: 19
}
Каждое поле влияет на итоговую стойкость и стоимость вычислений.
В качестве основного алгоритма используется argon2id,
представляющий гибридную модель защиты от атак:
Выбор argon2id в конфигурации по умолчанию обусловлен
его балансом между безопасностью и современными требованиями к хранению
паролей.
Альтернативные алгоритмы (bcrypt, scrypt) обычно доступны через явную переопределяемую настройку, но не используются автоматически.
Значение по умолчанию — 16 байт.
Соль генерируется криптографически стойким генератором случайных чисел и добавляется к каждому паролю индивидуально.
Функциональные особенности:
Увеличение длины соли редко требуется, поскольку 128 бит уже считается безопасным пределом для большинства сценариев.
Значение по умолчанию — 3 итерации.
Этот параметр определяет количество циклов выполнения алгоритма.
Повышение timeCost:
Снижение параметра возможно только в высоконагруженных системах с осознанным компромиссом в безопасности.
Значение по умолчанию — 65536 KiB (64 MiB).
memoryCost определяет объём памяти, используемый алгоритмом.
Особенности влияния:
Значение 64 MiB выбрано как компромисс между безопасностью и возможностью обработки большого числа запросов.
Значение по умолчанию — 1.
Параллелизм определяет количество потоков вычисления.
Однопоточная конфигурация выбрана для:
В системах с высокой нагрузкой параметр может быть увеличен, но это требует дополнительной оценки производительности.
Значение по умолчанию — 32 байта.
Длина итогового хэша влияет на:
32 байта (256 бит) считается достаточным уровнем для долговременного хранения паролей без риска практической коллизии.
Значение по умолчанию — encoded.
Формат включает структурированную строку:
$argon2id$v=19$m=65536,t=3,p=1$<salt>$<hash>
Состав строки:
Такой формат позволяет:
Значение по умолчанию — 19.
Версия определяет внутреннюю спецификацию алгоритма Argon2.
Фиксация версии важна для:
При отсутствии пользовательских параметров библиотека использует детерминированный механизм инициализации:
argon2id как базовый профиль.Такой подход исключает случайные отклонения между вызовами и обеспечивает стабильность поведения.
Конфигурация сбалансирована для типичного серверного окружения Node.js:
Основной компромисс заключается между скоростью регистрации пользователей и устойчивостью к атаке перебором.
Выбранные значения ориентированы на защиту от следующих классов атак:
Увеличенные параметры memoryCost и timeCost существенно замедляют перебор.
Архитектура Argon2id и использование памяти делают параллельные вычисления менее эффективными.
Соль фиксированной достаточной длины исключает предварительно вычисленные атаки.
Уникальность каждого хэша предотвращает утечку связей между пользователями.
Если библиотека вызывается без параметров:
hashPassword("secret");
происходит автоматическая подстановка всех значений по умолчанию. Это включает:
Проверка пароля использует встроенную декодировку строки, извлекая параметры из самого хэша.
Несмотря на универсальность, стандартные параметры имеют ряд ограничений:
Эти ограничения компенсируются возможностью переопределения конфигурации на уровне приложения.
При верификации используется не глобальная конфигурация, а параметры, зашитые в строку хэша.
Это означает:
Таким образом, конфигурация по умолчанию влияет только на новые хэши, но не на процесс проверки уже существующих значений.
Основная цель дефолтной конфигурации — обеспечение одинакового результата при одинаковых входных данных в разных средах выполнения.
Для этого фиксируются:
Это позволяет использовать библиотеку в распределённых системах без риска рассинхронизации логики хэширования.