Хеш-функция
Хеш-функция — это математическая функция, которая преобразует входные данные произвольного размера (сообщение, файл, пароль) в выходную строку фиксированной длины, называемую хеш-суммой, хеш-кодом или дайджестом. Результат работы хеш-функции является уникальным для каждого уникального набора входных данных, что позволяет использовать её для проверки целостности информации, ускорения поиска в базах данных и обеспечения безопасности в криптографии.
Основные свойства
Хеш-функции, используемые в криптографии и информатике, должны обладать рядом фундаментальных свойств:
- Детерминированность: для одного и того же входного значения функция всегда возвращает одинаковый хеш-код.
- Высокая скорость вычисления: процесс хеширования должен быть достаточно быстрым для практического применения.
- Необратимость (свойство однонаправленности): по известному хеш-коду невозможно (или вычислительно сложно) восстановить исходные данные.
- Устойчивость к коллизиям: должно быть крайне маловероятно найти два различных входных сообщения, которые дают одинаковый хеш. Различают слабую устойчивость (для заданного сообщения трудно найти другое с тем же хешем) и сильную (трудно найти любую пару сообщений с одинаковым хешем).
- Лавинный эффект: незначительное изменение входных данных (например, замена одного символа) должно приводить к кардинальному изменению хеш-суммы, причём каждый бит результата должен меняться с вероятностью около 50%.
История
Первые идеи использования хеш-функций для организации данных появились в 1950-х годах. В 1953 году американский учёный Ганс Питер Лун разработал алгоритм хеширования для поиска в больших массивах данных. Однако современное понимание криптографических хеш-функций начало формироваться в 1970-х годах с развитием криптографии с открытым ключом.
В 1979 году Ральф Меркле предложил концепцию дерева хешей (дерево Меркле), которая стала основой для многих блокчейн-технологий. В 1990 году Рональд Ривест разработал алгоритм MD4, а затем MD5, которые широко использовались, но позже были признаны уязвимыми. В 1993 году Национальный институт стандартов и технологий США (NIST) опубликовал SHA-0, а затем, в 1995 году, SHA-1. После обнаружения уязвимостей в SHA-1 в 2000-х годах NIST в 2001 году представил семейство SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512), которое остаётся стандартом де-факто. В 2012 году NIST объявил победителем конкурса на новый стандарт — SHA-3 (алгоритм Keccak).
Классификация
Хеш-функции делятся на два основных класса:
Криптографические хеш-функции
Предназначены для обеспечения безопасности и обладают всеми перечисленными выше свойствами. Используются в цифровых подписях, аутентификации сообщений, хранении паролей и криптовалютах. Примеры: SHA-256, SHA-3, BLAKE2.
Некриптографические хеш-функции
Оптимизированы для скорости и минимизации коллизий в структурах данных, но не обязаны быть устойчивыми к атакам. Используются в хеш-таблицах, проверке контрольных сумм, дедупликации данных. Примеры: MurmurHash, CityHash, CRC32.
Применение
Проверка целостности данных
Хеш-суммы используются для контроля неизменности файлов при передаче или хранении. Пользователь может вычислить хеш скачанного файла и сравнить его с эталонным значением, опубликованным разработчиком. При несовпадении данных файл считается повреждённым или подменённым.
Хранение паролей
В современных системах пароли не хранятся в открытом виде. Вместо этого сохраняется хеш-сумма пароля. При попытке входа система вычисляет хеш введённого пароля и сравнивает его с сохранённым. Для повышения безопасности применяется «соль» — случайная строка, добавляемая к паролю перед хешированием, что предотвращает атаки по радужным таблицам.
Цифровые подписи и сертификаты
Хеш-функции являются ключевым компонентом асимметричной криптографии. Вместо подписания всего сообщения подписывается его хеш, что значительно ускоряет процесс. Сертификаты X.509, используемые в протоколах HTTPS, также содержат хеши для проверки подлинности.
Блокчейн и криптовалюты
В технологии блокчейн (например, в сети Биткоин) хеш-функции (SHA-256) используются для связывания блоков в цепочку, создания адресов кошельков и в механизме доказательства выполнения работы (Proof-of-Work). Каждый блок содержит хеш предыдущего блока, что обеспечивает неизменность всей истории транзакций.
Хеш-таблицы
В программировании хеш-функции применяются для построения ассоциативных массивов (хеш-таблиц). Ключ преобразуется в индекс массива, что позволяет выполнять операции поиска, вставки и удаления за время O(1) в среднем.
Известные алгоритмы
- MD5 (Message Digest 5) — 128-битный алгоритм, разработанный в 1991 году. С 2004 года считается криптографически сломанным: найдены практические методы нахождения коллизий. Не рекомендуется к использованию в системах безопасности.
- SHA-1 (Secure Hash Algorithm 1) — 160-битный алгоритм. В 2017 году группа исследователей (включая Google) продемонстрировала успешную атаку на коллизию (SHAttered). С 2017 года NIST рекомендовал отказаться от SHA-1.
- SHA-2 — семейство алгоритмов с длиной хеша 224, 256, 384 и 512 бит. Наиболее распространённый стандарт. SHA-256 используется в Биткоине и многих протоколах TLS/SSL.
- SHA-3 — стандарт, принятый в 2015 году, основанный на алгоритме Keccak. Отличается от SHA-2 внутренней структурой (использует губчатую конструкцию вместо конструкции Меркла — Дамгора).
- BLAKE2 — высокопроизводительный алгоритм, разработанный в 2012 году. Считается более быстрым, чем SHA-2, и рекомендован для использования в программных реализациях.
Критика и ограничения
Основной проблемой криптографических хеш-функций является уязвимость к атакам на коллизии. По мере роста вычислительных мощностей старые алгоритмы (MD5, SHA-1) становятся небезопасными. Кроме того, хеш-функции уязвимы к атакам по сторонним каналам (например, анализ времени выполнения), что требует осторожной реализации.
Некриптографические хеш-функции могут страдать от чрезмерного количества коллизий при неправильном выборе алгоритма для конкретного набора данных, что приводит к деградации производительности хеш-таблиц.
Интересные факты
- Алгоритм SHA-256, используемый в Биткоине, требует огромных вычислительных затрат: по оценкам, на конец 2023 года мощность сети Биткоин превышала 400 экзахешей в секунду (400 × 10^18 операций хеширования в секунду).
- Первая успешная атака на коллизию для MD5 была проведена китайским криптографом Ван Сяоюнь в 2004 году.
- В 2022 году NIST объявил о начале стандартизации новых алгоритмов хеширования, устойчивых к квантовым атакам.
Источники
- Menezes, A. J., van Oorschot, P. C., Vanstone, S. A. (1996). Handbook of Applied Cryptography. CRC Press.
- Schneier, B. (2015). Applied Cryptography: Protocols, Algorithms, and Source Code in C. John Wiley & Sons.
- NIST FIPS PUB 180-4: Secure Hash Standard (SHS).
- NIST FIPS PUB 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions.
- RFC 1321: The MD5 Message-Digest Algorithm.
- RFC 4634: US Secure Hash Algorithms (SHA and HMAC-SHA).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →