Skip to main content

Соль (salt)

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

Не секрет, не ключ, не токен. Это просто случайные байты, хранящиеся рядом с хэшем пароля.


Зачем нужна соль

1. Защита от одинаковых хэшей

Без соли:

  • Пользователь user1 с паролем qwerty
  • Пользователь user2 с тем же паролем qwerty

→ у обоих хэш будет одинаковым!

Хакер по хэшу узнаёт, что у этих двух пользователей один и тот же пароль. Плохо.

С солью:

password = 'qwerty'
salt = 'X7#wZ'
hash = hash_fn('qwertyX7#wZ')

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


2. Устойчивость к rainbow tables

Rainbow table — это заранее посчитанные хэши популярных паролей.

Пример:

ПарольMD5 хэш
123456e10adc3949ba59abbe56e057
qwertyd8578edf8458ce06fbc5bb76

Если твой пароль в этой таблице — ты скомпрометирован.

Соль делает эту таблицу бесполезной: хэш считается от пароль + соль, а не от чистого пароля.


Где соль хранится

Обычно — прямо в базе рядом с хэшем:

usersaltpassword_hash
anna4f8@Kxhash('mypassword4f8@Kx')

Когда и как она используется

Регистрация

  1. Пользователь вводит пароль.
  2. Генерируется соль.
  3. Считается хэш от пароль + соль.
  4. Хэш и соль сохраняются.

Логин

  1. Пользователь вводит пароль.
  2. Сервер находит его соль.
  3. Считается hash(пароль + соль) — сравнивается с сохранённым хэшем.

Почему одной соли недостаточно

Поэтому дополнительно применяют:

  • pepper — секрет, который не хранится в базе, а в коде/переменной окружения;
  • специальные функции хэширования: bcrypt, scrypt, argon2 — они медленные и устойчивые к брутфорсу.

Вывод

ТерминОписание
Соль (salt)случайная строка для уникализации хэша пароля
Защищает отбрутфорса, rainbow tables, сравнения хэшей
Хранитсявместе с хэшем в БД
Используется вbcrypt, argon2, scrypt, PBKDF2 и других схемах