Технологии
Хеширование пароля: почему SHA-256 недостаточно

Хеширование паролей в базе сервиса требует медленной функции с солью: bcrypt или argon2. SHA-256 считает отпечаток за доли миллисекунды, поэтому видеокарта перебирает миллиарды вариантов в секунду. Одинаковые пароли без соли дают один хеш: готовые таблицы закрывают словарные строки. Страница хеш текста на Тулси считает SHA-256 и SHA-512 для сверки строки и учебного примера. Боевой пароль туда не вставляйте. Результат из вкладки в базу как «защиту» не копируйте. Свою сторону закройте длинной уникальной строкой. Откройте генератор паролей: выставьте 16 и больше символов, скопируйте, сохраните в менеджере. Ниже: скорость SHA-256, устройство bcrypt и argon2, разница учебного хеша и хранения, действия пользователя и разработчика, десять частых вопросов. Про длину: сколько символов нужно в пароле.
Почему SHA-256 слабо держит пароль
SHA-256 делает из любых байтов короткий отпечаток фиксированной длины. Одинаковый ввод даёт одинаковый результат. Из отпечатка исходник алгоритмом не собирают. Для сверки файла или конфига этого хватает: вы сравниваете две hex-строки и видите, совпало содержимое или нет. Практика такого отпечатка разобрана в статье SHA-256: зачем считать хеш.
После утечки атакующий держит таблицу хешей. Ему нужна исходная строка, которая даёт тот же отпечаток. Он берёт словари утёкших паролей, клавиатурные дорожки, имена и даты, затем гоняет их через ту же функцию. Быстрая функция даёт больше попыток за секунду.
SHA-256 проектировали как быстрый отпечаток. Видеокарта считает миллиарды таких хешей в секунду. Восемь знаков из словаря с одной цифрой на конце перебор закрывает за короткое время. Длинная случайная строка держится дольше, но сервис выбирает функцию, которая тормозит каждую попытку: для пароля скорость работает против вас.
Скорость перебора
Программы перебора заточены под быстрые функции. SHA-256, SHA-1 и MD5 дают огромный поток попыток на одной видеокарте. Атакующий кормит словарь и шаблоны в конвейер и ждёт совпадения с украденным хешем.
Медленная функция режет этот поток на порядки. bcrypt и argon2 считают одну попытку дольше. Тот же словарь, который на SHA-256 заканчивается за минуты, на bcrypt растягивается на годы при разумной стоимости. Задержка в десятки миллисекунд при входе для человека незаметна. Перебор из миллиардов попыток её чувствует.
Сырой SHA-256 пароля без растяжения и без соли даёт атакующему самый удобный режим. Даже SHA-256 внутри PBKDF2 с малым числом итераций слабее функции, которая ест много памяти на одну попытку. Если пишете сервис, берите готовую библиотеку bcrypt или argon2id.
Одинаковый пароль, одинаковый отпечаток
Без соли два пользователя с паролем Moscow2024 получают один хеш. Атакующий считает SHA-256 этой строки один раз и отмечает все совпадения в таблице. Готовые радужные таблицы для быстрых функций уже содержат миллионы бытовых паролей. Утечка тогда раскрывает пачку аккаунтов одной подстановкой.
Случайная соль на каждую запись лишает атакующего этой экономии. К каждому паролю система добавляет случайный кусок, уникальный для учётки. Система считает хеш от соли и пароля вместе. Соседи с тем же паролем получают разные отпечатки. Таблицу под один хеш на всех заранее не собрать: для каждой соли нужен свой перебор.
SHA-256 сам по себе соль не добавляет. Вы можете прикрутить её вручную и всё равно останетесь с быстрой функцией. Соль закрывает готовые таблицы, стоимость расчёта закрывает поток попыток: для пароля нужны оба свойства.
Алгоритм хеширования паролей: bcrypt и argon2
Для хранения пароля берут функции, которые считают медленно и умеют соль. Два рабочих имени: bcrypt и argon2. Оба считают отпечаток так, чтобы проверка при входе занимала десятки миллисекунд, а перебор словаря упирался в стену. Оба кладут соль внутрь результата, чтобы вы не хранили её отдельным полем «на салфетке».
bcrypt давно стоит в библиотеках языков и каркасах приложений. У него есть потолок длины пароля около 72 байт: более длинную строку он обрезает. Для пароля из генератора на 16–24 символа это не мешает. Стоимость задают фактором: выше число, дольше одна проверка. Раз в несколько лет фактор поднимают, потому что железо дешевеет.
argon2 победил конкурс алгоритмов хеширования паролей в 2015 году. Вариант argon2id сочетает устойчивость к утечке памяти и к параллельному перебору на видеокартах. Вы задаёте время, память и число потоков. Память здесь главное оружие: видеокарта плохо тянет функции, которые едят мегабайты на одну попытку. Для нового сервиса argon2id берут первым.
Готовую библиотеку языка берите вместо самодельной обёртки над SHA-256. Библиотека сама генерирует соль, кодирует параметры в строку вида $argon2id$... или $2b$... и сравнивает хеш при входе без вашей ручной склейки. Ошибка в склейке соли или в кодировке байтов даёт дыру, которую снаружи не видно до утечки.
Соль в записи пароля
Соль это случайные байты, разные для каждой учётки. Система хранит их вместе с хешем. При входе она берёт соль этой записи, считает функцию от введённого пароля и сравнивает с сохранённым отпечатком. Соль не секрет в том же смысле, что пароль: её цель развести одинаковые пароли по разным хешам.
Короткая соль или одна соль на весь сервис почти ничего не даёт. Атакующий тогда снова считает словарь один раз. Длина соли в bcrypt и argon2 уже заложена в формат. Вам не нужно изобретать генератор случайных байтов, если вы вызываете штатную функцию библиотеки.
Соль не заменяет длину пароля. Словарное слово с солью всё равно перебирается, только по одной записи, не пачкой. Пользователь закрывает эту щель уникальной длинной строкой, сервис закрывает её медленной функцией.
Стоимость расчёта
Стоимость это параметр «насколько тяжело посчитать один хеш». В bcrypt это логарифмический фактор. В argon2 это время, память и потоки. При регистрации и входе пользователь ждёт доли секунды. При переборе атакующий умножает эту долю на размер словаря.
Железо ускоряется. Фактор, который в 2012 году казался тяжёлым, в 2026 проходит быстрее. Поэтому стоимость поднимают при обновлении сервиса, а старые хеши пересчитывают в момент следующего входа. SHA-256 без параметра стоимости остаётся на скорости текущего железа, а видеокарты дешевеют.
argon2 задаёт расход памяти и этим режет фермы видеокарт. SHA-256 ест мало памяти, поэтому его хорошо параллелят. Для нового кода берите argon2id. Рабочий bcrypt с актуальным фактором можно оставить. Сырой SHA-256 из старой базы пересчитайте при следующем входе.
Учебный хеш текста и хранение пароля
Страница хеш текста считает SHA-256 и SHA-512 в браузере на вашем устройстве. Вставили строку, получили две hex-строки, скопировали. Так сверяют фрагмент из тикета, учебный пример и контрольную сумму текста. Регистрация не нужна. Данные поля на сервер Тулси не уходят: считает устройство.
Этот цикл не заменяет хранение паролей. Вы получили быстрый отпечаток без соли и без стоимости. Если вставить туда пароль от почты, вы светите секрет во вкладке и получаете SHA-256, который атакующий переберёт теми же словарями. Копировать hex в свою базу «чтобы не хранить открытый текст» значит хранить слабый хеш.
Боевой пароль в поле хеша не вставляйте. Для учёбы берите выдуманную фразу вроде demo-string-42. Для сверки файла берите тот фрагмент, который нужно зафиксировать. Секреты учёток, токены и ключи доступа в разовые вкладки не кладут, даже если расчёт локальный. Привычка важнее конкретного сайта.
Инструмент делает отпечаток текста. Задачу «положить пароль в базу так, чтобы утечка не выдала строки» закрывает библиотека на сервере. Путать эти две кнопки опасно: обе называются «хеш», а свойства функций расходятся.
Что сделать со своей стороны
Вам как пользователю не нужно хешировать свой пароль перед регистрацией. Сайт при входе сам считает bcrypt или argon2 от введённой строки. Ваша работа: дать ему длинную уникальную строку и не повторять её на других сайтах. Хеш на стороне сервиса закрывает утечку таблицы. Длина и уникальность закрывают словари и подстановку украденного пароля на почту.
Соберите пароль в генераторе паролей на Тулси. Выставьте длину 16 и больше, включите буквы, цифры и знаки, если форма сайта их принимает. Строка создаётся на устройстве и на сервер не уходит. Скопируйте результат в менеджер паролей, затем в форму регистрации. Ориентир по числу знаков: сколько символов нужно в пароле.
Один пароль на все сайты ломает схему даже при идеальном хеше у одного сервиса. Если утекла мелкая витрина с сырым SHA-256 или с открытым текстом, строку пробуют на почте и банке. Уникальная строка на каждую учётку режет эту цепочку. Менеджер паролей держит набор, вам не нужно помнить 40 комбинаций.
Второй фактор на почте и в кабинетах с деньгами закрывает вход, если строку всё же украли с другого конца. Хеш на сервере, длина пароля и код из приложения работают вместе. Выкидывать длину «потому что есть bcrypt» нельзя: словарный пароль перебирают и на медленной функции, только дольше.
Длина и уникальность
Восемь знаков из словаря с заглавной и восклицательным знаком в конце остаются слабыми. Перебор и словари читают такие шаблоны первыми. Шестнадцать случайных символов из широкого набора умножают число вариантов до уровня, где даже быстрый SHA-256 на вашей личной строке уже не помогает атакующему за разумное время. Сервис всё равно должен хранить медленный хеш: вы не контролируете, какую функцию он выбрал.
Повтор одной строки на десяти сайтах превращает одну утечку в десять входов: Qwerty!23 проверят везде. Генератор каждый раз даёт новую строку. Сохраняйте её в менеджере. Заметка в мессенджере и письмо себе оставляют секрет в переписке.
Сайты иногда режут длину или запрещают знаки. Тогда компенсируйте запрет длиной из латиницы и цифр: 20–24 крепче восьми с одним !. Если форма принимает только 8–12 знаков, это ограничение сервиса. Свою строку всё равно сделайте случайной и уникальной, второй фактор включите.
Куда не вставлять боевой пароль
Страницы «проверить надёжность пароля» и «посчитать хеш пароля» в чужом браузерном окне получают вашу строку. Даже при обещании «считаем у вас» вы не аудируете код вкладки. Для оценки слабости смотрите длину, словарь и повторы без ввода боевого секрета. Разбор признаков: проверка пароля на надёжность.
Поле хеша текста на Тулси для учебных строк и сверки. Пароль от почты туда не относится. Генератор создаёт новую строку, которую вы ещё нигде не использовали: её копируют в менеджер и в форму. Разница в направлении: генератор выдаёт секрет, поле хеша принимает текст, который вы уже знаете.
Переписка, тикет и общий документ тоже плохие места для боевого пароля. Если нужно передать доступ коллеге, используйте менеджер с общим доступом или разовый канал, который сервис сам предусмотрел. Хеш SHA-256 в чате для входа бесполезен. Словарную строку по такому отпечатку всё равно считают.
Если вы пишете сервис
Храните пароль только как результат bcrypt или argon2id из библиотеки языка. Сравнение при входе делайте штатной функцией библиотеки, не ручным == двух строк, если библиотека даёт безопасное сравнение. Соль и параметры стоимости пусть пишет сама библиотека в сохранённую запись.
Сырой SHA-256, SHA-512, SHA-1 и MD5 от пароля в новую базу не кладите. Старый SHA-256 из прежней схемы пересчитайте в момент входа: проверили старый хеш, записали argon2id, удалили старый. Пользователя можно попросить сменить пароль. Тихая миграция на следующем входе закрывает дыру быстрее.
Хеш в браузере перед отправкой на сервер не делает хранение безопасным. Клиент посчитал SHA-256 и прислал hex. Сервер сохранил hex как «пароль». Утечка таблицы даёт строки, которые атакующий подставляет в форму: для сервера этот hex и есть секрет. Если сервер хеширует присланное ещё раз быстрым SHA-256, вы остаётесь на быстрой функции. Задачу закрывает счёт медленной функцией на сервере. Вкладка с SHA-256 этот шаг имитирует.
Не логируйте пароль, не пишите его в тикет поддержки, не кладите в аналитику. Ошибка «захешировали SHA-256 и всё равно светим строку в журнале» встречается часто. Журнал входа хранит факт успеха или отказа, не секрет.
Хеширование пароля онлайн: почему вкладка не замена
Запрос «хеширование пароля онлайн» часто ведёт к страницам, которые считают MD5 или SHA-256 от вставленной строки. Это учебный калькулятор отпечатка. К хранению паролей в сервисе он не относится. Результат из такой вкладки в базу класть нельзя: нет соли, нет стоимости, строка уже побывала в чужом поле.
Тулси разделяет две кнопки. Хеш текста даёт SHA-256 и SHA-512 для сверки. Генератор паролей выдаёт новую случайную строку. Ни одна из них не обещает «захешировать пароль для вашей базы». Если вы разрабатываете сервис, библиотека bcrypt или argon2id живёт в коде сервера.
Для разовой учёбы откройте хеш текста с выдуманной фразой и посмотрите, как меняется отпечаток от одной буквы. Для своей почты и кабинетов откройте генератор и менеджер. Одно слово «хеш» в поиске склеивает эти действия, на практике их разводят.
Внешние «декодеры хеша пароля» обещают вернуть исходник из MD5 или SHA-256. Они ищут короткие словарные строки в заранее посчитанных таблицах. Вашу случайную строку из 16 знаков они не вернут. Словарный пароль вернут: он слабый. Закройте это генерацией новой строки.
Частые вопросы
Что такое хеширование паролей?
Это превращение пароля в отпечаток, который кладут в базу вместо открытой строки. При входе система считает ту же функцию от введённого текста и сравнивает с сохранённым значением. Из отпечатка исходник не читают, если функция и параметры выбраны для паролей: bcrypt или argon2 с солью. Быстрый SHA-256 без соли эту задачу закрывает плохо: перебор словаря идёт быстро.
Какой алгоритм хеширования паролей выбрать?
Для нового кода берите argon2id из библиотеки языка. bcrypt остаётся рабочим вариантом, если он уже стоит в каркасе приложения и фактор стоимости актуальный. Сырой SHA-256, SHA-512, SHA-1 и MD5 для хранения пароля не выбирайте. Параметры стоимости поднимайте по мере ускорения железа. Пользователю выбирать алгоритм не нужно: это решение сервиса.
Можно ли делать хеширование пароля онлайн?
Считать учебный SHA-256 от выдуманной строки во вкладке можно. Класть этот результат в базу как защиту пароля нельзя: нет соли и нет стоимости. Боевой пароль в такие поля не вставляйте. На Тулси учебный отпечаток даёт хеш текста, новую строку для входа даёт генератор паролей. Хранение в сервисе делает библиотека на сервере.
Почему SHA-256 недостаточно для пароля?
Функция считает отпечаток за доли миллисекунды. Видеокарта перебирает миллиарды вариантов в секунду. Без соли одинаковые пароли дают один хеш, и готовые таблицы закрывают словарные строки пачкой. Для сверки файла скорость полезна. Для хранения пароля нужна медленная функция с солью. SHA-256 оставляйте для целостности текста, см. зачем считать хеш.
Чем bcrypt отличается от SHA-256?
bcrypt считает одну попытку десятки миллисекунд и встраивает соль в результат. SHA-256 считает ту же строку за доли миллисекунды и соли сам не добавляет. Перебор словаря на bcrypt растягивается. Оба делают отпечаток без обратного хода. Для пароля нужна ещё устойчивость к перебору: её даёт стоимость bcrypt. Длина hex-строки SHA-256 эту устойчивость не даёт.
Что такое соль в хеше пароля?
Соль это случайные байты, уникальные для каждой записи. Хеш считают от сочетания соли и пароля, соль хранят рядом с отпечатком. Два пользователя с одним паролем получают разные хеши. Готовую таблицу под весь сервис заранее не собрать. Соль убирает оптовый перебор одинаковых строк. Длину пароля и медленную функцию задаёте отдельно.
Нужно ли хешировать пароль перед отправкой на сайт?
Нет. Форма входа принимает пароль, сервер сам считает bcrypt или argon2. Если вы пришлёте SHA-256 вместо пароля, для сервера этот хеш станет секретом: утечка таблицы снова выдаёт строки для входа. Клиентский хеш без медленной функции на сервере задачу хранения не закрывает. Закройте свою сторону длинной уникальной строкой из генератора.
Где хранить пароль пользователю?
В менеджере паролей. Генератор на Тулси создаёт строку на устройстве, вы копируете её в хранилище и в форму сайта. Браузерный менеджер или отдельная программа подходят, если включена синхронизация под вашим аккаунтом с мастер-паролем. Заметки мессенджера, письмо себе и общий документ оставляют секрет в переписке. Про длину: сколько символов нужно в пароле.
Подойдёт ли MD5 для паролей?
Нет. MD5 ещё быстрее SHA-256, коллизии у него известны давно, для паролей его перестали брать много лет назад. Словарные строки из утечек с MD5 разбирают готовыми таблицами. Если в старой базе видите MD5, мигрируйте на argon2id или bcrypt при следующем входе. Для сверки файла MD5 тоже уже слабое место: берите SHA-256.
Как понять, что сервис хранит пароли правильно?
Снаружи это почти не видно. Косвенные признаки: сервис предлагает сброс по ссылке и не показывает пароль открытым текстом в кабинете или в письме. Утечки с пометкой «пароли в открытом виде» или «SHA-1/MD5 без соли» говорят о плохом хранении. Свою сторону вы закрываете уникальной длинной строкой и вторым фактором, даже если сервис ошибся.
Рядом по теме: SHA-256: зачем считать хеш текста и сколько символов нужно в пароле. Новую строку соберите в генераторе паролей. Учебный отпечаток текста считает хеш текста.
Сгенерируйте уникальный пароль
Выберите длину и наборы символов. Строка создаётся на устройстве и никуда не уходит.


