Как обнаружить изменение подписанного файла: практическое руководство

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

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

Что происходит при подмене файла

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

При этом важно различать два разных результата проверки:

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

Средства проверки обычно сообщают причину отдельно, и это принципиально: «файл изменён» и «сертификат просрочен» — разные проблемы с разными выводами. Первый случай говорит о возможной подделке, второй — о формальной проблеме с сертификатом.

Способ 1. Проверка электронной подписи специализированным ПО

Самый надёжный путь — проверить подпись тем классом программ, которые для этого предназначены. Для российской квалифицированной электронной подписи (КЭП) стандартный инструмент — КриптоПро CSP вместе с утилитами вроде КриптоПро Office Signature или КриптоАРМ; существуют и другие сертифицированные средства, например ViPNet CSP со своими утилитами. Для подписей в европейском формате (PAdES, XAdES, CAdES) применяются верификаторы DSS-сервисов и отдельные программы.

Типичный порядок действий:

  1. Откройте программу проверки подписи и укажите исходный подписанный файл.
  2. Запустите проверку. Программа рассчитает текущий хеш файла и сверит его с зашифрованным значением в подписи.
  3. Прочитайте результат целиком, а не только фразу «подпись недействительна»: причина указывается в деталях.
  4. Если проверка требует сертификат подписанта, убедитесь, что используется корректный сертификат — иногда файл подписан несколькими людьми, и нужно проверить все подписи.

Если программа сообщает, что хеш файла не совпадает со значением в подписи, — содержимое менялось после подписания. Это самый прямой ответ на вопрос «изменили ли файл».

Отдельные подписи и встроенные подписи

Файл может быть подписан двумя способами, и это влияет на проверку:

  • Отсоединённая подпись — подпись лежит в отдельном файле рядом с основным (например, document.pdf и document.pdf.sig). Проверять нужно оба файла вместе: если основной файл заменили, а подпись оставили старую, расхождение обнаружится сразу.
  • Совмещённая (встроенная) подпись — подпись внутри самого файла, как в PDF с цифровой подписью или в подписанном документе Microsoft Office. Здесь проверка идёт по одному файлу, но важно, чтобы средство проверки поддерживало формат.

Способ 2. Встроенные механизмы операционной системы и приложений

Часто ничего дополнительно ставить не нужно — проверка уже встроена туда, где файл открывается.

PDF-документы

Adobe Acrobat Reader и большинство серьёзных PDF-просмотрщиков показывают статус цифровой подписи прямо в документе: панель подписей отображает, действительна ли подпись и не менялся ли документ после подписания. Если после подписи в PDF вносили правки, просмотрщик пометит документ как изменённый. Обращайте внимание на предупреждение вида «документ был изменён после подписания» — это и есть обнаружение подмены.

Документы Microsoft Office

Word, Excel и PowerPoint при открытии файла с цифровой подписью показывают жёлтую панель с информацией о подписи. Если файл редактировался после подписания, подпись помечается как недействительная, а в сведениях о подписи видно, что содержимое изменено.

Исполняемые файлы и драйверы Windows

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

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

Для более детальной проверки в Windows есть консольная утилита signtool verify (входит в Windows SDK), которая показывает подробности по всем подписям файла.

Пакеты и репозитории Linux

В мире Linux целостность пакетов проверяется менеджерами пакетов автоматически: GPG-подписи репозиториев сверяются при установке. Отдельно скачанные файлы (например, образы ISO) обычно сопровождаются файлом контрольных сумм и подписью к нему — их проверяют утилитами gpg или sha256sum.

Способ 3. Сверка хеш-суммы

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

  • В Windows: команда certutil -hashfile имя_файла SHA256 в командной строке.
  • В Linux и macOS: команды sha256sum или shasum -a 256.

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

Сравнение способов проверки

Способ Что подтверждает Когда подходит Ограничения
Проверка ЭЦП специализированным ПО Неизменность содержимого и авторство Юридически значимые документы, договоры, отчётность Нужно установленное средство криптографии и корректный сертификат
Встроенная проверка в PDF/Office Изменение документа после подписания Быстрая проверка при открытии документа Зависит от корректности настроек просмотрщика и доверия к сертификату
Свойства файла в Windows Неизменность программы после подписи издателем Проверка скачанных программ и драйверов Не заменяет антивирусную проверку; подпись может быть украденной
Сверка хеш-суммы Совпадение с известным эталоном Проверка образов, архивов, дистрибутивов Эталон должен быть из надёжного источника; авторство не подтверждает

Почему «файл открывается» — не аргумент

Распространённая ошибка — считать, что раз документ открывается и выглядит нормально, он не изменялся. Это неверно по двум причинам.

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

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

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

  • Игнорирование деталей результата. Сообщение «подпись недействительна» без чтения причины ведёт к неверным выводам: файл мог быть целым, а проблема — в отозванном сертификате.
  • Проверка не того файла. При отсоединённой подписи люди проверяют только файл подписи или только документ. Проверять нужно пару целиком.
  • Неправильные настройки времени. Некоторые проверки опираются на метку времени (timestamp). Без неё после истечения срока сертификата подпись может считаться недействительной, хотя на момент подписания всё было в порядке.
  • Доверие к скриншотам. Скриншот окна проверки ничего не доказывает: его легко изготовить. Значима только проверка, выполненная вами на своей машине.
  • Пересохранение файла до проверки. Открытие и сохранение документа в редакторе может изменить его структуру и «сломать» картину проверки. Проверяйте файл в том виде, в каком получили.

Что делать, если изменение обнаружено

Порядок действий зависит от контекста:

  1. Зафиксируйте результат. Сделайте снимок экрана с полными деталями проверки и сохраните сам подозрительный файл без изменений.
  2. Сравните с эталоном. Если у вас есть заведомо неизменённая копия (например, отправленная по другому каналу), сравните их хеш-суммы, чтобы понять, где произошла подмена.
  3. Свяжитесь с отправителем. Изменение могло произойти случайно — при пересохранении, конвертации почтовым сервером, антивирусом. Не все изменения злонамеренны.
  4. При признаках подмены в важном документе обратитесь к специалисту по компьютерно-технической экспертизе: для спора понадобится заключение, а не личная проверка.
  5. Не используйте подозрительные исполняемые файлы. Если изменена подпись программы, запускать её нельзя до выяснения причин.

Сценарии: как действовать в конкретной ситуации

  • Получили договор с КЭП по почте. Проверьте подпись в сертифицированном средстве криптографии до подписания со своей стороны. Если хеш не совпадает — запрашивайте файл заново по защищённому каналу.
  • Скачали программу с сайта разработчика. Посмотрите свойства файла: подпись должна быть действительна, а имя издателя — соответствовать разработчику. Дополнительно сверьте хеш-сумму, если она опубликована.
  • PDF из банка или госоргана показывает «документ изменён». Не полагайтесь на такую копию: запросите оригинал напрямую у организации или проверьте документ через её официальный сервис проверки.
  • Архив с контрольными суммами. Пересчитайте сумму локально и сравните. Расхождение означает повреждение при передаче либо подмену — в обоих случаях файл использовать не стоит.

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

Можно ли изменить файл так, чтобы подпись осталась действительной?

Практически нет. Для этого пришлось бы подобрать другой файл с тем же хешем, что требует взлома самой хеш-функции. Современные алгоритмы (SHA-256 и сильнее) этому не поддаются на доступном сегодня уровне вычислений. Теоретические атаки на устаревшие алгоритмы вроде MD5 и SHA-1 существуют, поэтому старые подписи вызывают больше вопросов, чем новые.

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

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

Файл изменили, а потом подписали заново. Проверка это покажет?

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

Обязательно ли ставить тяжёлое ПО для разовой проверки?

Для PDF и документов Office достаточно встроенных средств просмотра. Для квалифицированной электронной подписи в российском правовом поле нужна совместимая криптоплатформа — без неё корректную проверку КЭП выполнить не получится. Разовые проверки хешей делаются штатными средствами системы.

Главное

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

Материал носит информационный характер и не заменяет консультацию специалиста по информационной безопасности или юриста. Решения о юридической значимости документов и действиях при обнаружении подмены принимайте с учётом конкретных обстоятельств и актуальных требований законодательства.

PEFile.ru