Зачем паролю добавляют два разных секрета
Сервис обычно не хранит пароль в исходном виде. Вместо него в базе лежит результат специального вычисления — хеш, который трудно обратить обратно. Когда пользователь входит, система вычисляет хеш введённого пароля и сравнивает его с сохранённым.
Перед хешированием к паролю добавляют соль: случайное значение, обычно отдельное для каждой записи. Соль не обязана быть секретной, поэтому её хранят рядом с хешем. Она не позволяет злоумышленнику заранее подготовить одну таблицу популярных паролей и применить её ко всем пользователям: для каждой записи вычисления будут другими.
Перец — отдельный барьер
«Перец» — ещё одно секретное значение, которое система добавляет при вычислении хеша. В отличие от соли, оно может быть общим для многих записей и не хранится в самой базе. Его держат, например, в защищённой конфигурации приложения или отдельном хранилище секретов.
Если украдена только база, злоумышленник получает хеши и соли, но не перец. Из-за этого ему сложнее проверять догадки о паролях: для каждого предположения нужно выполнить вычисление с секретным значением, которого у него нет. Перец не делает слабый пароль сильным и не заменяет соль, но добавляет ещё одну преграду к массовому подбору.
Цена дополнительной защиты
Такое разделение работает, только пока перец действительно остаётся вне доступа вместе с базой. Если злоумышленник проник и на сервер приложения, где хранится секрет, он может получить и перец. А если перец утрачен, сервису может понадобиться сбросить пароли: старые хеши нельзя просто пересчитать без исходных паролей.
Поэтому перец — не волшебная защита, а компромисс: хранить и защищать приходится отдельный секрет, зато утечка одной лишь базы становится менее полезной для атакующего.





