Проверка подписи PDF

Проанализируйте PDF на наличие полей подписи, посчитайте маркеры подписи и проанализируйте окно целостности ByteRange.

Проанализируйте PDF на наличие полей подписи, посчитайте маркеры подписи и проанализируйте окно целостности ByteRange. Проанализируйте PDF на наличие полей подписи, посчитайте маркеры подписи и проанализируйте окно целостности ByteRange.

Справка

Как работают подписи PDF

Цифровая подпись в PDF — это не штамп, нарисованный на странице (хотя визуальное представление подписи тоже может существовать). Это криптографический объект: словарь подписи, значение /Contents которого содержит закодированную в DER структуру PKCS#7 SignedData. Эта структура содержит сертификат подписанта, алгоритм хеширования и подпись, вычисленную над точным срезом байтов PDF. Массив /ByteRange в словаре подписи описывает точно, какие диапазоны байтов файла охвачены подписью: обычно [0, a, b, c], что означает «байты 0..a-1 и b..b+c-1». Всё внутри этих диапазонов подписано; всё снаружи — само значение подписи — не подписано. Такое устройство позволяет подписать PDF, не зная его итоговую длину заранее.

Почему ByteRange важен для обнаружения подделки

Чтобы проверить подпись, проверяющий хеширует байты в подписанных диапазонах и сравнивает их с дайджестом, встроенным в структуру PKCS#7. Если кто-то отредактирует PDF после подписания, охваченные байты изменятся, пересчитанный хеш разойдётся, и проверка не пройдёт — это и есть сигнал подделки. Поэтому /ByteRange определяет окно целостности: подпись может защитить только те байты, которые она охватывает. Подпись, диапазоны которой не покрывают весь документ, оставляет остаток файла открытым для незаметного изменения. Этот проверяющий сообщает, присутствует ли диапазон и начинается ли он с байта 0, покрывая начало и конец — форму, которую производит любой инструмент подписания.

Что проверяет этот инструмент

Он разбирает PDF с помощью встроенной библиотеки pdf-lib (Apache-2.0) и сообщает: количество страниц; число полей подписи, найденных в AcroForm; число маркеров /FT /Sig в необработанном байтовом потоке; существует ли массив /ByteRange; и имеет ли этот диапазон каноническую форму [0, head, tailStart, tailLen]. PDF с нулём маркеров не имеет подписей вообще. PDF с маркерами, но без разбираемого диапазона, необычен и заслуживает более пристального взгляда. Полная криптографическая проверка — пересчёт хешей и валидация цепочки сертификатов — требует полной цепочки подписанта и хранилища доверия; эта страница сосредоточена на структурном анализе, который показывает, есть ли подписи и цело ли окно целостности.

Как интерпретировать результаты

Более одного маркера подписи обычно означает несколько подписей или добавочное обновление, повторно подписавшее документ. Зашифрованный PDF может скрыть словари подписи от парсера; используется режим ignoreEncryption, поэтому структура всё равно сообщается. Помните: этот инструмент проверяет структуру, а не личность. Он не может сказать, является ли подписант тем, кем утверждает себя, — это требует проверки сертификата против доверенного корня. Используйте его как первичную triage на полученных документах, затем выполните полную проверку подписи вашей платформы для всего важного. Анализ выполняется полностью в браузере; ваш PDF никогда не загружается.

Создано с помощью библиотеки pdf-lib под лицензией Apache-2.0, встроенной в public/assets. Анализ выполняется локально; PDF никогда не загружается.

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

Выполняет ли этот инструмент криптографическую проверку подписи?
Он выполняет структурный анализ: обнаруживает поля подписи, считает маркеры /FT /Sig и проверяет форму окна целостности ByteRange. Полный пересчёт хеша и валидация цепочки сертификатов требуют цепочки подписанта и хранилища доверия, которые браузерная страница не может предоставить офлайн.
Что означает пустой отчёт ByteRange?
Если массив /ByteRange не найден, но маркеры подписи есть, PDF может использовать необычную раскладку подписи или быть повреждён. PDF без маркеров и без ByteRange просто не имеет подписей.
Что такое добавочное обновление и почему это важно?
Многие инструменты PDF добавляют изменения в конец файла вместо перезаписи. Каждое добавление может добавить или заменить объекты, а повторная подпись появляется как новый маркер. Поэтому у подписанного PDF может быть больше одного маркера подписи.
Можно ли проверить зашифрованный PDF?
Да, в определённых пределах. Проверяющий загружается с ignoreEncryption, поэтому словари подписи остаются видимыми. Сырой побайтовый поиск /FT /Sig работает независимо от шифрования, поскольку ищет в открытом текстовом потоке.
Мой PDF куда-либо загружается?
Нет. PDF читается через FileReader и разбирается полностью в браузере с помощью встроенной библиотеки pdf-lib. Образец PDF тоже генерируется локально. Ничего не покидает ваше устройство.
Что такое PKCS#7 / CAdES / PAdES?
PKCS#7 — это контейнерный формат, содержащий данные подписи (ныне стандартизирован как CMS). PAdES — это PDF-профиль этого формата, используемый европейскими правилами электронной подписи; он добавляет атрибуты долгосрочной валидации, чтобы подписи оставались проверяемыми годами.