Хеш — фиксированная выходная сумма данных¶
Хеш (от англ. hash, буквально «рубка, измельчение») — фиксированная по длине последовательность битов, вычисляемая из входных данных произвольного размера с помощью хеш-функции. Хеш является детерминированным: одни и те же входные данные всегда дают один и тот же хеш, а любое изменение входа, даже в одном бите, приводит к совершенно иному результату. Хеши широко применяются в информационной безопасности, базах данных, системах контроля целостности и блокчейнах.
¶Хеш-функции
Хеш-функция — математическое преобразование, которое сопоставляет входной строке или набору байтов фиксированный выход. Основные свойства криптографически стойких хеш-функций:
- Детерминированность — одинаковый вход всегда даёт одинаковый выход.
- Необратимость — по хешу невозможно восстановить исходные данные.
- Авалантшный эффект — малейшее изменение входа радикально меняет результат.
- Устойчивость к коллизиям — затруднено нахождение двух разных входов с одинаковым хешем.
- Равномерное распределение — хеш-выходы равномерно распределены по диапазону.
¶Основные алгоритмы
¶MD5
Алгоритм MD5 (Message Digest 5) разработан Рональдом Ривестом в 1991 году, формирует 128-битный хеш. Долгое время был стандартом для проверки целостности файлов, но к 2000-м годам были обнаружены эффективные методы подбора коллизий, поэтому MD5 признан криптографически небезопасным. По-прежнему применяется в незащищённых сценариях, например для контроля сумм загрузок.
¶SHA-1
SHA-1 (Secure Hash Algorithm 1) разработан Агентством национальной безопасности США (NSA) в 1995 году, формирует 160-битный хеш. В 2017 году исследователи Google и CWI Amsterdam продемонстрировали первый реальный случай подбора коллизий (атака SHAttered), после чего SHA-1 был официально отозван для криптографических целей.
¶SHA-2
Семейство SHA-2 включает варианты с длиной хеша 224, 256, 384 и 512 бит (SHA-224, SHA-256, SHA-384, SHA-512). Разработано в 2001 году, является действующим стандартом и повсеместно применяется в TLS-сертификатах, цифровых подписях и криптовалютах. Bitcoin использует дважды применённый SHA-256 для адресов и майнинга.
¶SHA-3
SHA-3 был выбран в результате открытого конкурса NIST в 2012 году на основе алгоритма Keccak, разработанного бельгийскими криптографами Гвидо Берто, Йоаном Деменом, Михаэлем Петитом и Бартом Ванассе. В отличие от SHA-2, SHA-3 построен на принципе губки (sponge construction) и устойчив к атакам, потенциально применимым к конструкциям Меркла — Дамгора. Стандартизирован как FIPS 202.
¶Русские стандарты
В России действует ГОСТ Р 34.11-2012 «Информационная технология. Криптографическая защита информации. Функция хеширования», разработанная под руководством В. Б. Мальцева. Алгоритм формирует 256-битный хеш и входит в состав стандартов цифровой подписи (ГОСТ Р 34.10-2012) и электронной подписи (Федеральный закон № 63-ФЗ). Применяется в государственных информационных системах и банковских операциях на территории России.
¶Другие алгоритмы
- BLAKE2 и BLAKE3 — быстрые современные функции, основанные на SHA-3-конкурсном BLAKE, используются в Argon2 и различных приложениях.
- Whirlpool — 512-битная функция, включена в стандарт ISO/IEC 10118-3.
- RIPEMD-160 — 160-битная функция, применяется в Bitcoin для создания адресов из SHA-256 хешей.
¶Применение
¶Контроль целостности
Хеши позволяют проверить, что файл не был изменён. Распространённые утилиты (md5sum, sha256sum) вычисляют хеш файла, который пользователь сравнивает с опубликованным автором. Любое изменение файла меняет хеш, что обнаруживает повреждение или подмену.
¶Криптография и цифровые подписи
Хеш-функции лежат в основе алгоритмов цифровой подписи: подпись вычисляется не от исходного сообщения, а от его хеша, что ускоряет процесс и повышает безопасность. Хеши используются в протоколах аутентификации (например, HMAC — Hash-based Message Authentication Code), для хранения паролей (с солью) и в цепочках Меркла.
¶Блокчейн
В блокчейне Bitcoin хеши образуют цепочку: заголовок блока содержит хеш предыдущего блока, что обеспечивает неизменяемость записей. Майнинг заключается в подборе nonce, дающего хеш с нужным числом ведущих нулей. Цепочки Меркла используются для компактной проверки транзакций.
¶Системы контроля версий
Git идентифицирует коммиты, файлы и деревья с помощью SHA-1 (с переходом на SHA-256), что обеспечивает неизменяемость истории репозитория.
¶Коллизии
Коллизия — ситуация, когда два разных входа дают одинаковый хеш. Для n-битной хеш-функции коллизия гарантированно существует (принцип дирихлева), однако её поиск в общем случае требует порядка 2^(n/2) операций (атака дня рождения). Для MD5 это 2^64 операций, что выполнимо на современном оборудовании, а для SHA-256 — 2^128, что практически неосуществимо.
¶Источники
- Райбов С. С., Часовских В. С. «Основы информационной безопасности»
- Справочник по криптографии: RFC 1321 (MD5), FIPS 180-4 (SHA-2), FIPS 202 (SHA-3)
- ГОСТ Р 34.11-2012 «Функция хеширования»
- Мальцев В. Б., Петросян Ю. В. «Криптографические функции хеширования»
- Stallings W. «Cryptography and Network Security: Principles and Practice»
