Подпись Pades с несколькими словарями DSS

Я работаю над PDF Signer/Validator и не знаю, как мне обращаться с файлами PDF с несколькими подписями и словарями dss.

Вот сценарий: файл pdf подписывается дважды, и после второй подписи добавляется словарь DSS с CRL, CERT и OCSP обеих подписей:

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI << 
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>

Все идет нормально. Обе подписи включены в единственный словарь DSS в документе. Но кто-то еще решил подписать этот же документ, а также добавить свои CRL и все остальное. Затем я должен создать новый словарь DSS, и мой вопрос: должны ли старые подписи, уже описанные в другом словаре DSS, быть в этом? Я так думаю, так как DSS находится в обновленном каталоге документов (и вы удалили ссылку на последний словарь), но в компании практически нет согласия.

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>
[ Signature 3 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
        /HashSignature3 16 0 R
    >>
    ...
>>

ИЛИ ЖЕ

[ Signature 1 ]
[ Signature 2 ]
DSS << 
    VRI <<
        /HashSignature1 10 0 R
        /HashSignature2 11 0 R
    >>
    ...
>>
[ Signature 3 ]
DSS << 
    VRI <<
        /HashSignature3 16 0 R
    >>
    ...
>>

Правильны ли они оба? Только один из них? С одним?

2 ответа

Решение

Андреа Валле из Adobe разъяснила мне это по электронной почте:

Это обсуждалось в ESI в течение некоторого времени, и, наконец, команда решила уточнить это в EN 319 142-1.

См. Раздел 5.4.1 на стр. 11 версии 1.1.0:

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

ПРИМЕЧАНИЕ. В общем случае словарь DSS будет содержать данные проверки из предыдущих версий, а также данные проверки, добавленные для текущей версии. Если записи удаляются из словаря DSS во время инкрементного обновления, набор данных проверки может быть неполным для проверки подписей, но для оптимизации может быть выполнена замена данных проверки, например, например, более актуальной информации о состоянии сертификата. причины.

Поэтому на самом деле рекомендуется добавлять все записи из старого словаря DSS, но не обязательно. Вы можете обновить эти записи, если они не нарушают подпись, но это необязательно.

Читая немного дальше по тому же документу:

Хранилище безопасности документов (DSS) должно быть словарем, который должен иметь значение DSS в качестве ключа в словаре каталога документов. Этот словарь используется для предоставления единого места, где должна быть размещена вся относящаяся к проверке информация для некоторых или всех подписей в документе.

DSS предназначен для предоставления единого места, где должна быть размещена вся информация.

Итак, если вы не размещаете всю информацию там, вы ничего не нарушаете, но не используете DSS, как задумано.

Тогда ответ таков: подписывающий pdf должен использовать первый подход, но для второго должен быть подготовлен валидатор pdf.


РЕДАКТИРОВАТЬ:

На самом деле, любой валидатор PAdES должен в любом случае проверять записи DSS, существующие ранее. Если вы выберете только последнюю версию, можно повторно проверить недействительную подпись, если сертификат CA, используемый для подписи CRL или OCSP, был скомпрометирован последним, и эта ложная информация была добавлена ​​в последний DSS.

Пример:

  1. Sig 1 был сделан с отозванным сертификатом
  2. Все записи DSS добавлены, и подпись обязательно будет недействительной
  3. DocumentTimeStamp добавлен для защиты этого DSS.

  4. Сертификат Sig 1 CA скомпрометирован

  5. Сиг 2 сделан, с действующим сертификатом

  6. Добавлены записи Sig 2 DSS, с поддержкой LTV подпись
  7. Sig 1 CRL/OCSP заменяется поддельным, сделанным с скомпрометированным сертификатом CA

В этой ситуации валидатор, который использует самый последний DSS, будет проверять Sig 1, когда это не нужно. Вот почему вы добавляете DocumentTimeStamp для защиты информации об этой подписи.


TL; DR:

Оба варианта верны. DSS должен иметь информацию обо всех подписях, но это не обязательно. И валидатор должен проверять DSS, сделанный сразу после подписи, а не только самую последнюю.

Поскольку в словаре Каталога есть только одна запись DSS, вам необходимо обновить существующий Dion-словарь DSS (соответственно, словарь VRI и другие значения).

Другие вопросы по тегам