Secure Hash Algorithm
Secure Hash Algorithm (SHA) — это семейство криптографических хеш-функций, разработанных Агентством национальной безопасности США (NSA) и опубликованных Национальным институтом стандартов и технологий (NIST). SHA-функции преобразуют входные данные произвольной длины в выходное значение фиксированной длины (хеш-дайджест), которое служит для проверки целостности данных, аутентификации и в цифровых подписях. Основные свойства SHA: необратимость (однонаправленность), устойчивость к коллизиям (сложность нахождения двух разных сообщений с одинаковым хешем) и лавинный эффект (малейшее изменение входных данных приводит к кардинальному изменению хеша).
История
Разработка SHA началась в 1993 году, когда NIST опубликовал стандарт SHA-0 (FIPS PUB 180). Однако вскоре в нём была обнаружена уязвимость, и в 1995 году вышла исправленная версия — SHA-1 (FIPS PUB 180-1). SHA-1 долгое время был широко распространён, но к 2005 году криптоаналитики продемонстрировали теоретические атаки на его устойчивость к коллизиям, а в 2017 году была опубликована практическая атака (SHAttered), позволившая создать коллизию за разумное время.
В ответ на уязвимости SHA-1 NIST в 2001 году выпустил стандарт SHA-2 (FIPS PUB 180-2), включающий четыре варианта: SHA-224, SHA-256, SHA-384 и SHA-512. SHA-2 использует более сложную структуру (сеть Фейстеля с 64 или 80 раундами) и на сегодняшний день считается криптостойким. В 2012 году NIST объявил конкурс на новый стандарт, итогом которого стало принятие SHA-3 (FIPS PUB 202) в 2015 году. SHA-3 основан на алгоритме Keccak, разработанном Гвидо Бертони, Жоаном Дайменом, Микаэлем Петерсом и Жилем ван Ассше. В отличие от SHA-2, SHA-3 использует конструкцию «губка» (sponge construction), что обеспечивает другую парадигму безопасности.
Виды и классификация
SHA-0 и SHA-1
- SHA-0 — ранняя версия (1993), отозванная из-за уязвимости.
- SHA-1 — 160-битный хеш (20 байт). Блок данных — 512 бит. Количество раундов — 80. В настоящее время не рекомендуется для использования в криптографических системах из-за доказанных атак на коллизии. NIST официально объявил SHA-1 устаревшим в 2011 году.
SHA-2
Семейство включает четыре основные функции, различающиеся длиной хеша и размером блока:
- SHA-224 — 224-битный хеш (28 байт), блок 512 бит, 64 раунда.
- SHA-256 — 256-битный хеш (32 байта), блок 512 бит, 64 раунда.
- SHA-384 — 384-битный хеш (48 байт), блок 1024 бита, 80 раундов.
- SHA-512 — 512-битный хеш (64 байта), блок 1024 бита, 80 раундов.
Также существуют усечённые версии (SHA-512/224, SHA-512/256), которые обеспечивают устойчивость к атакам на удлинение длины.
SHA-3
Семейство, основанное на Keccak, с переменной длиной хеша:
- SHA3-224, SHA3-256, SHA3-384, SHA3-512 — соответствуют длинам хеша 224, 256, 384 и 512 бит.
- SHAKE128 и SHAKE256 — функции с переменной длиной выхода (XOF), позволяющие получать хеш произвольной длины.
Устройство и принцип работы
Общая схема
Все алгоритмы SHA работают в несколько этапов:
- Дополнение сообщения — входные данные дополняются до длины, кратной размеру блока (512 или 1024 бит), с добавлением бита «1», нулей и 64-битного (или 128-битного) представления исходной длины.
- Инициализация — задаётся начальное значение хеша (константы, зависящие от алгоритма).
- Обработка блоков — каждый блок данных проходит через серию раундов (64 или 80), в которых применяются логические функции (AND, OR, XOR, NOT, сдвиги) и операции сложения по модулю 2^32 или 2^64.
- Формирование дайджеста — после обработки всех блоков полученное значение выдаётся как хеш.
Отличия SHA-2 и SHA-3
- SHA-2 использует структуру Меркла — Дамгора, где каждый блок обрабатывается последовательно, а результат предыдущего блока влияет на следующий.
- SHA-3 применяет конструкцию «губка»: данные впитываются в состояние (state) фиксированного размера, затем сжимаются, и хеш извлекается из состояния. Это делает SHA-3 устойчивым к атакам на удлинение длины.
Применение
Цифровые подписи и сертификаты
SHA-256 и SHA-384 широко используются в инфраструктуре открытых ключей (PKI) для создания цифровых подписей (например, в алгоритмах RSA, DSA, ECDSA). Сертификаты X.509, применяемые в протоколах HTTPS, TLS, содержат хеш-дайджесты, подписанные удостоверяющим центром.
Проверка целостности данных
SHA-хеши применяются для контроля целостности файлов при скачивании (например, контрольные суммы MD5, SHA-1, SHA-256 на сайтах загрузки), в системах контроля версий (Git использует SHA-1 для идентификации коммитов, хотя в сообществе обсуждается переход на SHA-256), а также в блокчейн-технологиях (биткойн использует двойной SHA-256).
Аутентификация сообщений
В комбинации с секретным ключом SHA используется в протоколах HMAC (Hash-based Message Authentication Code) для проверки подлинности и целостности сообщений.
Хранение паролей
Хотя SHA не предназначен для хеширования паролей (из-за высокой скорости вычислений, что облегчает перебор), его часто применяют в связке с солью (salt) и многократным хешированием (например, PBKDF2, bcrypt, scrypt используют SHA-2 как базовую функцию).
Криптостойкость и критика
Уязвимости SHA-1
К 2005 году были опубликованы теоретические атаки на SHA-1, снижающие сложность поиска коллизии с 2^80 до 2^69 операций. В 2017 году команда Google и CWI Amsterdam продемонстрировала практическую коллизию для SHA-1 (два разных PDF-файла с одинаковым хешем). После этого большинство браузеров и сертификационных центров прекратили поддержку SHA-1.
Безопасность SHA-2
На 2025 год не известно практических атак на SHA-256 или SHA-512, которые бы позволяли найти коллизию быстрее, чем полным перебором (2^128 операций для SHA-256). Однако теоретические исследования показывают, что структура Меркла — Дамгора делает SHA-2 уязвимым к атакам на удлинение длины (length extension attack), что ограничивает его применение в некоторых протоколах без дополнительных мер (например, HMAC).
SHA-3 как альтернатива
SHA-3 разработан с учётом недостатков SHA-2: он устойчив к атакам на удлинение длины, имеет другую внутреннюю структуру и не основан на тех же математических принципах, что и SHA-2. Это обеспечивает диверсификацию криптографических алгоритмов на случай, если в SHA-2 будут найдены уязвимости.
Интересные факты
- SHA-1 использовался в системе управления версиями Git для идентификации объектов. Несмотря на известные уязвимости, переход на SHA-256 в Git обсуждается с 2017 года, но пока не реализован полностью.
- Алгоритм SHA-256 является основой майнинга криптовалюты Bitcoin: майнеры ищут хеш блока, меньший заданного целевого значения.
- SHA-3 был выбран NIST в 2012 году после открытого конкурса, в котором участвовали 64 алгоритма. Keccak победил благодаря высокой производительности и гибкости.
- В России ГОСТ Р 34.11-2012 («Стрибог») является национальным стандартом хеш-функции, но SHA-2 и SHA-3 также допускаются к использованию в российских криптосистемах.
См. также
- Хеш-функция
- Криптография
- MD5
- ГОСТ Р 34.11-2012
Источники
- NIST FIPS PUB 180-4: Secure Hash Standard (SHS)
- NIST FIPS PUB 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions
- Wang, X., Yin, Y.L., Yu, H. (2005). Finding Collisions in the Full SHA-1. CRYPTO 2005.
- Stevens, M., Bursztein, E., Karpman, P., Albertini, A., Markov, Y. (2017). The first collision for full SHA-1. CRYPTO 2017.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →