Открыть сервис

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 работают в несколько этапов:

  1. Дополнение сообщения — входные данные дополняются до длины, кратной размеру блока (512 или 1024 бит), с добавлением бита «1», нулей и 64-битного (или 128-битного) представления исходной длины.
  2. Инициализация — задаётся начальное значение хеша (константы, зависящие от алгоритма).
  3. Обработка блоков — каждый блок данных проходит через серию раундов (64 или 80), в которых применяются логические функции (AND, OR, XOR, NOT, сдвиги) и операции сложения по модулю 2^32 или 2^64.
  4. Формирование дайджеста — после обработки всех блоков полученное значение выдаётся как хеш.

Отличия 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 →