Хэш-сумма
Хэш-сумма (также хеш-сумма, хеш-код, дайджест) — это числовое значение фиксированной длины, полученное в результате применения криптографической или контрольной хеш-функции к произвольному набору данных (файлу, тексту, сообщению). Хэш-сумма служит уникальным цифровым отпечатком исходных данных, позволяя с высокой степенью вероятности проверять их целостность и неизменность, а также используется в системах поиска, шифрования и цифровых подписей.
Принцип работы
Хэш-функция преобразует входные данные произвольного размера в выходное значение (хэш) строго определённой длины, обычно от 128 до 512 бит. Процесс вычисления хэш-суммы является односторонним: по хэшу невозможно восстановить исходные данные. Основные свойства качественной хеш-функции:
- Детерминированность — одинаковые входные данные всегда дают одинаковый хэш.
- Высокая скорость вычисления — функция должна работать быстро даже на больших объёмах данных.
- Лавинный эффект — малейшее изменение исходных данных (один бит) приводит к кардинальному изменению хэш-суммы (примерно половина битов выходного значения меняется).
- Устойчивость к коллизиям — практически невозможно найти два разных набора данных, дающих одинаковый хэш. Различают слабую устойчивость (для заданного хэша трудно подобрать другой набор данных) и сильную устойчивость (трудно найти любую пару разных наборов с одинаковым хэшем).
История
Первые хеш-функции, используемые для контроля целостности данных, появились в 1970-х годах. Одной из ранних стала функция CRC (Cyclic Redundancy Check), разработанная для обнаружения случайных ошибок в каналах связи и на носителях. CRC не является криптостойкой и не предназначена для защиты от преднамеренных изменений.
В 1990-х годах с развитием интернета и цифровых коммуникаций возникла потребность в криптографически стойких хеш-функциях. В 1992 году был опубликован алгоритм MD5 (Message Digest 5), который стал широко распространённым, но к 2004 году были найдены его уязвимости к коллизиям. В 1995 году NIST (Национальный институт стандартов и технологий США) опубликовал семейство SHA-1 (Secure Hash Algorithm 1), которое также впоследствии было признано устаревшим из-за обнаруженных атак.
В 2001 году NIST принял семейство SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512), которое на сегодняшний день является стандартом де-факто для большинства криптографических приложений. В 2015 году после открытого конкурса был утверждён новый стандарт SHA-3 (Keccak), основанный на ином математическом принципе — губчатой функции.
Виды хеш-функций
Хеш-функции делятся на два основных класса:
Контрольные суммы (некриптографические)
Предназначены для обнаружения случайных ошибок, а не злонамеренных атак. Примеры:
- CRC32 — 32-битная циклическая избыточная проверка, используется в архиваторах, протоколах передачи данных.
- Adler-32 — более быстрая, но менее надёжная альтернатива CRC.
- FNV (Fowler–Noll–Vo) — простая и быстрая хеш-функция для хеш-таблиц.
Криптографические хеш-функции
Обладают свойствами, необходимыми для защиты от преднамеренных атак:
- MD5 (128 бит) — устарел, не рекомендуется для криптографических целей, используется только для проверки целостности в небезопасных контекстах.
- SHA-1 (160 бит) — устарел, не рекомендуется для использования в новых системах.
- SHA-2 (224/256/384/512 бит) — текущий стандарт, широко применяется в TLS/SSL, SSH, IPsec, блокчейне.
- SHA-3 (224/256/384/512 бит) — новый стандарт, устойчив к некоторым атакам, на которые уязвим SHA-2.
- BLAKE2 — быстрая альтернатива SHA-2 и SHA-3, используется в некоторых криптовалютах.
- SM3 — китайский национальный стандарт хеширования.
Применение
Проверка целостности файлов
При скачивании больших файлов (образов дисков, дистрибутивов программ) сайты часто публикуют хэш-суммы (MD5, SHA-256). Пользователь может вычислить хэш скачанного файла и сравнить с эталонным — если значения совпадают, файл не был повреждён или изменён. В операционных системах (Linux, macOS, Windows) для этого используются утилиты md5sum, sha256sum, certutil.
Хранение паролей
Вместо хранения паролей в открытом виде современные системы хранят их хэши (с добавлением «соли» — случайной строки). При аутентификации введённый пароль хэшируется и сравнивается с сохранённым значением. Для этой цели используются медленные хеш-функции, такие как bcrypt, scrypt, Argon2, а не быстрые SHA-256, чтобы затруднить атаки перебором.
Цифровые подписи и сертификаты
Хэш-сумма сообщения подписывается закрытым ключом отправителя. Получатель, используя открытый ключ, проверяет подпись и убеждается, что сообщение не было изменено и исходит от указанного отправителя. Эта технология лежит в основе TLS/SSL, электронной подписи, кода аутентификации сообщений (HMAC).
Блокчейн и криптовалюты
В технологии блокчейн (например, в биткойне) каждый блок содержит хэш предыдущего блока, что создаёт цепочку, устойчивую к модификации. Изменение данных в любом блоке изменит его хэш и разорвёт цепочку. Для майнинга биткойна используется алгоритм SHA-256.
Поиск дубликатов и версионирование
Системы контроля версий (Git) используют хэши (SHA-1) для идентификации коммитов и объектов. Поисковые системы и системы хранения данных (например, дедупликация) используют хэши для быстрого сравнения содержимого файлов.
Критика и ограничения
Основная критика связана с уязвимостью старых алгоритмов. MD5 и SHA-1 признаны небезопасными: для них существуют практические атаки нахождения коллизий. В 2017 году Google продемонстрировала коллизию для SHA-1. Специалисты рекомендуют полностью отказаться от их использования в криптографических целях.
Другая проблема — «радужные таблицы» (предварительно вычисленные таблицы хэшей для распространённых паролей). Для защиты от них применяется «соление» (добавление случайной строки к паролю перед хэшированием).
Хэш-сумма не является шифрованием — она не скрывает данные, а лишь даёт их цифровой отпечаток. Также хэш-сумма не гарантирует аутентичность данных (кто их создал) — для этого требуется цифровая подпись.
Интересные факты
- Алгоритм SHA-256 используется в майнинге биткойна. Сложность вычисления хэша регулируется так, чтобы новые блоки находились в среднем раз в 10 минут.
- В 2004 году китайский криптограф Сяоюнь Ван показала коллизии для MD5, что стало началом отказа от этого алгоритма.
- Существуют «хэш-функции для паролей» (например, bcrypt), которые намеренно медленные и требуют много памяти, чтобы затруднить атаки перебором.
- В операционной системе Linux хэш-суммы всех файлов в пакетах RPM и DEB проверяются при установке для гарантии целостности.
Источники
- Брюс Шнайер. «Прикладная криптография» (1996).
- NIST FIPS PUB 180-4. «Secure Hash Standard (SHS)» (2015).
- NIST FIPS PUB 202. «SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions» (2015).
- RFC 1321. «The MD5 Message-Digest Algorithm» (1992).
- RFC 3174. «US Secure Hash Algorithm 1 (SHA1)» (2001).
- RFC 6234. «US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)» (2011).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →