Цифровая подпись решает сразу две задачи: подтверждает, что файл действительно создан заявленным издателем, и доказывает, что после подписания его никто не изменял — ни байт кода, ни встроенные ресурсы. Если подпись валидна, целостность файла проверена автоматически; если подписи нет, остаётся второй способ — сравнение контрольной суммы (хеша) с эталонной, опубликованной разработчиком.
Главный ориентир такой: подпись надёжнее хеша, потому что она защищает ещё и от подмены самой эталонной суммы на скомпрометированном сайте. Хеш-сравнение имеет смысл только тогда, когда вы получили эталонное значение из независимого источника — например, по защищённому каналу или с зеркала, которому доверяете.
- Что именно проверяет цифровая подпись
- Подпись и хеш: в чём разница на практике
- Проверка подписи исполняемого файла в Windows
- Способ 1: свойства файла
- Способ 2: PowerShell для детальной проверки
- Способ 3: signtool для массовой проверки
- Проверка подписи пакетов в macOS и Linux
- Проверка целостности через контрольные суммы
- Как вычислить хеш
- Откуда брать эталонную сумму
- Типичные ошибки при проверке
- Как действовать в разных ситуациях
- Частые вопросы
- Подпись действительна — значит, файл безопасен?
- Почему у многих популярных программ нет подписи?
- Можно ли проверить подпись документа PDF или офисного файла?
- Что делать, если хеш совпал, но программа ведёт себя странно?
- С чего начать прямо сейчас
Что именно проверяет цифровая подпись
Подпись файла работает так: издатель вычисляет криптографический хеш содержимого, шифрует его своим закрытым ключом и вкладывает результат в файл или публикует рядом. Проверяющая сторона расшифровывает подпись открытым ключом издателя (который подтверждён сертификатом) и сравнивает полученный хеш с хешем текущего файла. Совпадение означает два факта одновременно:
- файл побитово совпадает с тем, что существовал в момент подписания, — это и есть гарантия целостности;
- подписать мог только владелец закрытого ключа, то есть авторство подтверждено.
Важно понимать границу применимости. Подпись подтверждает целостность относительно момента подписания, а не «правильность» программы в целом. Если сам издатель выпустил повреждённую или вредоносную версию и подписал её, проверка пройдёт успешно. Поэтому подпись отвечает на вопрос «это тот же файл, который сделал издатель?», но не заменяет антивирусную проверку и здравую оценку источника загрузки.
Подпись и хеш: в чём разница на практике
| Критерий | Цифровая подпись | Сравнение хеша |
|---|---|---|
| Защита от подмены файла | Да | Да, при совпадении сумм |
| Защита от подмены эталона | Да, через цепочку сертификатов | Нет: если злоумышленник контролирует сайт, он опубликует хеш подменённого файла |
| Подтверждение автора | Да | Нет |
| Нужен ли интернет для проверки | Обычно да, для проверки сертификата | Нет |
| Где применяется чаще всего | Исполняемые файлы Windows, пакеты приложений, драйверы, документы | Дистрибутивы Linux, архивы, образы дисков, исходный код |
Проверка подписи исполняемого файла в Windows
Большинство программ для Windows подписаны сертификатом Authenticode. Это самый быстрый сценарий проверки, доступный без установки дополнительных инструментов.
Способ 1: свойства файла
- Щёлкните по файлу правой кнопкой мыши и выберите «Свойства».
- Если файл подписан, появится вкладка «Цифровые подписи». Откройте её.
- Выберите подпись в списке и нажмите «Сведения».
- В окне должна быть строка о том, что подпись действительна (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-строк глазами часто приводит к ошибкам.
Откуда брать эталонную сумму
Это самое слабое звено всей схемы. Хеш, опубликованный на той же странице, что и ссылка на скачивание, защищает только от ошибок передачи, но не от атакующего, который контролирует эту страницу. Повысить надёжность можно так:
- Возьмите эталонный хеш из независимого канала: официального анонса в рассылке, документа, подписанного GPG, страницы, доступной по другому домену разработчика.
- Для дистрибутивов Linux проверьте подпись самого файла с суммами: обычно публикуется файл SHA256SUMS и его GPG-подпись, которую можно проверить ключом проекта.
- Убедитесь, что используете HTTPS при скачивании: это хотя бы защищает канал от подмены по пути.
Типичные ошибки при проверке
- Сверка хеша с той же страницей загрузки. Такая проверка ловит только обрыв связи, но бессмысленна против целенаправленной подмены.
- Игнорирование статуса «файл изменён после подписания». Иногда причина безобидна — например, установщик пересобирается при каждом релизе, и подпись ставится до финального шага. Но выяснять это нужно у разработчика, а не запускать файл наугад.
- Доверие имени издателя без сверки. Название организации в сертификате должно соответствовать официальному сайту. Похожие написания и «технические» названия компаний — повод насторожиться.
- Использование MD5 «потому что так в инструкции десятилетней давности». Если проект до сих пор публикует только MD5, это само по себе сигнал о формальном отношении к безопасности.
- Проверка одного файла из набора. Если дистрибутив состоит из нескольких частей, проверять нужно каждую, иначе повреждение в непроверенной части останется незамеченным.
- Проверка после запуска. Целостность проверяют до первого запуска скачанного файла, а не после.
Как действовать в разных ситуациях
| Ситуация | Что делать |
|---|---|
| Файл подписан, статус Valid | Целостность подтверждена; дополнительно сверьте имя издателя с официальным сайтом |
| Статус HashMismatch или «изменён после подписания» | Не запускайте файл; перекачайте из официального источника и проверьте снова |
| Файл не подписан | Ищите опубликованный хеш SHA-256 или GPG-подпись; если их нет вовсе, оцените надёжность источника отдельно |
| Хеш не совпал | Перекачайте файл, проверьте, что сравниваете один и тот же алгоритм; повторное несовпадение — проблема источника или канала |
| Сертификат истёк или цепочка не строится | Проверьте системную дату и подключение к сети; при сохранении проблемы уточните у разработчика, ожидаемо ли это |
Частые вопросы
Подпись действительна — значит, файл безопасен?
Это подтверждение авторства и неизменности, но не безопасности. Подписанный файл может содержать уязвимости или нежелательное поведение, которое заложил сам издатель. Подпись стоит рассматривать как один из слоёв проверки наряду с репутацией источника и антивирусным сканированием.
Почему у многих популярных программ нет подписи?
Сертификаты подписывания кода стоят денег и требуют организационных процедур, поэтому небольшие проекты и open-source-разработчики нередко обходятся публикацией хешей и GPG-подписей. Отсутствие Authenticode-подписи само по себе не признак вредоноса, но лишает вас автоматического способа проверить целостность.
Можно ли проверить подпись документа PDF или офисного файла?
Да. Просмотрщики PDF и офисные пакеты показывают статус электронной подписи в панели сведений о документе. Логика та же: валидная подпись означает, что документ не менялся после подписания, а изменения после подписания помечаются как нарушение.
Что делать, если хеш совпал, но программа ведёт себя странно?
Совпадение хеша говорит лишь о том, что вы получили именно тот файл, который описан эталоном. Если источник сам оказался скомпрометированным, эталон может описывать вредоносную версию. В таком случае ориентируйтесь на поведение программы, отчёты других пользователей и рекомендации разработчика.
С чего начать прямо сейчас
Для исполняемого файла Windows откройте «Свойства», вкладку «Цифровые подписи» и убедитесь, что статус — действительная подпись, а имя издателя совпадает с официальным сайтом разработчика. Для архива или образа найдите на странице загрузки хеш SHA-256, вычислите сумму скачанного файла через certutil, Get-FileHash или sha256sum и сравните строки посимвольно. Если ни подписи, ни эталонного хеша у проекта нет, отнеситесь к источнику загрузки максимально критично: скачивайте только с основного домена разработчика по HTTPS и перед запуском прогоните файл антивирусом.
Материал носит информационный характер и описывает общие методы проверки файлов. Конкретные требования к подписям, алгоритмам и инструментам зависят от операционной системы, версии ПО и политики организации; при работе с конфиденциальными данными сверяйте процедуры с актуальной документацией и внутренними регламентами безопасности.
