Глоссарий
Что такое соль? «Приправа» на каждого пользователя, добавляемая к хешу пароля
Соль (salt) — это случайное значение для каждого пользователя, добавляемое перед хешированием пароля. Один и тот же пароль хранится по-разному у всех, что побеждает радужные таблицы и массовый перебор. Чем соль отличается от перца.
«Соль» всплывает, как только заходит речь о хешировании паролей. Как соль в готовке, добавление щепотки к хешу кардинально меняет картину безопасности. Вот как это работает и ключевые моменты (без шагов атаки).
Почему «приправа» работает
Без соли пользователи с одинаковым паролем получают одинаковый сохранённый хеш. Это даёт атакующему два сокращения: предвычисленная таблица поиска (радужная таблица) попадает напрямую, и «взлом одного аккаунта переиспользуется на всех с тем же паролем».
Добавьте соль — и тот же "password123" хранится как нечто совершенно иное для каждого пользователя.
Распространённые заблуждения против правды
Заблуждение
- Соль должна храниться в секрете
- Одна общая соль для всех пользователей — это нормально
- Соль делает безопасными даже слабые пароли
Правда
- Соль может быть публичной (храните её с хешем)
- Разное случайное значение на каждого пользователя (в идеале на каждый пароль)
- Соль защищает от «предвычисления и взлома повторов»; перебор обрабатывается медленным хешем
Мнение этого сайта: соль — это не перец
С солью часто путают перец: секретное значение, добавляемое повсеместно и хранимое где-то помимо базы данных (конфиг приложения или менеджер ключей). У соли (публичной, на каждого пользователя) и перца (секретного, глобального) разные задачи — ни одно не заменяет другое. На практике, впрочем, первый приоритет — просто правильно использовать соль + медленный хеш через bcrypt/Argon2.
Читать дальше
- Глоссарий: что такое хеширование паролей (понимайте это вместе с солью)
- Обучение: как безопасно хранить пароли (хеширование + соль на практике)
- Основы: правильное хранение паролей
FAQ
QДолжна ли соль храниться в секрете?
Нет. Соль — не «секретный ключ»; её нормально хранить рядом с хешем. Её цель — не секретность, а то, чтобы один и тот же пароль хранился по-разному у каждого пользователя, что побеждает предвычисление (радужные таблицы) и массовый взлом повторов. То, что держат в секрете, — это другое понятие, «перец» (см. ниже).
QМожно ли использовать одну и ту же соль для всех пользователей?
Нет. Соль должна быть случайным значением, разным для каждого пользователя (в идеале для каждого пароля). Общая соль приводит к тому, что у пользователей с одинаковым паролем хранятся идентичные хеши, поэтому атакующий может вскрыть много аккаунтов одним прогоном перебора. Генерируйте свежую криптографическим ГПСЧ каждый раз.
QНужно ли реализовывать соль самому?
Обычно нет. Специально созданные хеши вроде bcrypt, Argon2 и scrypt генерируют и хранят соль за вас (часто встроенную в строку хеша). Вместо того чтобы добавлять соль вручную, опирайтесь на эти стандартные реализации — это безопаснее и надёжнее.