Как сгенерировать SHA-1 хеш онлайн. История алгоритма, уязвимости и коллизии. Почему SHA-1 заменили на SHA-256. Где ещё можно встретить SHA-1 в старых системах.
Введение
SHA-1 — это криптографическая хеш-функция, которая была стандартом индустрии на протяжении почти двух десятилетий. Она проверяла целостность файлов, защищала SSL-сертификаты и хранила пароли в базах данных. Сегодня SHA-1 официально признана небезопасной и выведена из эксплуатации в большинстве систем. Но её всё ещё можно встретить в старых проектах, легаси-системах и Git-репозиториях. Понимание того, как работала SHA-1 и почему от неё отказались — это важный урок эволюции криптографии. В этой статье разберём устройство SHA-1, историю её взлома и случаи, когда её всё ещё можно использовать.
Как работает SHA-1
SHA-1 — Secure Hash Algorithm 1 — была разработана Агентством национальной безопасности США и опубликована в 1995 году. Она принимает сообщение длиной до 2 в 64-й степени бит и выдаёт 160-битный хеш, который обычно записывается как 40 шестнадцатеричных символов. Алгоритм работает блоками по 512 бит. Внутри — пять 32-битных регистров состояния, которые инициализируются фиксированными значениями. Каждый блок пропускается через 80 раундов преобразований с использованием побитовых операций, циклических сдвигов и таблицы констант. После обработки всех блоков пять регистров конкатенируются в 160-битный хеш. Лавинный эффект гарантирует, что изменение одного бита в сообщении полностью меняет хеш. Визуально SHA-1-хеш выглядит как 40-значная строка из цифр и букв от A до F.
Где применялась SHA-1
На пике популярности SHA-1 была везде. SSL-сертификаты подписывались с использованием SHA-1, и браузеры проверяли эти подписи при установке защищённого соединения. Git использует SHA-1 для идентификации коммитов: каждый коммит имеет уникальный хеш, по которому к нему можно обратиться. Программное обеспечение распространялось с SHA-1-хешами для проверки целостности. Пароли в базах данных хранились в виде SHA-1-хешей. Цифровые подписи документов использовали SHA-1. Протоколы SSH, PGP, DNSSEC — все они поддерживали SHA-1. Это был универсальный стандарт, встроенный в тысячи продуктов и библиотек.
Уязвимости SHA-1 и история взлома
Первые теоретические атаки на SHA-1 появились в 2005 году. Исследователи показали, что стойкость алгоритма ниже заявленных 80 бит — около 69 бит для поиска коллизий. Это всё ещё много для практической атаки, но сигнал тревожный. В 2012 году теоретическая стойкость упала до 61 бита. Переломный момент наступил в 2017 году: команда Google и CWI Amsterdam провела первую практическую атаку, сгенерировав два разных PDF-файла с одинаковым SHA-1-хешем. Атака получила название SHAttered. Она потребовала 110 лет процессорного времени на GPU-ферме, что эквивалентно примерно 110 000 долларов вычислительных ресурсов в облаке. После этой демонстрации браузеры прекратили доверять SHA-1-сертификатам, а индустрия ускорила миграцию на SHA-2. В 2020 году была представлена ещё более эффективная атака с вычислительной сложностью всего 2 в 63.4 степени, что сделало атаки на SHA-1 практически доступными.
Где SHA-1 ещё используется и почему от неё не отказались полностью
Git — самый заметный пример. Каждый коммит идентифицируется SHA-1-хешем, и смена хеш-функции означает несовместимость со всеми существующими репозиториями. Разработчики Git работают над переходом на SHA-256, но процесс идёт медленно из-за масштаба изменений. Второй пример — старые встраиваемые системы и оборудование, которое невозможно обновить: промышленные контроллеры, медицинские приборы, сетевые устройства. Третье — легаси-приложения, написанные десятилетия назад, где смена хеш-функции требует полного рефакторинга. В этих случаях SHA-1 продолжают использовать с осознанием рисков и дополнительными мерами защиты. Генератор SHA-1 среди 126 инструментов Vibes доступен для обратной совместимости: если вы столкнулись со старой системой, требующей SHA-1, инструмент быстро сгенерирует хеш.
Чем заменить SHA-1
Современный стандарт — SHA-256 из семейства SHA-2. Он выдаёт 256-битный хеш и на данный момент не имеет известных практических уязвимостей. Для паролей используйте не простой хеш, а медленные функции: bcrypt, scrypt, Argon2. Для контроля целостности файлов можно использовать SHA-256 или SHA-3 — более новое семейство, основанное на другом математическом принципе. Если нужно что-то быстрое и некриптографическое — BLAKE3. Миграция с SHA-1 на SHA-256 обычно требует изменения конфигурации сервера, обновления библиотек и перегенерации всех существующих хешей. Это трудоёмко, но необходимо для безопасности.
Часто задаваемые вопросы
Можно ли ещё использовать SHA-1 для проверки целостности файлов? Да, но с оговорками. Если файл скачан с доверенного источника по HTTPS, SHA-1 достаточен для проверки случайных ошибок передачи. Но если файл может быть подменён злоумышленником целенаправленно, SHA-1 не защитит — атакующий может создать поддельный файл с таким же хешем.
Почему Git до сих пор использует SHA-1? Git использует SHA-1 не для безопасности, а для идентификации объектов. Коллизия в Git теоретически возможна, но для этого злоумышленник должен создать специальный коммит, хеш которого совпадёт с хешем другого коммита. Практическая эксплуатация такой атаки крайне сложна, поэтому Git продолжает работать на SHA-1, но работает над переходом на SHA-256.
В чём разница между SHA-0, SHA-1 и SHA-2? SHA-0 — оригинальный алгоритм 1993 года, который был отозван до публикации из-за обнаруженной уязвимости. SHA-1 — исправленная версия 1995 года. SHA-2 — новое семейство 2001 года, включающее SHA-256, SHA-384, SHA-512, с другой внутренней структурой и без известных уязвимостей.
Сколько времени занимает генерация SHA-1 хеша? Доли миллисекунды для текста. SHA-1 была спроектирована быстрой, и это одна из причин, почему её не следует использовать для паролей: злоумышленник может перебирать миллиарды вариантов в секунду.
Можно ли преобразовать SHA-1 хеш в SHA-256? Нет. Это разные функции, и хеши от одного сообщения будут разными. Чтобы получить SHA-256-хеш, нужно заново хешировать исходное сообщение алгоритмом SHA-256. Если исходное сообщение утеряно, а есть только SHA-1-хеш, преобразовать его невозможно.
Как определить, что передо мной SHA-1 хеш? SHA-1 хеш — это 40 символов шестнадцатеричной системы. Если вы видите строку из 40 цифр и букв A-F, это может быть SHA-1. MD5-хеш — 32 символа, SHA-256 — 64 символа. Длина — надёжный идентификатор типа хеша.