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

SHA-1

SHA-1 (Secure Hash Algorithm 1) — это криптографическая хеш-функция, разработанная Агентством национальной безопасности США (NSA) и опубликованная Национальным институтом стандартов и технологий США (NIST) в 1995 году. Она относится к семейству алгоритмов Secure Hash Algorithm (SHA) и предназначена для преобразования входных данных произвольной длины в фиксированную выходную последовательность (хеш-значение) длиной 160 бит (20 байт). SHA-1 широко применялась в протоколах безопасности, цифровых подписях и проверке целостности данных, однако к началу 2020-х годов была признана устаревшей и небезопасной для использования в криптографических целях из-за уязвимости к коллизиям.

История

Разработка и стандартизация

SHA-1 был разработан как преемник SHA-0, который был опубликован в 1993 году, но вскоре отозван из-за необъявленной уязвимости. В 1995 году NIST опубликовал SHA-1 в качестве федерального стандарта обработки информации (FIPS PUB 180-1). Алгоритм стал частью стандарта Digital Signature Standard (DSS) и использовался в протоколах SSL/TLS, SSH, PGP, а также в системах контроля версий (например, Git) для идентификации объектов.

Обнаружение уязвимостей

Первые теоретические атаки на SHA-1 были предложены в 2005 году группой криптографов (Ван Сяоюнь, Инь Ицинь и Лиза Юй). Они продемонстрировали возможность нахождения коллизий (двух разных сообщений с одинаковым хешем) с вычислительной сложностью около 2^69 операций, что значительно ниже теоретической границы 2^80 для идеальной 160-битной хеш-функции. В последующие годы сложность атак снижалась: к 2015 году была показана возможность атаки с трудоёмкостью 2^57,5.

Практическая демонстрация коллизий

В феврале 2017 года исследователи из Google и Центра математики и информатики (CWI) в Нидерландах опубликовали первую практическую коллизию для SHA-1. Они использовали метод, названный SHAttered, который потребовал 9×10^18 операций хеширования (эквивалент 110 лет работы одного графического процессора). Демонстрация показала два разных PDF-документа с одинаковым хешем SHA-1. В 2020 году была представлена атака SHAppening, снизившая стоимость нахождения коллизии до 2^63,4 операций.

Отказ от использования

После публикации SHAttered NIST рекомендовал прекратить использование SHA-1 для цифровых подписей и сертификатов к 2030 году. Крупные браузеры (Chrome, Firefox, Safari) начали постепенно отказываться от доверия к сертификатам, подписанным с использованием SHA-1. В 2021 году Microsoft выпустила обновление, блокирующее загрузку файлов с хешами SHA-1 в некоторых сценариях. К 2023 году SHA-1 был полностью исключён из стандартов TLS 1.3 и большинства криптографических библиотек.

Принцип работы

Общая схема

SHA-1 обрабатывает входное сообщение блоками по 512 бит (64 байта). Алгоритм состоит из следующих этапов:

  1. Дополнение сообщения — к исходным данным добавляется бит «1», затем нулевые биты и 64-битное представление длины исходного сообщения, чтобы общая длина стала кратной 512 битам.
  2. Инициализация — устанавливаются пять 32-битных переменных состояния (A, B, C, D, E) с фиксированными начальными значениями.
  3. Обработка блоков — каждый 512-битный блок расширяется до 80 слов (по 32 бита) и обрабатывается в 80 раундов, использующих нелинейные функции (f1–f4) и константы.
  4. Финальное объединение — после обработки всех блоков значения переменных состояния объединяются в 160-битный хеш.

Раунды

Каждый из 80 раундов включает:

Используемые нелинейные функции:

Криптостойкость и атаки

Теоретические уязвимости

Основная уязвимость SHA-1 связана с его 160-битной длиной хеша, что делает его теоретически уязвимым к атаке «дня рождения» с трудоёмкостью 2^80 операций. Однако из-за структурных недостатков (отсутствие строгой лавинной функции, линейность в некоторых раундах) практическая стойкость оказалась ниже.

Известные атаки

Сравнение с другими алгоритмами

АлгоритмДлина хешаСтойкость к коллизиямСтатус
SHA-1160 бит2^63 (практически)Устарел, не рекомендуется
SHA-256256 бит2^128Рекомендуется
SHA-3224–512 бит2^112 – 2^256Рекомендуется

Применение

Историческое использование

Современное состояние

На 2025 год SHA-1 всё ещё используется в некоторых устаревших системах и для не криптографических целей (например, дедупликация данных, хеширование паролей в низконагруженных системах). Однако для любых задач, связанных с безопасностью, настоятельно рекомендуется использовать SHA-256, SHA-3 или BLAKE2.

Переход на более безопасные алгоритмы

Рекомендации NIST

NIST рекомендует:

Миграция в Git

В 2023 году проект Git объявил о переходе на SHA-256 в качестве основного алгоритма хеширования. Однако из-за обратной совместимости SHA-1 продолжает использоваться в существующих репозиториях.

Критика и ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →