Проанализируйте 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 никогда не загружается.
Часто задаваемые вопросы
Выполняет ли этот инструмент криптографическую проверку подписи?
Он выполняет структурный анализ: обнаруживает поля подписи, считает маркеры /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-профиль этого формата, используемый европейскими правилами электронной подписи; он добавляет атрибуты долгосрочной валидации, чтобы подписи оставались проверяемыми годами.