Безопасное хеширование
Безопасное хеширование — это криптографический метод преобразования входных данных произвольной длины (сообщения, пароля, файла) в выходную строку фиксированного размера (хеш-сумму, дайджест), обладающий свойствами, делающими его устойчивым к подделке, восстановлению исходных данных и коллизиям. В отличие от обычного хеширования (например, для контрольных сумм), безопасное хеширование применяется в задачах защиты информации: хранении паролей, цифровых подписях, проверке целостности данных и аутентификации.
Основные свойства
Безопасное хеширование базируется на строгих криптографических требованиях, которые отличают его от бытовых хеш-функций (например, CRC32 или MurmurHash):
- Однонаправленность (необратимость): по известному хешу вычислительно невозможно восстановить исходное сообщение. Это свойство также называют «сопротивлением восстановлению прообраза».
- Устойчивость к коллизиям: практически невозможно найти два различных входных сообщения, дающих одинаковый хеш. Различают слабую устойчивость (невозможно найти второе сообщение для заданного хеша) и сильную (невозможно найти любую пару сообщений с одинаковым хешем).
- Лавинный эффект: малейшее изменение входных данных (даже одного бита) приводит к полному и непредсказуемому изменению хеш-суммы.
- Детерминированность: одни и те же входные данные всегда дают один и тот же хеш.
- Высокая скорость вычисления: функция должна работать быстро на современном оборудовании, но при этом быть достаточно медленной для атак перебором (в задачах хранения паролей).
История и развитие
Первые криптографические хеш-функции появились в конце 1970-х — начале 1980-х годов. Одной из ранних стала MD2 (1989), затем MD4 (1990) и MD5 (1991), разработанные Рональдом Ривестом. Однако к концу 1990-х годов в MD5 и MD4 были найдены серьёзные уязвимости, связанные с коллизиями, что привело к их отказу от использования в безопасных системах.
В 1993 году Национальный институт стандартов и технологий США (NIST) опубликовал стандарт SHA-0, который вскоре был заменён на SHA-1 (1995). SHA-1 долгое время считался надёжным, но в 2005 году китайские криптографы Сяоюнь Ван и Хунбо Юй продемонстрировали практические атаки на SHA-1, а в 2017 году Google и CWI Amsterdam объявили о первой успешной коллизии для SHA-1 (атака SHAttered). После этого SHA-1 был признан небезопасным и выведен из использования в большинстве современных систем.
В ответ на уязвимости SHA-1 NIST в 2001 году выпустил семейство SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512), основанное на структуре Меркла — Дамгора. SHA-2 остаётся широко распространённым и считается безопасным на 2025 год, хотя его теоретическая устойчивость к коллизиям для некоторых вариантов (например, SHA-256) оценивается как 2^128 операций.
В 2012 году NIST провёл конкурс на новый стандарт хеширования, победителем которого стала функция Keccak, принятая как SHA-3. SHA-3 основана на принципиально иной конструкции — губчатой функции (sponge construction), что делает её устойчивой к некоторым классам атак, уязвимым для SHA-2.
Классификация и виды
По назначению
- Универсальные криптографические хеш-функции (SHA-2, SHA-3, BLAKE2, BLAKE3) — используются для цифровых подписей, сертификатов, целостности данных.
- Функции хеширования паролей (bcrypt, scrypt, Argon2, PBKDF2) — специально спроектированы для замедления перебора: они включают итеративное повторение, использование памяти и соли (случайной добавки к паролю перед хешированием).
- Функции аутентификации сообщений (HMAC) — комбинируют хеш-функцию с секретным ключом для проверки подлинности и целостности.
По алгоритмической основе
- Семейство MD (MD5, SHA-1, SHA-2) — структура Меркла — Дамгора.
- Губчатые функции (SHA-3, Keccak) — не имеют фиксированной длины блока, используют впитывание и выжимание данных.
- Функции на основе ARX (BLAKE2, BLAKE3, ChaCha) — используют только операции сложения, вращения и XOR, устойчивы к атакам по времени.
Применение
Хранение паролей
Вместо хранения паролей в открытом виде системы хранят их хеши. Для защиты от атак по радужным таблицам и перебору применяются соль (уникальная для каждого пользователя) и медленные функции (Argon2, bcrypt). Например, в современных веб-фреймворках (Django, Laravel) по умолчанию используется bcrypt или Argon2.
Цифровые подписи
Хеш-функция применяется для сжатия сообщения до фиксированного размера, который затем подписывается асимметричным ключом. Это позволяет проверять подпись без обработки всего сообщения. Стандарты цифровых подписей (ECDSA, EdDSA) требуют использования криптографически стойкого хеша (обычно SHA-256 или SHA-512).
Проверка целостности
При скачивании файлов пользователи могут сравнивать хеш-сумму (например, SHA-256), опубликованную разработчиком, с вычисленной локально. Если хеши совпадают, файл не был повреждён или изменён. Этот метод используется в пакетных менеджерах (apt, yum, npm), системах контроля версий (Git) и протоколах передачи данных (BitTorrent).
Блокчейн и криптовалюты
В блокчейне (например, в сети Bitcoin) хеширование применяется для связывания блоков (каждый блок содержит хеш предыдущего), майнинга (поиск хеша с определённым количеством нулей) и адресации транзакций. В Bitcoin используется двойное SHA-256 (SHA-256d).
Критика и ограничения
- Устаревание алгоритмов: с ростом вычислительных мощностей и развитием криптоанализа ранее безопасные функции (MD5, SHA-1) становятся уязвимыми. Переход на новые стандарты (SHA-3) часто происходит медленно из-за инерции инфраструктуры.
- Атаки по времени: некоторые реализации хеш-функций могут быть уязвимы к атакам, измеряющим время выполнения, что позволяет восстанавливать секретные данные. Это особенно критично для HMAC и функций хранения паролей.
- Квантовая угроза: квантовые компьютеры, использующие алгоритм Гровера, могут сократить эффективную стойкость хеш-функций вдвое (например, SHA-256 с 256 бит до 128 бит). Для защиты от квантовых атак разрабатываются постквантовые хеш-функции (например, на основе решёток).
- Ресурсоёмкость: медленные функции хеширования паролей (Argon2, scrypt) требуют значительных вычислительных ресурсов и памяти, что может быть проблемой на мобильных устройствах или встраиваемых системах.
Интересные факты
- В 2017 году SHA-1 был взломан с помощью 110 GPU-лет вычислений, что обошлось в 75 000 долларов США (по данным Google).
- Алгоритм MD5 до сих пор используется в некоторых устаревших системах, хотя его коллизии можно найти за секунды на обычном ноутбуке.
- Функция BLAKE3, выпущенная в 2020 году, является одной из самых быстрых криптографических хеш-функций, обгоняя SHA-256 в 5–10 раз на современных процессорах.
- В России стандартизирована собственная хеш-функция «Стрибог» (ГОСТ Р 34.11-2012), которая используется в государственных информационных системах и криптографических протоколах.
Источники
- Menezes A., van Oorschot P., Vanstone S. — Handbook of Applied Cryptography (1996)
- NIST FIPS PUB 180-4 — Secure Hash Standard (SHS)
- NIST FIPS PUB 202 — SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions
- Bernstein D. J., Lange T. — Post-Quantum Cryptography (2017)
- Стандарт ГОСТ Р 34.11-2012 — «Информационная технология. Криптографическая защита информации. Функция хеширования»
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →