Как проверить целостность файла через цифровую подпись: пошаговая инструкция

Цифровая подпись решает сразу две задачи: подтверждает, что файл действительно создан заявленным издателем, и доказывает, что после подписания его никто не изменял — ни байт кода, ни встроенные ресурсы. Если подпись валидна, целостность файла проверена автоматически; если подписи нет, остаётся второй способ — сравнение контрольной суммы (хеша) с эталонной, опубликованной разработчиком.

Главный ориентир такой: подпись надёжнее хеша, потому что она защищает ещё и от подмены самой эталонной суммы на скомпрометированном сайте. Хеш-сравнение имеет смысл только тогда, когда вы получили эталонное значение из независимого источника — например, по защищённому каналу или с зеркала, которому доверяете.

Что именно проверяет цифровая подпись

Подпись файла работает так: издатель вычисляет криптографический хеш содержимого, шифрует его своим закрытым ключом и вкладывает результат в файл или публикует рядом. Проверяющая сторона расшифровывает подпись открытым ключом издателя (который подтверждён сертификатом) и сравнивает полученный хеш с хешем текущего файла. Совпадение означает два факта одновременно:

  • файл побитово совпадает с тем, что существовал в момент подписания, — это и есть гарантия целостности;
  • подписать мог только владелец закрытого ключа, то есть авторство подтверждено.

Важно понимать границу применимости. Подпись подтверждает целостность относительно момента подписания, а не «правильность» программы в целом. Если сам издатель выпустил повреждённую или вредоносную версию и подписал её, проверка пройдёт успешно. Поэтому подпись отвечает на вопрос «это тот же файл, который сделал издатель?», но не заменяет антивирусную проверку и здравую оценку источника загрузки.

Подпись и хеш: в чём разница на практике

Критерий Цифровая подпись Сравнение хеша
Защита от подмены файла Да Да, при совпадении сумм
Защита от подмены эталона Да, через цепочку сертификатов Нет: если злоумышленник контролирует сайт, он опубликует хеш подменённого файла
Подтверждение автора Да Нет
Нужен ли интернет для проверки Обычно да, для проверки сертификата Нет
Где применяется чаще всего Исполняемые файлы Windows, пакеты приложений, драйверы, документы Дистрибутивы Linux, архивы, образы дисков, исходный код

Проверка подписи исполняемого файла в Windows

Большинство программ для Windows подписаны сертификатом Authenticode. Это самый быстрый сценарий проверки, доступный без установки дополнительных инструментов.

Способ 1: свойства файла

  1. Щёлкните по файлу правой кнопкой мыши и выберите «Свойства».
  2. Если файл подписан, появится вкладка «Цифровые подписи». Откройте её.
  3. Выберите подпись в списке и нажмите «Сведения».
  4. В окне должна быть строка о том, что подпись действительна (valid), имя подписавшей организации и время подписания.

Обратите внимание на статус. Формулировки вроде «подпись недействительна» или «файл был изменён после подписания» — прямой признак того, что содержимое отличается от оригинала. Такой файл запускать не следует. Отдельно смотрите на предупреждение о том, что цепочка сертификатов не может быть проверена: оно часто возникает у файлов без доступа к сети или с истёкшим сертификатом и требует более внимательной оценки.

Способ 2: PowerShell для детальной проверки

Командлет Get-AuthenticodeSignature показывает полный статус, включая причину проблемы:

  • Valid — подпись действительна, файл не изменялся;
  • HashMismatch — содержимое изменилось после подписания, файл повреждён или подменён;
  • NotSigned — подписи нет вообще;
  • UnknownError или проблемы с цепочкой — нужно разбираться отдельно: возможны отсутствие корневого сертификата, истечение срока или отзыв.

Тот же командлет возвращает объект со свойством SignerCertificate, где видно имя издателя, срок действия сертификата и отпечаток. Сопоставьте имя организации с официальным сайтом разработчика: совпадение названия компании — обязательное, но недостаточное условие доверия.

Способ 3: signtool для массовой проверки

Если нужно проверить много файлов, удобнее утилита signtool из состава Windows SDK. Команда verify с параметром pa выполняет полную проверку политики подписывания, включая построение цепочки сертификатов. Это стандартный инструмент, которым пользуются сами разработчики при публикации сборок.

Проверка подписи пакетов в macOS и Linux

В macOS приложения распространяются в подписанных контейнерах, и система проверяет их автоматически при первом запуске. Для ручной проверки используется команда codesign с параметром verify и deep-проверкой вложенных компонентов. Дополнительная команда spctl оценивает, соответствует ли приложение политике Gatekeeper, то есть прошло ли нотаризацию Apple. Если система сообщает о нарушении подписи, значит содержимое пакета менялось после подписания.

В Linux экосистеме роль подписей чаще играют GPG-подписи дистрибутивов и репозиториев. Менеджеры пакетов проверяют подписи автоматически, поэтому главный практический совет — не отключать проверку подписей в настройках репозиториев и импортировать ключи только из доверенных источников. Для отдельных файлов разработчики обычно публикуют GPG-подпись (.sig или .asc) рядом с дистрибутивом: её проверяют командой gpg —verify, предварительно импортировав открытый ключ автора и убедившись в его подлинности по отпечатку.

Проверка целостности через контрольные суммы

Когда подписи нет, остаётся сравнение хеша. Алгоритм берёт содержимое файла и вычисляет короткую строку фиксированной длины. Изменение даже одного байта даёт совершенно другой результат, поэтому совпадение сумм практически исключает случайное повреждение и делает преднамеренную подмену крайне трудоёмкой — при условии использования современных алгоритмов.

  • SHA-256 — текущий стандарт де-факто; используйте его всегда, когда он доступен.
  • SHA-512 — тоже надёжный вариант, часто встречается в дистрибутивах Linux.
  • MD5 и SHA-1 — устаревшие алгоритмы с известными теоретическими коллизиями. Для защиты от злонамеренной подмены полагаться на них нельзя; допустимо лишь как грубая проверка случайного повреждения при скачивании.

Как вычислить хеш

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

После вычисления сравните результат с эталоном посимвольно. Удобнее всего скопировать обе строки в текстовый редактор и сравнить визуально либо использовать команду сравнения строк в терминале — ручное сопоставление длинных hex-строк глазами часто приводит к ошибкам.

Откуда брать эталонную сумму

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

  1. Возьмите эталонный хеш из независимого канала: официального анонса в рассылке, документа, подписанного GPG, страницы, доступной по другому домену разработчика.
  2. Для дистрибутивов Linux проверьте подпись самого файла с суммами: обычно публикуется файл SHA256SUMS и его GPG-подпись, которую можно проверить ключом проекта.
  3. Убедитесь, что используете HTTPS при скачивании: это хотя бы защищает канал от подмены по пути.

Типичные ошибки при проверке

  • Сверка хеша с той же страницей загрузки. Такая проверка ловит только обрыв связи, но бессмысленна против целенаправленной подмены.
  • Игнорирование статуса «файл изменён после подписания». Иногда причина безобидна — например, установщик пересобирается при каждом релизе, и подпись ставится до финального шага. Но выяснять это нужно у разработчика, а не запускать файл наугад.
  • Доверие имени издателя без сверки. Название организации в сертификате должно соответствовать официальному сайту. Похожие написания и «технические» названия компаний — повод насторожиться.
  • Использование MD5 «потому что так в инструкции десятилетней давности». Если проект до сих пор публикует только MD5, это само по себе сигнал о формальном отношении к безопасности.
  • Проверка одного файла из набора. Если дистрибутив состоит из нескольких частей, проверять нужно каждую, иначе повреждение в непроверенной части останется незамеченным.
  • Проверка после запуска. Целостность проверяют до первого запуска скачанного файла, а не после.

Как действовать в разных ситуациях

Ситуация Что делать
Файл подписан, статус Valid Целостность подтверждена; дополнительно сверьте имя издателя с официальным сайтом
Статус HashMismatch или «изменён после подписания» Не запускайте файл; перекачайте из официального источника и проверьте снова
Файл не подписан Ищите опубликованный хеш SHA-256 или GPG-подпись; если их нет вовсе, оцените надёжность источника отдельно
Хеш не совпал Перекачайте файл, проверьте, что сравниваете один и тот же алгоритм; повторное несовпадение — проблема источника или канала
Сертификат истёк или цепочка не строится Проверьте системную дату и подключение к сети; при сохранении проблемы уточните у разработчика, ожидаемо ли это

Частые вопросы

Подпись действительна — значит, файл безопасен?

Это подтверждение авторства и неизменности, но не безопасности. Подписанный файл может содержать уязвимости или нежелательное поведение, которое заложил сам издатель. Подпись стоит рассматривать как один из слоёв проверки наряду с репутацией источника и антивирусным сканированием.

Почему у многих популярных программ нет подписи?

Сертификаты подписывания кода стоят денег и требуют организационных процедур, поэтому небольшие проекты и open-source-разработчики нередко обходятся публикацией хешей и GPG-подписей. Отсутствие Authenticode-подписи само по себе не признак вредоноса, но лишает вас автоматического способа проверить целостность.

Можно ли проверить подпись документа PDF или офисного файла?

Да. Просмотрщики PDF и офисные пакеты показывают статус электронной подписи в панели сведений о документе. Логика та же: валидная подпись означает, что документ не менялся после подписания, а изменения после подписания помечаются как нарушение.

Что делать, если хеш совпал, но программа ведёт себя странно?

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

С чего начать прямо сейчас

Для исполняемого файла Windows откройте «Свойства», вкладку «Цифровые подписи» и убедитесь, что статус — действительная подпись, а имя издателя совпадает с официальным сайтом разработчика. Для архива или образа найдите на странице загрузки хеш SHA-256, вычислите сумму скачанного файла через certutil, Get-FileHash или sha256sum и сравните строки посимвольно. Если ни подписи, ни эталонного хеша у проекта нет, отнеситесь к источнику загрузки максимально критично: скачивайте только с основного домена разработчика по HTTPS и перед запуском прогоните файл антивирусом.

Материал носит информационный характер и описывает общие методы проверки файлов. Конкретные требования к подписям, алгоритмам и инструментам зависят от операционной системы, версии ПО и политики организации; при работе с конфиденциальными данными сверяйте процедуры с актуальной документацией и внутренними регламентами безопасности.

PEFile.ru