1

Я хотел бы вручную проверить подписанный RSA документ PDF, но мне не удается получить подпись, отличную от той, которая закодирована в PDF. Вот шаги, которые я выполнил, любая помощь / советы действительно ценятся.

  1. Я сделал простой текстовый PDF (~ 1 КБ)
  2. Я сгенерировал файл openssl pfx с соответствующим 2048-битным ключом RSA
  3. Я сделал загрузку упомянутого ключа в пользователя Windows certmgr
  4. Я использовал упомянутый ключ для подписи PDF через JSignPdf 1.6.3 (алгоритм хеширования sha-256)

Результатом вышеперечисленных шагов является правильно подписанный PDF-документ (зеленая верхняя панель). Затем я использовал notepad++ для удаления поля содержимого, как описано в документации Adobe, чтобы получить необработанный файл для вычисления, соответствует ли хеш-код тому, который встроен в структуру содержимого. Этот шаг был успешным, мой SHA-256 соответствовал.

Вот вывод из декодера ASN.1 для значения поля содержимого из PDF:

2.16.840.1.101.3.4.2.1sha-256(алгоритм NIST)

1.2.840.113549.1.9.3contentType(PKCS # 9)

1.2.840.113549.1.7.1data(PKCS # 7)

1.2.840.113549.1.9.4messageDigest(PKCS # 9) 32 байта

E271FBADC18080C7E8BD5F0FFBCA0BD77E488309E450D28B79B720D08F69F3FC

1.2.840.113549.1.1.1rsaEncryption(PKCS # 1) 256 байт

6547B3C9658AA8C1C259A97F1B336A099677013EDABE315F9C18C4CE6B6341CAA7054 ...

Я могу получить то же значение, вычисляющее SHA-256 для этого измененного файла вручную, что и значение, встроенное в PDF (E271FB *).

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить последнее значение rsaEncryption вручную в том же файле, совместимом с sha-256, или только на основе упомянутого хэша.

Вот что я пытался ..

  1. openssl dgst -sign ./domain.key file_hash.pdf> signature.bin
  2. openssl dgst -sha256 -sign ./domain.key -out signature.bin file_hash.pdf

Где file_hash.pdf - это файл, который sha-256 соответствует файлу в зеленом PDF-файле из JSignPDF, а domain.key - тот же ключ, импортированный в Windows (с текстом --- начальный закрытый ключ ---).

Можете ли вы посоветовать мне, что я делаю неправильно в конце или как мне достичь этого значения 6547B *?

0