SHA-2
SHA-2 (Secure Hash Algorithm 2) — это семейство криптографических хэш-функций, разработанных Агентством национальной безопасности США (NSA) и опубликованных Национальным институтом стандартов и технологий США (NIST) в 2001 году. Алгоритмы SHA-2 предназначены для преобразования произвольного объёма входных данных (сообщения) в выходное значение фиксированной длины (хэш, дайджест), которое служит для проверки целостности данных и аутентификации. SHA-2 пришёл на смену устаревшим алгоритмам SHA-0 и SHA-1, которые были признаны уязвимыми к коллизиям. Семейство включает несколько вариантов, различающихся длиной хэша: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 и SHA-512/256.
История и стандартизация
Разработка SHA-2 началась в середине 1990-х годов как ответ на криптоаналитические успехи против SHA-0 и SHA-1. В 2001 году NIST опубликовал стандарт FIPS PUB 180-2, который ввёл три новые функции: SHA-256, SHA-384 и SHA-512. Позднее, в 2004 году, в стандарт был добавлен SHA-224, а в 2012 году — SHA-512/224 и SHA-512/256. Эти дополнения были обусловлены необходимостью в хэшах различной длины для разных приложений, включая криптовалюты, цифровые подписи и протоколы безопасности.
Стандарт SHA-2 был принят в качестве федерального стандарта обработки информации (FIPS) в США и рекомендован для использования в государственных учреждениях. В России алгоритмы SHA-2 не входят в перечень, утверждённый Федеральной службой безопасности (ФСБ) для использования в государственных информационных системах, где применяются национальные стандарты ГОСТ Р 34.11-2012 («Стрибог»). Тем не менее SHA-2 широко используется в коммерческих и международных проектах, включая протоколы TLS, SSH, IPsec, а также в блокчейн-технологиях.
Устройство и принцип работы
Все варианты SHA-2 основаны на структуре Меркла — Дамгора, которая предполагает разбиение входного сообщения на блоки фиксированного размера и последовательную обработку каждого блока через сжимающую функцию. Основные элементы алгоритма:
- Разбиение на блоки: сообщение дополняется до длины, кратной размеру блока (512 бит для SHA-256 и SHA-224; 1024 бита для SHA-512 и SHA-384). В конце добавляется 64-битное (или 128-битное) представление исходной длины сообщения.
- Инициализация: устанавливаются начальные значения хэша (константы, производные от квадратных корней простых чисел).
- Обработка блоков: каждый блок проходит через 64 (для SHA-256) или 80 (для SHA-512) раундов сжатия. В каждом раунде используются битовые операции (сдвиги, XOR, AND, NOT) и сложение по модулю 2^32 (или 2^64). Раунды включают нелинейные функции, такие как Ch (choose) и Maj (majority).
- Формирование дайджеста: после обработки всех блоков полученное значение (или его часть) выдаётся в качестве хэша.
Ключевое отличие SHA-2 от SHA-1 — увеличение числа раундов и использование более сложных битовых операций, что делает его устойчивым к известным атакам на SHA-1, включая атаку на коллизию.
Варианты SHA-2
Семейство SHA-2 включает шесть основных вариантов, различающихся длиной хэша и размером блока:
| Вариант | Длина хэша (бит) | Размер блока (бит) | Число раундов | Применение |
|---|---|---|---|---|
| SHA-224 | 224 | 512 | 64 | Протоколы с ограниченной пропускной способностью |
| SHA-256 | 256 | 512 | 64 | Наиболее распространённый, используется в TLS, Bitcoin |
| SHA-384 | 384 | 1024 | 80 | Высоконадёжные системы, сертификаты |
| SHA-512 | 512 | 1024 | 80 | Криптовалюты, цифровые подписи |
| SHA-512/224 | 224 | 1024 | 80 | Специализированные приложения (NIST) |
| SHA-512/256 | 256 | 1024 | 80 | Специализированные приложения (NIST) |
Варианты SHA-512/224 и SHA-512/256 были введены в 2012 году для обеспечения совместимости с 64-битными архитектурами при сохранении длины хэша, аналогичной SHA-224 и SHA-256.
Применение
SHA-2 является основой для множества криптографических протоколов и систем:
- Цифровые подписи: алгоритмы SHA-2 используются для создания дайджеста сообщения, который затем подписывается асимметричным ключом (например, RSA или ECDSA). Это обеспечивает целостность и аутентичность данных.
- Протоколы безопасности: TLS (Transport Layer Security), SSH (Secure Shell), IPsec — все они используют SHA-2 для проверки целостности пакетов и аутентификации.
- Блокчейн и криптовалюты: SHA-256 является основой для майнинга биткойна и других криптовалют. В биткойне хэширование блоков требует нахождения значения, меньшего заданного целевого числа (Proof-of-Work).
- Проверка целостности файлов: хэши SHA-2 применяются для контроля версий программного обеспечения, загрузок и резервных копий. Например, дистрибутивы Linux часто сопровождаются контрольными суммами SHA-256.
- Аутентификация сообщений: в сочетании с HMAC (Hash-based Message Authentication Code) SHA-2 используется для проверки подлинности сообщений в сетевых протоколах.
Криптоанализ и безопасность
На 2025 год SHA-2 считается криптостойким алгоритмом. Известные атаки на SHA-1 (например, атака с коллизией, продемонстрированная в 2017 году командой Google и CWI Amsterdam) не работают против SHA-2 из-за большего числа раундов и более сложной структуры. Теоретические атаки на SHA-2, такие как атака на 31 раунд из 64 (для SHA-256) или на 38 раундов из 80 (для SHA-512), были опубликованы, но они не представляют практической угрозы для полной версии алгоритма. Основные риски связаны с:
- Квантовыми вычислениями: алгоритм Гровера теоретически может сократить сложность поиска коллизии с 2^128 до 2^64 для SHA-256, но для практической реализации требуется квантовый компьютер с миллионами кубитов, что пока недостижимо.
- Атаками на реализацию: уязвимости могут возникать из-за ошибок в программной или аппаратной реализации, например, утечки по побочным каналам (timing attacks).
В 2015 году NIST объявил о начале конкурса на новый стандарт хэш-функции (SHA-3), который был завершён в 2012 году с выбором алгоритма Keccak. SHA-3 не является заменой SHA-2, а дополняет его, предлагая альтернативную конструкцию (sponge function). SHA-2 остаётся рекомендованным для использования в большинстве приложений.
Сравнение с другими хэш-функциями
- SHA-1: устарел из-за коллизий; не рекомендуется для новых систем.
- SHA-3: основан на другой математической структуре (sponge); обеспечивает устойчивость к некоторым атакам, но медленнее в программной реализации на 32-битных архитектурах.
- MD5: полностью скомпрометирован; не используется в криптографии.
- BLAKE2: более быстрый, чем SHA-2, но менее распространён в стандартах.
- ГОСТ Р 34.11-2012 (Стрибог): российский стандарт, обязательный для государственных информационных систем в РФ; длина хэша 256 или 512 бит.
Интересные факты
- SHA-256 используется в биткойне для майнинга, что привело к созданию специализированных интегральных схем (ASIC), способных выполнять миллиарды хэшей в секунду.
- В 2018 году исследователи из компании Trail of Bits показали, что SHA-256 можно реализовать на графических процессорах (GPU) с производительностью до 10 ГХэш/с.
- SHA-512/256 и SHA-512/224 были разработаны для защиты от атак, связанных с расширением длины сообщения (length extension attack), которые возможны для SHA-256 и SHA-512.
Источники
- National Institute of Standards and Technology (NIST). FIPS PUB 180-4: Secure Hash Standard (SHS). — 2012.
- Handschuh, H., Knudsen, L. R., Robshaw, M. J. B. Analysis of SHA-1 in the Context of Hash Function Security. — 2001.
- Stevens, M., Bursztein, E., Karpman, P., et al. The first collision for full SHA-1. — 2017.
- Bernstein, D. J., Lange, T. Post-quantum cryptography. — 2017.
- Федеральная служба безопасности Российской Федерации. ГОСТ Р 34.11-2012: Функция хэширования. — 2012.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →