Соль (salt)

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

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

Как применяется

Для каждой записи генерируют новую соль через CSPRNG и передают её вместе с паролем в Argon2id, scrypt, bcrypt или другую подходящую парольную функцию. Соль не обязана быть секретной и хранится рядом с хешем и параметрами алгоритма.

Пример применения

У двух пользователей одинаковый пароль, но сервис создаёт разные 128-битные соли. Их Argon2id-хеши различаются; при входе система берёт соль конкретной записи и повторяет вычисление с сохранёнными параметрами.

Не путать с

  • Pepperpepper — общий секрет, который хранят отдельно от базы.
  • Соль уникальна для каждой записи и неСоль уникальна для каждой записи и не является секретом

Как это работает

  1. Создать сольПри установке пароля генерируют независимое случайное значение достаточной длины.
  2. Вычислить хешПароль и соль передают парольной функции с настроенными затратами памяти и времени.
  3. Сохранить параметрыВ базе хранят соль, результат, алгоритм и стоимость, но не открытый пароль.
  4. Проверить парольПри входе повторяют вычисление для конкретной записи и сравнивают результат безопасным способом.

Частые вопросы

Нужно ли шифровать соль?

Обычно нет: её задача — уникальность, а не секретность. Защищать нужно всю базу и, если используется, отдельный pepper.

Можно ли использовать логин как соль?

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

Соль защищает слабый пароль от перебора?

Она мешает массовым предвычислениям, но не заменяет ресурсоёмкую парольную функцию, сильный пароль и ограничение атак.

Соль — случайное или уникальное значение, добавляемое к паролю перед хешированием для защиты от предвычисленных таблиц.