Зачем паролю добавляют случайные данные

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

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

Как соль мешает массовому подбору

Без соли злоумышленник может заранее вычислить хеши для множества распространенных паролей и сверять их с украденной базой. Если один и тот же пароль использовали несколько человек, одинаковые хеши также сразу выдадут это совпадение.

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

Соль — часть защиты, а не замена надежному паролю

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

Иными словами, соль не делает слабый пароль сильным. Она не дает украденной базе превратиться в удобный каталог, где одинаковые пароли легко распознаются, а готовые вычисления можно применить сразу ко всем пользователям.