Хеширование: что это, хеш-функция и алгоритмы
Проверено экспертной редакцией SecRadar · по первоисточникам ФСТЭК / ФСБ / Банка России
Хеширование — это одностороннее преобразование данных в строку фиксированной длины с помощью алгоритма, который называется хеш-функцией. Материал разбирает, чем хеширование отличается от шифрования и кодирования, какие алгоритмы устарели (MD5, SHA-1), а какие остаются стандартом (SHA-2, SHA-3, российский ГОСТ Р 34.11-2012 «Стрибог»), почему для паролей нужны отдельные медленные функции — bcrypt, scrypt, Argon2, PBKDF2 — и где хеширование применяется на практике: от контроля целостности файлов до электронной подписи и индикаторов компрометации.
Кратко
- Что это
- Одностороннее преобразование данных произвольного объёма в строку фиксированной длины (хеш) с помощью хеш-функции.
- Ключевое свойство
- Необратимость — по хешу нельзя восстановить исходные данные, только сверить их между собой.
- Устаревшие алгоритмы
- MD5 и SHA-1 — для обоих продемонстрированы практические коллизии, для задач безопасности не использовать.
- Текущий стандарт
- SHA-256/SHA-512 (SHA-2) и SHA-3; в РФ для гостребований — ГОСТ Р 34.11-2012 «Стрибог».
- Пароли
- Нужны специализированные медленные функции с солью — bcrypt, scrypt, Argon2, PBKDF2, — обычный быстрый SHA не подходит.
- Где применяется
- Контроль целостности файлов, электронная подпись, блокчейн, дедупликация, индикаторы компрометации, HMAC.
Что такое хеширование и хеш-функция
Хеширование — это одностороннее преобразование данных произвольного объёма в строку фиксированной длины с помощью алгоритма, который называется хеш-функцией. Результат — хеш, или дайджест, — детерминирован, воспроизводим и практически необратим: по хешу нельзя восстановить исходные данные, можно только сверить, совпадают ли они с уже известным значением.
Криптографическая хеш-функция строится на нескольких свойствах, без которых она непригодна для задач безопасности:
- Детерминированность. Один и тот же вход всегда даёт один и тот же хеш — иначе сверка данных по хешу теряет смысл.
- Лавинный эффект. Минимальное изменение входных данных — даже один бит — приводит к полностью другому, непредсказуемо отличающемуся хешу.
- Необратимость (односторонность). По значению хеша вычислительно невозможно восстановить исходные данные — в отличие от шифрования, обратный ход намеренно не предусмотрен.
- Стойкость к коллизиям. Крайне сложно найти два разных набора данных, которые дают одинаковый хеш; для устаревших алгоритмов эта стойкость нарушена на практике.
Три термина часто путают, хотя они решают разные задачи. Шифрование обратимо: зашифрованные данные превращаются обратно в исходные при наличии правильного ключа. Кодирование, например Base64, вообще не про безопасность — это просто способ представить данные в другом формате, и оно тоже обратимо без всякого ключа. Хеширование обратного хода не имеет по конструкции: оно не хранит данные, а лишь формирует их проверяемый отпечаток.
Алгоритмы хеширования: MD5, SHA, ГОСТ Стрибог
Основные алгоритмы хеширования делятся на устаревшие и криптографически стойкие: MD5 и SHA-1 больше не считаются безопасными из-за продемонстрированных коллизий, современный стандарт — семейство SHA-2 и SHA-3, а для российской криптографии обязателен отечественный ГОСТ Р 34.11-2012 «Стрибог». Выбор конкретного алгоритма зависит от задачи и от того, какая регуляторика на неё распространяется.
↔ таблицу можно прокрутить вбок
| Алгоритм | Длина хеша | Статус | Где уместен |
|---|---|---|---|
| MD5 | 128 бит | Взломан: коллизии продемонстрированы в 2004 году | Не использовать для безопасности; допустим только для контроля случайных ошибок передачи |
| SHA-1 | 160 бит | Взломан: практическая коллизия (SHAttered) показана Google в 2017 году | Устаревший, для новых систем не применяется |
| SHA-2 (SHA-256, SHA-512) | 256 / 512 бит | Текущий стандарт, практических коллизий не найдено | TLS, электронная подпись, блокчейн, общего назначения |
| SHA-3 (Keccak) | 224–512 бит | Стандарт NIST FIPS 202 (2015), другая внутренняя конструкция (sponge) | Альтернатива SHA-2 там, где нужна архитектурная независимость от него |
| ГОСТ Р 34.11-2012 «Стрибог» | 256 / 512 бит | Действующий российский стандарт, заменил ГОСТ Р 34.11-94 | Обязателен для гостребований ФСБ России: СКЗИ классов КС1–КА, ЭП по 63-ФЗ на ГОСТ-алгоритмах |
Практический вывод: если система попадает под требования ФСБ России к криптографической защите — например, входит в контур СКЗИ определённого класса или формирует электронную подпись по 63-ФЗ на отечественных алгоритмах, — используется ГОСТ Р 34.11-2012, а не SHA-2 или SHA-3. Для остальных задач общего назначения — контроль целостности файлов, TLS-соединения, внутренние системы без такого требования — достаточно SHA-256 или SHA-3.
Хеширование паролей: соль, bcrypt, Argon2
Хранить пароли в открытом виде нельзя, но и обычная быстрая хеш-функция вроде SHA-256 без соли не защищает: современное оборудование перебирает миллиарды таких хешей в секунду. Для паролей используют специализированные медленные функции — bcrypt, scrypt, Argon2, PBKDF2 — вместе со случайной солью для каждого пароля.
Быстрая хеш-функция общего назначения — это плюс для контроля целостности файла и минус для пароля: чем быстрее алгоритм считает один хеш, тем быстрее злоумышленник с современным GPU или специализированным оборудованием перебирает варианты и сверяет их с украденной базой. Простой пароль, захешированный обычным SHA-256, вскрывается за минуты — не из-за слабости SHA-256 как такового, а из-за того, что он не для этого спроектирован.
Отдельная связанная угроза — брутфорс, прямой перебор паролей на живом сервисе, а не по украденной базе хешей; медленное хеширование защищает именно от офлайн-перебора после утечки базы.
Соль (salt) обязательна
Уникальное случайное значение, которое добавляется к паролю перед хешированием и хранится вместе с хешем в открытом виде. Не замедляет перебор конкретного пароля, но лишает злоумышленника возможности один раз посчитать таблицу хешей (rainbow table) и применить её сразу ко всей утёкшей базе — для каждого пользователя расчёт нужно вести заново.
Перец (pepper) дополнительно
Ещё одно секретное значение, но, в отличие от соли, оно не хранится в базе данных рядом с хешем, а держится отдельно — в конфигурации приложения или защищённом хранилище секретов. Если база паролей утекает целиком, перец при правильном хранении к злоумышленнику не попадает.
bcrypt адаптивный
Функция на основе алгоритма Blowfish с настраиваемым «фактором стоимости»: вычислительную сложность можно повышать по мере роста мощности оборудования, не меняя саму схему хранения. Один из самых распространённых вариантов для хеширования паролей в веб-приложениях.
scrypt memory-hard
Требует значительного объёма оперативной памяти для вычисления, что затрудняет параллельный перебор на специализированном оборудовании (ASIC, FPGA) — в отличие от bcrypt, где основное ограничение только вычислительное, а не по памяти.
Argon2 рекомендуемый
Победитель Password Hashing Competition — открытого международного конкурса, который завершился в июле 2015 года. Настраивается по трём параметрам — время, память, параллелизм, — вариант Argon2id считается текущим рекомендуемым выбором для новых систем.
PBKDF2 итеративный
Более старая функция, одобренная NIST (SP 800-132): многократно повторяет базовую хеш-операцию, повышая стоимость перебора числом итераций. Проще в реализации, чем bcrypt или Argon2, но не memory-hard — уступает им в стойкости против специализированного оборудования.
Где применяется хеширование
Хеширование применяется везде, где нужно быстро проверить целостность или уникальность данных, не сравнивая их напрямую: в контроле целостности файлов и обновлений, в электронной подписи, в блокчейне, дедупликации хранилищ и индикаторах компрометации. Общий принцип один — сравнивать короткие хеши быстрее и практичнее, чем сравнивать сами данные целиком.
- Контроль целостности файлов и обновлений. Издатель публикует хеш файла рядом со ссылкой на скачивание; получатель считает хеш загруженного файла и сверяет со значением издателя — несовпадение означает, что файл повреждён при передаче или подменён.
- Электронная подпись. Подписывается не сам документ целиком, а его хеш — это на порядки быстрее и не меняет юридическую силу подписи, поскольку любое изменение документа меняет и его хеш. Подробнее о видах подписи и требованиях — в разделе про электронную подпись и 63-ФЗ.
- Блокчейн. Каждый блок содержит хеш предыдущего блока, формируя цепочку: изменить один блок задним числом невозможно без пересчёта хешей всех последующих блоков.
- Дедупликация. Системы хранения считают хеш каждого файла или блока данных и хранят одинаковые по хешу объекты один раз, экономя место без побайтового сравнения.
- Индикаторы компрометации. Хеши вредоносных файлов (обычно MD5, SHA-1 или SHA-256) — один из базовых типов индикаторов компрометации: антивирус или EDR сверяет хеш проверяемого файла со списком известных вредоносных хешей.
- HMAC. Код аутентификации сообщения на основе хеш-функции и секретного ключа — подтверждает не только целостность данных, но и то, что сообщение сформировал обладатель ключа, а не посторонний.
Частые вопросы
Что такое хеширование простыми словами?
Чем хеширование отличается от шифрования?
Можно ли восстановить исходные данные из хеша?
Почему нельзя хранить пароли через обычный SHA-256 без соли?
Какой алгоритм хеширования использовать в 2026 году?
Что такое ГОСТ Стрибог и когда он обязателен?
Словарь ИБ на SecRadar
Разбор терминов криптографии и защиты данных без вендорной привязки — что стоит за понятием, как оно связано со смежными темами и какие классы СЗИ закрывают конкретную задачу.