SHA
SHA (англ. Secure Hash Algorithm — безопасный алгоритм хеширования) — это семейство криптографических хеш-функций, разработанных Агентством национальной безопасности (АНБ) США и опубликованных Национальным институтом стандартов и технологий (NIST). SHA-функции преобразуют входные данные произвольной длины (сообщение) в выходную строку фиксированной длины (хеш-сумму, или дайджест), которая является уникальным цифровым отпечатком исходных данных. Основное назначение SHA — обеспечение целостности данных, аутентификация и использование в криптографических протоколах, таких как цифровые подписи и проверка паролей.
История
Разработка SHA-0 и SHA-1
Первая версия алгоритма, известная как SHA-0, была опубликована NIST в 1993 году под названием Secure Hash Standard (SHS). Однако вскоре в ней была обнаружена уязвимость, и в 1995 году алгоритм был пересмотрен. Исправленная версия получила название SHA-1. SHA-1 генерирует 160-битный хеш (20 байт) и долгое время был одним из самых распространённых хеш-алгоритмов, используемых в протоколах SSL/TLS, PGP, SSH, Git и других системах.
Уязвимости SHA-1
К началу 2000-х годов криптоаналитики начали находить теоретические атаки на SHA-1. В 2005 году группа исследователей (Ван, Ин и Ю) продемонстрировала коллизионную атаку — возможность найти два разных сообщения с одинаковым хешем — с вычислительной сложностью около 2^69 операций, что значительно ниже теоретического предела 2^80. В 2017 году компания Google совместно с Центром математики и информатики (CWI) в Нидерландах опубликовала практическую реализацию коллизии для SHA-1 (атака SHAttered). После этого NIST официально рекомендовал отказаться от использования SHA-1 в пользу более безопасных алгоритмов.
Семейство SHA-2
В ответ на уязвимости SHA-1 NIST в 2001 году опубликовал новое семейство алгоритмов — SHA-2. Оно включает четыре варианта с разной длиной хеша: SHA-224, SHA-256, SHA-384 и SHA-512. Все они основаны на структуре Меркла — Дамгора и используют более сложные раундовые функции, что делает их устойчивыми к известным атакам. SHA-256 и SHA-512 стали стандартом де-факто для многих криптографических приложений, включая блокчейн (например, в биткойне используется SHA-256), цифровые сертификаты и протоколы TLS.
SHA-3 (Keccak)
В 2007 году NIST объявил открытый конкурс на разработку нового стандарта хеширования, который должен был стать альтернативой SHA-2. Победителем в 2012 году стал алгоритм Keccak, разработанный группой бельгийских криптографов (Г. Бертони, Ж. Демен, М. Петерс и Г. ван Ассхе). В 2015 году он был опубликован как SHA-3. В отличие от SHA-2, SHA-3 основан на конструкции «губка» (sponge construction), что обеспечивает иные свойства безопасности и гибкость в настройке выходной длины. SHA-3 не является заменой SHA-2, а предоставляет альтернативный алгоритм на случай, если в SHA-2 будут найдены уязвимости.
Классификация
По длине хеша
- SHA-1 — 160 бит (устарел, не рекомендуется к использованию).
- SHA-2:
- SHA-224 — 224 бита;
- SHA-256 — 256 бит;
- SHA-384 — 384 бита;
- SHA-512 — 512 бит.
- SHA-3:
- SHA3-224 — 224 бита;
- SHA3-256 — 256 бит;
- SHA3-384 — 384 бита;
- SHA3-512 — 512 бит.
- Также существуют варианты с переменной выходной длиной (SHAKE128 и SHAKE256).
По конструкции
- Меркла — Дамгор (SHA-1, SHA-2): сообщение разбивается на блоки, каждый блок обрабатывается последовательно, и результат предыдущего блока влияет на следующий.
- Губка (SHA-3): данные впитываются в состояние фиксированного размера, а затем выжимаются для получения хеша. Эта конструкция более устойчива к некоторым атакам.
Устройство и принцип работы
Общая схема
Все алгоритмы SHA работают в несколько этапов:
- Дополнение сообщения (padding): к исходному сообщению добавляется единичный бит, затем нули до тех пор, пока длина сообщения не станет кратной размеру блока (512 бит для SHA-1 и SHA-256, 1024 бит для SHA-512). В конце дописывается 64-битное (или 128-битное) представление исходной длины сообщения.
- Инициализация: задаётся начальное значение (IV) — набор констант, определённых стандартом.
- Обработка блоков: каждый блок данных обрабатывается с помощью раундовой функции, которая включает операции побитового сдвига, XOR, сложения по модулю 2^32 (или 2^64) и нелинейные функции (например, выбор и мажоритарная функция).
- Вывод: после обработки всех блоков текущее состояние становится хеш-суммой.
Особенности SHA-3
В SHA-3 состояние представляет собой трёхмерный массив битов размером 5×5×64 (всего 1600 бит). Процесс состоит из 24 раундов, каждый из которых включает пять шагов: θ (тета), ρ (ро), π (пи), χ (хи) и ι (йота). Эти шаги обеспечивают диффузию и конфузию данных.
Применение
Цифровые подписи
SHA-256 и SHA-3 используются в алгоритмах цифровой подписи, таких как RSA, DSA и ECDSA. Хеш сообщения подписывается закрытым ключом, а получатель проверяет подпись, сравнивая хеш с расшифрованным значением.
Проверка целостности файлов
SHA-хеши широко применяются для проверки целостности загружаемых файлов. Например, дистрибутивы операционных систем (Linux, FreeBSD) часто сопровождаются файлами с контрольными суммами SHA-256. Пользователь может вычислить хеш скачанного файла и сравнить его с официальным значением.
Хранение паролей
Вместо хранения паролей в открытом виде системы часто хранят их хеши. При аутентификации введённый пароль хешируется и сравнивается с сохранённым значением. Однако для этой цели SHA-256 не рекомендуется из-за высокой скорости вычислений — злоумышленник может быстро перебрать пароли. Вместо этого используются специализированные алгоритмы (bcrypt, scrypt, Argon2) или многократное хеширование (PBKDF2).
Блокчейн и криптовалюты
В биткойне и многих других криптовалютах SHA-256 используется для майнинга (поиска хеша, меньшего заданного порога) и создания цепочек блоков. В Ethereum до перехода на Proof-of-Stake использовался алгоритм Ethash, основанный на SHA-3.
Протоколы безопасности
SHA-2 и SHA-3 входят в состав протоколов TLS, SSH, IPsec, DNSSEC. Они используются для аутентификации сообщений и защиты от подмены.
Критика и ограничения
Уязвимости SHA-1
После публикации атаки SHAttered в 2017 году использование SHA-1 было признано небезопасным для большинства криптографических целей. Однако он всё ещё может встречаться в устаревших системах. В 2022 году NIST окончательно исключил SHA-1 из стандарта SHS.
Атаки на SHA-2
На 2025 год не известно практических атак на SHA-2, которые позволяли бы найти коллизию быстрее, чем полным перебором. Однако теоретические исследования показывают, что для SHA-256 существуют атаки с пониженной сложностью (например, 2^63.5 для 31 раунда из 64), но они не представляют угрозы для полной версии.
Скорость и ресурсоёмкость
SHA-256 и SHA-512 являются относительно быстрыми алгоритмами, что делает их уязвимыми для атак методом перебора (brute-force) при хранении паролей. Для замедления перебора применяются итерации (PBKDF2) или использование памяти (scrypt, Argon2).
Квантовая угроза
Квантовые компьютеры, использующие алгоритм Гровера, могут теоретически сократить сложность поиска коллизии для SHA-256 с 2^128 до 2^64 операций, что всё ещё остаётся практически невозможным на современных квантовых системах. Однако для долгосрочной безопасности (например, для документов, которые должны быть защищены десятилетиями) рассматривается переход на постквантовые алгоритмы, такие как SHA-3, который считается более устойчивым к квантовым атакам благодаря своей конструкции.
Интересные факты
- SHA-1 был разработан АНБ США, что породило конспирологические теории о возможных «закладках» в алгоритме. Однако независимый криптоанализ не выявил скрытых уязвимостей, а обнаруженные коллизии были результатом публичных исследований.
- В 2017 году Google продемонстрировал коллизию SHA-1, используя вычислительные мощности 110 графических процессоров (GPU) в течение нескольких месяцев. Это стало первым публичным примером практической коллизии для SHA-1.
- SHA-3 был выбран NIST в результате открытого конкурса, в котором участвовало 64 алгоритма из разных стран. Это был первый случай, когда стандарт хеширования США разрабатывался не АНБ, а международным сообществом.
- В России для криптографических целей используется собственный стандарт — ГОСТ Р 34.11-2012 («Стрибог»), который также является хеш-функцией. Он несовместим с SHA, но имеет аналогичные области применения.
Источники
- National Institute of Standards and Technology (NIST). FIPS PUB 180-4: Secure Hash Standard (SHS). — 2015.
- National Institute of Standards and Technology (NIST). FIPS PUB 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions. — 2015.
- Wang X., Yin Y. L., Yu H. Finding Collisions in the Full SHA-1 // Advances in Cryptology – CRYPTO 2005. — Springer, 2005.
- Stevens M., Bursztein E., Karpman P., Albertini A., Markov Y. The First Collision for Full SHA-1 // CRYPTO 2017. — Springer, 2017.
- Бертони Г., Демен Ж., Петерс М., ван Ассхе Г. The Keccak Reference. — 2011.
- ГОСТ Р 34.11-2012. Информационная технология. Криптографическая защита информации. Функция хеширования. — М.: Стандартинформ, 2012.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →