Битлента
Словарь терминов4 мин чтения·

SHA-256: что это за хеш и где он применяется

SHA-256 превращает любые данные в 256-битный отпечаток. Разбираем, чем он полезен для проверки файлов и сертификатов и чего он не умеет.

Отпечаток фиксированной длины

SHA-256 относится к семейству SHA-2, которое опубликовал американский институт стандартов NIST. Алгоритм принимает данные любого размера, будь то одно слово или образ диска на много гигабайт, и выдаёт значение ровно из 256 бит. Обычно его записывают как 64 шестнадцатеричных символа.

Главная особенность в том, что результат детерминирован: одни и те же данные всегда дают один и тот же отпечаток. При этом изменение одного бита на входе меняет примерно половину битов на выходе. Это свойство называют лавинным эффектом, и именно оно делает хеш пригодным для контроля целостности.

Общая идея хеш-функций описана на странице про хеш-функцию, здесь речь именно о конкретном алгоритме и его роли.

Что внутри: блоки и раунды

Внутри данные дополняются до кратной 512 битам длины и режутся на блоки. Каждый блок проходит 64 раунда, в которых перемешиваются восемь 32-битных переменных состояния с помощью побитовых сдвигов, поворотов, сложения по модулю и набора константных значений. Состояние после одного блока становится начальным для следующего, поэтому итог зависит от всего сообщения целиком.

Обратить эту операцию нельзя: из отпечатка нельзя восстановить исходные данные, потому что информация при сжатии теряется. Отсюда и вывод, что хеш не является шифрованием. У него нет ключа и нет расшифровки, а есть только сравнение.

Практическая стойкость определяется тремя требованиями: трудно найти данные по известному отпечатку, трудно найти второе сообщение с тем же отпечатком и трудно подобрать любую пару сообщений с совпадением. Для SHA-256 публичных практических атак на эти свойства не известно.

Где он встречается на практике

Самый очевидный случай: контрольная сумма при скачивании. Разработчик рядом с файлом публикует его SHA-256, вы считаете отпечаток у себя и сравниваете. Совпало, значит, файл дошёл без искажений. Но если подмена случилась и на самом сайте, то и опубликованная сумма могла измениться, поэтому сверять стоит по независимому каналу.

Второе применение связано с сертификатами: подпись сертификата обычно строится на хеше SHA-256 от его содержимого, а затем этот хеш подписывается закрытым ключом. Об этом подробнее в материале об электронной подписи. Третье применение — HMAC для проверки подлинности сообщений, токены и подпись пакетов в системах обновления.

Отдельно упомяну хранение паролей. Голый SHA-256 для этого не подходит: он быстрый, а значит, перебор идёт на огромной скорости. Для паролей применяют медленные функции с солью, такие как bcrypt, scrypt или Argon2.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Типичные заблуждения: SHA-256

Первое заблуждение: «SHA-256 шифрует». Нет, он не скрывает данные, а лишь создаёт отпечаток. Второе: «раз коллизии теоретически существуют, хеш взломан». Коллизии неизбежны математически, ведь входов бесконечно много, а выходов конечное число. Важно другое: найти их за разумное время никто не умеет.

Третье: путают SHA-256 и SHA-2 целиком. SHA-2 включает варианты SHA-224, SHA-384 и SHA-512, а SHA-3 — это уже другое семейство с иной внутренней конструкцией. Четвёртое: считать, что старые SHA-1 и MD5 тоже подойдут. Для них найдены практические коллизии, поэтому в новых системах их не используют для подписей.

Есть и тонкость для разработчиков: у SHA-256 есть атака удлинения сообщения, поэтому для проверки подлинности с секретом используют HMAC, а не простую конструкцию из секрета и данных.

Как посмотреть у себя: SHA-256

В Linux достаточно команды sha256sum с именем файла, на macOS работает shasum -a 256. В PowerShell для Windows есть командлет Get-FileHash с параметром -Algorithm SHA256, а в командной строке утилита certutil -hashfile файл SHA256. Все они выведут 64 символа, которые нужно сравнить с опубликованными.

Попробуйте эксперимент: создайте текстовый файл, посчитайте хеш, затем добавьте в конец один пробел и посчитайте снова. Значения будут выглядеть совершенно несвязанными. Так наглядно видно лавинный эффект.

Если сумма не совпала, сначала проверьте, что файл скачан полностью и не открыт в редакторе с автоматической правкой переводов строк. Часто причина именно в этом, а не во вмешательстве.

Сравнение с соседями по семейству

Иногда возникает вопрос, зачем существует несколько вариантов. SHA-224 и SHA-384 по сути усечённые версии SHA-256 и SHA-512 с другими начальными значениями. SHA-512 работает с 64-битными словами и на современных 64-разрядных процессорах нередко не медленнее, но результат длиннее. MD5 и SHA-1 дают 128 и 160 бит и считаются устаревшими для подписей из-за найденных коллизий. Для обычной проверки скачанного файла на случайное повреждение MD5 ещё встречается, но против намеренной подмены его полагаться нельзя, поэтому разработчики программ публикуют суммы SHA-256 или более длинные.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
хешкриптографияцелостность

Часто задаваемые вопросы

Читайте также