Частичный ответ:
Процесс работы подписи X.509 подробно описан компанией Adobe: подпись - это просто дополнительный объект в файле PDF, который содержит, помимо прочего, диапазон байтов, для которого создается подпись. затем
Процесс подписания выглядит следующим образом:
- Документ для подписи превращается в поток байтов.
- Весь PDF-файл записывается на диск с оставшимся подходящим размером для значения подписи, а также с наихудшими значениями в массиве ByteRange.
ByteRange - это массив из четырех чисел. Первое число в каждой паре - это смещение в файле (с начала, начиная с 0) начала потока байтов, который должен быть включен в хеш. Второе число - длина этого потока. Две пары определяют две последовательности байтов, которые определяют, что должно быть хешировано. Фактическое значение подписи сохраняется в ключе /Contents между концом первой последовательности и началом второй. На рисунке 4 хэш рассчитывается для байтов от 0 до 839 и от 960 до 1200.
- Как только местоположение значения подписи известно с точки зрения смещений в файле, массив ByteRange перезаписывается с использованием правильных значений. Поскольку смещения байтов не должны изменяться, дополнительные байты после нового оператора массива перезаписываются нулями.
- Хеш всего файла вычисляется с использованием байтов, заданных действительным значением ByteRange, с использованием алгоритма хеширования, такого как SHA-256. Acrobat всегда вычисляет хэш для подписи документа по всему файлу PDF, начиная с байта 0 и заканчивая последним байтом в физическом файле, но исключая байты значения подписи.
- Хэш-значение шифруется с помощью личного ключа подписавшего, и генерируется объект с сигнатурой объекта PKCS # 7 в шестнадцатеричном формате.
- Объект подписи помещается в файл на диске, перезаписывая значение заполнителя / содержимого. Любое пространство, не используемое для объекта подписи, перезаписывается нулями.
- Файл PDF повторно загружается в Acrobat, чтобы обеспечить идентичность версий в памяти и на диске.
Нет причин, по которым нельзя делать это с помощью подписи, рассчитанной на gpg.
Теперь также должно быть очевидно, что встраивание подписи не «обходит общую идею подписи и проверки документов», как упоминалось в другом ответе.
Однако я не знаю никаких инструментов, где такой процесс (и соответствующая проверка подписи) уже реализован и легко доступен. Так что из соображений практичности (прямо сейчас), вероятно, стоит попробовать это, если вы отправляете подпись другим людям, которые должны иметь дело с этим.