Что такое хеширование — почему сайт не знает твой пароль

Забыл пароль — жмёшь «восстановить», и сайт присылает ссылку сбросить его, а не сам старый пароль. Не потому что так вежливее. А потому что сайт твой пароль не знает — и никогда не знал. Он хранит не сам пароль, а его отпечаток.
Этот отпечаток и делает хеширование. И у него хитрое свойство: превратить пароль в отпечаток легко, а отпечаток обратно в пароль — практически невозможно. Через пару минут ты будешь понимать, почему это защищает тебя, даже если базу сайта украдут.
Что такое хеширование простыми словами
Хеш-функция — это «мясорубка» для данных. Кидаешь на вход что угодно: слово, пароль, целый файл. На выходе — строка фиксированной длины, вроде a3f9c2.... Это и есть хеш, отпечаток.
У неё три свойства, которые всё объясняют:
- Одинаковый вход — одинаковый выход, всегда. Хешируешь
qwertyсегодня и через год — получишь ровно тот же отпечаток. - Крошечное изменение всё меняет. Поменял одну букву — и отпечаток становится совершенно другим, ни капли не похожим. Половинчатого сходства не бывает.
- В обратную сторону — никак. По отпечатку нельзя восстановить исходные данные. Мясорубку не крутят назад.
Аналогия: отпечаток пальца. По пальцу легко снять отпечаток. А по отпечатку человека не «собрать». При этом сравнить два отпечатка и понять, один ли это палец, — легко. Ровно так работает хеш.
Почему сайт не хранит твой пароль
Теперь главное. Когда ты регистрируешься, сайт не записывает myPassword123 в базу. Он прогоняет его через хеш-функцию и хранит только отпечаток.
При входе происходит то же самое: ты вводишь пароль, сайт хеширует его заново и сравнивает два отпечатка. Совпали — пускает. Сам пароль при этом на сервере так и не появился в открытом виде.
Зачем такая морока? Ради тебя. Базы данных иногда утекают. Если бы там лежали пароли в открытую — злоумышленник получил бы их все разом. А получив только отпечатки, он упирается в стену: обратно в пароли их не превратить.
Есть нюанс — соль (salt). К каждому паролю перед хешированием добавляют случайную приписку, свою у каждого пользователя. Тогда даже два одинаковых пароля дадут разные отпечатки, и заранее посчитанные таблицы отпечатков не сработают. Поэтому пароли хешируют не любой функцией, а специальными, «медленными» (bcrypt, argon2) — их нарочно сделали тяжёлыми, чтобы перебор был невыгоден. Если пишешь вход сам — не изобретай хеширование руками, бери готовый сервис авторизации, он всё это уже делает правильно.
Хеширование ≠ шифрование
Их постоянно путают, а разница простая — в обратимости.
- Шифрование двустороннее. Зашифровал данные ключом — и тем же (или парным) ключом можешь расшифровать обратно. Так работает HTTPS: данные едут в защищённом виде, но на другом конце их разворачивают в исходные. Цель шифрования — скрыть, но потом прочитать.
- Хеширование одностороннее. Обратно ходу нет — по замыслу. Цель хеша — сверить, не раскрывая. Именно поэтому пароли хешируют, а не шифруют: расшифровать их не должен уметь никто, даже сам сайт.
Хеши ты встречаешь и там, где паролями не пахнет. У каждого коммита в Git есть длинный ID вроде 8419b4b3 — это хеш его содержимого; поменяется хоть байт — сменится и ID. Сайты дают хеш файла (контрольную сумму), чтобы ты проверил, что скачал именно его, без подмены. Один и тот же приём — уникальный отпечаток — работает и для паролей, и для проверки целостности.
Частые вопросы
Хеш можно расшифровать?
Нет — «расшифровать» хеш нельзя, потому что там нечего расшифровывать: обратной операции не существует. Что реально делают злоумышленники — перебор: хешируют миллионы вариантов и ищут совпадение. От этого и защищают соль и «медленные» хеш-функции — они делают перебор слишком долгим и дорогим, чтобы окупиться.
Почему нельзя вернуть мне старый пароль, только сбросить?
Потому что сайт его физически не хранит — только отпечаток, а по отпечатку пароль не восстановить. Единственный вариант — дать тебе задать новый. Кстати, это удобный признак: если сервис присылает тебе старый пароль в открытом виде — он хранит пароли небезопасно, и это тревожный сигнал.
Два разных пароля могут дать одинаковый хеш?
Теоретически да — это называется коллизией, ведь отпечаток короче исходных данных. Но у хороших хеш-функций шанс наткнуться на коллизию настолько мал, что на практике им можно пренебречь. Поэтому совпадение отпечатков и считают надёжным доказательством, что совпал и вход.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





