Пароль никогда не следует хранить в базе данных как есть. Так как же его хранить? Ответ — хеширование. Вот как оно работает и ключевые моменты для безопасного применения (без шагов атаки).
Хеширование ≠ шифрование
Их путают, но цели противоположны. Шифрование — «обратимо с ключом, чтобы прочитать позже». Хеширование — «одностороннее, обратить нельзя». Пароль — это информация, которую даже оператору не нужно читать обратно, поэтому намеренно необратимый хеш — правильный выбор.
Шифрование (обратимое)
открытый текст ⇄ шифртекст. ключ обращает. для данных, которые читают обратно
Хеширование (одностороннее)
пароль → хеш. обратить нельзя. для хранения паролей
При входе вы проверяете: «захешировать введённый пароль тем же способом и посмотреть, совпадает ли он с сохранённым хешем.» Восстанавливать оригинал вам никогда не нужно.
Почему «чистых MD5/SHA-256» недостаточно
MD5 и SHA-256 — быстрые хеши. В других местах это полезное свойство, но слабость для хранения паролей: атакующий может вычислять огромное число вариантов в секунду против утёкшего хеша.
- Радужные таблицы: гигантская предвычисленная таблица «распространённый пароль → его хеш». С чистым хешем совпадение находится простым поиском.
- Перебор: чем быстрее хеш, тем больше вариантов за единицу времени — то есть тем легче взломать.
Хеши общего назначения и хеши для паролей
И те и другие называются «хешами», но созданы для разных задач. В хранении паролей место только правому столбцу.
| Хеш общего назначения (MD5, SHA-1, SHA-256) | Хеш для паролей (Argon2id, bcrypt, scrypt, PBKDF2) | |
|---|---|---|
| Для чего создан | Обнаружение подмены файлов, подписи и т. п. | Хранение паролей |
| Скорость | Как можно быстрее | Намеренно медленный (настраивается) |
| Соль | Не предусмотрена конструкцией | Предусмотрена конструкцией (PBKDF2 получает её от вызывающего кода) |
| Настройка стоимости | Невозможна | Стоимость, число итераций или память; со временем повышается |
| Для хранения паролей | Не использовать | Использовать |
NIST SP 800-63B-4 также требует хранить пароли с помощью схемы хеширования паролей, которая принимает на вход соль и фактор стоимости; стоимость должна быть настолько высокой, насколько это практично без ущерба для производительности, и со временем повышаться.
Две защитные меры
Добавьте соль (разное значение для каждого пользователя)
Перед хешированием подмешайте случайное значение, разное для каждого пользователя (соль). Теперь один и тот же пароль хранится по-разному у всех, что побеждает радужные таблицы и не даёт одному прогону взлома охватить повторно используемые пароли между аккаунтами.
Используйте намеренно медленный, специально созданный хеш
bcrypt / Argon2 / scrypt позволяют сделать вычисление намеренно дорогим (параметр стоимости). Замедление, незаметное для одного легитимного входа, снижает перебор атакующего до непрактичной скорости. Соль встроена и в них.
Реальные случаи: когда в уведомлении об утечке написано «захешированы»
В объявлениях об утечках иногда указывают, хранились ли пароли в открытом виде, в виде хешей или в зашифрованном виде. Вот случаи, разобранные на этом сайте, по способу хранения.
| Случай | Что сообщено о паролях | Что это значит для пользователей |
|---|---|---|
| Takufile-bin (2019) | Хранились в открытом виде | Читаются как есть. Под угрозой и другие сервисы с тем же паролем |
| Sakura Internet (2026) (на английском) | Часть начальных паролей не была захеширована | Тем, кто до сих пор использует начальный пароль, нужно сменить его сейчас |
| Gyazo (2026) (на английском) | Утекли хеши паролей; способ не раскрыт | В зависимости от способа могут быть обратимы. Компания попросила пользователей сменить пароли |
Две вещи, которые стоит помнить при чтении уведомления:
- Одно слово «захешированы» не говорит, безопасно ли это. Чистый MD5 и медленный хеш с солью колоссально различаются по тому, насколько легко восстановить пароли
- Если способ не указан, действуйте так, как будто он был слабым. Смените пароль в этом сервисе и во всех других, где используете тот же
Проверить, встречается ли ваш адрес почты в прошлых утечках, можно по статье как проверить, не утёк ли пароль.
Как проверить свой сайт и аккаунты
Как пользователь: посмотрите, как работает сброс пароля
Если по запросу «забыли пароль» вам присылают по почте исходный пароль, сервис с большой вероятностью хранит его в открытом виде или в обратимой форме. Не используйте там пароль, который используете где-либо ещё.
Как пользователь: проверьте надёжность пароля
Хеширование лучше всего защищает длинные, трудно угадываемые пароли. Оцените примерную надёжность с помощью проверки надёжности пароля, а хранение доверьте менеджеру паролей.
Как разработчик: проверьте, какая функция хранит пароли
Найдите функции, которыми ваш код сохраняет и проверяет пароли. password_hash() в PHP, встроенная аутентификация Django или библиотека bcrypt/Argon2 предназначены для паролей и закрывают основы. Любой прямой вызов md5(), sha1() или sha256 — кандидат на миграцию.
Как разработчик: проверьте сохранённые значения и настройки
Как распознать сохранённые хеши, минимальные настройки OWASP и как уйти от слабых алгоритмов, разобрано в статье как безопасно хранить пароли.
Мнение этого сайта: не собирайте это сами
Считать, что «MD5 плюс соль достаточно», — распространённая ошибка. Безопасное хранение паролей зависит ещё и от генерации и хранения соли, настройки стоимости и обработки временных различий. Вместо того чтобы собирать это самому, опирайтесь на официальную функцию паролей вашего языка/фреймворка (большинство под капотом используют bcrypt/Argon2). Для новых систем сделайте Argon2id первым выбором.
Источники (первичные)
- NIST, «SP 800-63B-4 Digital Identity Guidelines: Authentication and Authenticator Management» (август 2025) — pages.nist.gov (схемы хеширования с солью и фактором стоимости; повышение стоимости со временем)
- OWASP, «Password Storage Cheat Sheet» — cheatsheetseries.owasp.org (хеширование и шифрование, рекомендуемые алгоритмы, фактор работы)
- RFC 9106, «Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications» — rfc-editor.org
- Источники по каждому случаю (объявления самих компаний) приведены в связанных статьях этого сайта
Читать дальше
- Глоссарий: что такое соль (случайное значение для каждого пользователя, побеждающее атаки на повтор)
- Обучение: как безопасно хранить пароли (хеширование + соль на практике)
- Основы: правильное хранение паролей (хватит открытого текста) / выбор менеджера паролей
- Кейс: утечка данных Takufile-bin (2019) (хранение паролей в открытом виде на практике)