В криптографических хеш-функциях для паролей соль представляет собой случайную последовательность байтов, которая добавляется к исходному паролю перед хешированием. В библиотеке password-hash на JavaScript длина соли напрямую влияет на устойчивость хранимых хешей к атаке перебора и радужным таблицам.
Соль выполняет функцию уникализации результата хеширования даже при совпадающих паролях у разных пользователей. При одинаковом исходном значении пароля:
Внутренний процесс можно представить следующим образом:
hash = H(password + salt)
где salt генерируется случайно для каждой записи.
В библиотеке password-hash длина соли задаётся через параметр
saltLength. Он определяет количество байт, используемых для
генерации случайной соли перед вычислением хеша.
Пример конфигурации:
const passwordHash = require('password-hash');
const hash = passwordHash.generate('myStrongPassword', {
saltLength: 16
});
В этом случае будет создана соль длиной 16 байт, что обеспечивает значительно более высокий уровень энтропии по сравнению со стандартными значениями.
Увеличение длины соли приводит к экспоненциальному росту количества возможных комбинаций. Это напрямую влияет на сложность атак перебора.
Основные зависимости:
Энтропия соли рассчитывается как:
E = 2^(8 * saltLength)
При saltLength = 16:
E = 2^128 возможных значений
Это делает предсказание или предвычисление соли практически невозможным.
Увеличение длины соли незначительно влияет на производительность генерации хеша, поскольку основная нагрузка приходится на сам алгоритм хеширования. Однако:
Баланс между безопасностью и эффективностью обычно достигается в диапазоне 12–32 байт.
При отсутствии параметра saltLength библиотека
password-hash использует значение по умолчанию. Оно фиксировано и
рассчитано на типовой уровень защиты для большинства приложений.
Пример вызова без указания параметров:
const hash = passwordHash.generate('password123');
В этом случае соль генерируется автоматически, без возможности внешнего контроля её длины.
Использование короткой соли создаёт ряд уязвимостей:
Особенно критичным становится значение меньше 8 байт, поскольку пространство возможных значений становится перебираемым в разумные сроки при использовании современного оборудования.
Хотя увеличение длины соли повышает энтропию, чрезмерные значения создают побочные эффекты:
Практического прироста безопасности после определённого порога (обычно 32 байта) не наблюдается, поскольку основное ограничение переносится на стойкость самого хеш-алгоритма.
Библиотека password-hash включает соль внутрь итоговой строки хеша. Типичный формат выглядит следующим образом:
method$salt$hash
Длина соли не хранится отдельно, а кодируется внутри структуры строки. Это позволяет:
Рекомендованные диапазоны зависят от контекста применения:
Наиболее распространённые ошибки включают:
Такие подходы снижают общий уровень защиты и нарушают модель безопасности библиотеки.
Внутренний механизм генерации соли опирается на криптографически стойкий генератор случайных чисел. Процесс включает:
Соль не является секретным значением, однако её непредсказуемость критична для защиты системы.
Основные типы атак, на которые влияет saltLength:
Длина соли не заменяет выбор стойкого алгоритма хеширования, но усиливает его свойства за счёт увеличения энтропии входных данных.