Легендарный SHA-1: Взлет и падение
SHA-1 (Secure Hash Algorithm 1) — это хеш-функция, которая правила интернетом почти два десятилетия. Разработанная АНБ (NSA) в 1995 году, она стала стандартом де-факто для SSL-сертификатов, цифровых подписей и систем контроля версий.
Однако сегодня SHA-1 официально "мертв" для криптографических задач. Тем не менее, он остается важным инструментом для проверки целостности и legacy-систем.
Атака SHAttered: Почему Google убил SHA-1?
Долгое время считалось, что найти два разных файла с одинаковым SHA-1 хешем (коллизию) невозможно. Но в 2017 году исследователи из Google и CWI Amsterdam доказали обратное в проекте SHAttered.
Они создали два разных PDF-документа — один легитимный контракт, а другой поддельный — которые имели абсолютно идентичный SHA-1 хеш. Это означало конец эры доверия к SHA-1.
Где SHA-1 используется до сих пор?
1. Git и контроль версий
Самый известный пример — система Git. Каждый коммит в вашем репозитории идентифицируется именно SHA-1 хешем (40 символов). Линус Торвальдс выбрал его не для безопасности от хакеров, а для защиты от случайного повреждения данных. (Примечание: Git постепенно переходит на SHA-256).
2. Проверка целостности (Checksums)
Когда вы скачиваете файлы (особенно драйверы или дистрибутивы Linux), рядом часто указан SHA-1. Он отлично подходит, чтобы убедиться: "Файл скачался полностью, ни один бит не потерян".
3. Старые базы данных
Многие legacy-системы до сих пор хранят хеши паролей или идентификаторы записей в формате SHA-1.
Технические характеристики
- Длина хеша: 160 бит (20 байт).
- Формат вывода: Строка из 40 шестнадцатеричных символов.
- Размер блока: 512 бит.
- Семейство: MD5 → SHA-0 → SHA-1 → SHA-2.
Часто задаваемые вопросы (FAQ)
Можно ли расшифровать SHA-1?
Нет. Как и любой хеш, это односторонняя функция. Но из-за слабых мест его можно "взломать" перебором (brute-force) или по радужным таблицам быстрее, чем современные алгоритмы.
Почему он выдает 40 символов?
Потому что 160 бит = 20 байт. В hex-формате (шестнадцатеричном) каждый байт кодируется 2 символами. 20 * 2 = 40 символов.
Что использовать вместо него?
Для паролей: Argon2 или Bcrypt.
Для файлов и подписей: SHA-256 (золотой стандарт) или SHA-512.