Пароли·28 вопросов

Что такое соль и хэширование паролей с точки зрения разработчика?

Ответ

Хэширование паролей является фундаментальным требованием безопасности при проектировании любых веб-приложений и баз данных. Когда пользователь регистрируется в системе, приложение не должно сохранять его оригинальный пароль в открытом виде. Вместо этого используется односторонняя математическая функция, которая превращает текстовую строку в уникальный набор символов фиксированной длины. Этот процесс называется хэшированием, и обратить его в исходную строку теоретически невозможно.

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

В результате два разных пользователя, установивших одинаковый пароль, получат совершенно разные хэши в базе данных из-за уникальности соли. Для реализации этой защиты нельзя использовать обычные быстрые алгоритмы вроде MD5 или SHA-256, так как современные графические процессоры способны перебирать их миллиарды раз в секунду. Вместо них следует применять специализированные медленные функции формирования ключей и хэширования.

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

Правильная реализация хранения учетных данных выглядит следующим образом.

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

Другие вопросы этой темы

Связанные вопросы из других тем