題 在PDF文件中嵌入GPG簽名


是否可以像使用X.509簽名一樣在PDF文件中嵌入GPG簽名?

(到目前為止,我一直使用JSignPDF簽署我的發票,但現在法律已經放寬了一點,它不再需要X.509了(只是我提供了一些完整性和真實性的保證,為此,我認為,GPG應該足夠了。現在,我知道我可以使用單獨的簽名,但我不想讓我的客戶混淆為什麼我要發送這些* sig文件。)


7
2017-10-02 07:52


起源




答案:


不要認為這是可能的......因為它規避了文件簽名和驗證的總體思路。看到了 GPG手冊  - 簽名是單獨保存的,因為嵌入它會修改文件,因此會使嵌入的簽名無效。

最近的命令行選項可能是 gpg --clearsign

也看到了 --sign和--clearsign之間的區別

--clearsign創建數據+簽名,數據仍然是人類可讀的。   您需要OpenPGP來驗證簽名,但如果您只需要閱讀文本,則不需要任何特殊軟件。數據是人類可讀的。

LibreOffice的 似乎也能夠簽署PDF文件。


0
2018-04-29 05:46





略有不同的答案 - 你能用PGP加密狗簽名,比如Yubikey NEO嗎?我們的方法是獲得PGP加密狗密鑰的X.509證書,然後將其與JSignPdf一起使用 - 困難的部分是創建認證請求。


0
2017-09-25 11:10





部分答案:

X.509簽名工作的過程如下 描述 Adobe詳細介紹:簽名只是PDF文件中的一個附加對象,其中包含進行簽名的字節範圍。然後

簽署過程如下:

  1. 要簽名的文檔將變為字節流。
  2. 將整個PDF文件寫入磁盤,其中留有適當大小的空間用於簽名值以及ByteRange數組中的最壞情況值。   ByteRange是一個包含四個數字的數組。每對中的第一個數字是要包含在散列中的字節流開頭的文件中的偏移量(從頭開始,從0開始)。第二個數字是該流的長度。這兩對定義了兩個字節序列,用於定義要散列的內容。實際簽名值存儲在第一個序列的結尾和第二個序列的開頭之間的/ Contents鍵中。在圖4中,計算字節0到839和960到1200的散列。
  3. 根據文件中的偏移量知道簽名值的位置後,將使用正確的值覆蓋ByteRange數組。由於字節偏移量不得更改,因此新數組語句後面的額外字節將被零覆蓋。
  4. 使用諸如SHA-256之類的散列算法,使用由實際ByteRange值指定的字節來計算整個文件的散列。 Acrobat始終在整個PDF文件中計算文檔簽名的哈希值,從字節0開始,以物理文件中的最後一個字節結束,但不包括簽名值字節。
  5. 使用簽名者的私鑰加密哈希值,並生成十六進制編碼的PKCS#7對象簽名對象。
  6. 簽名對象放在磁盤上的文件中,覆蓋佔位符/內容值。任何未用於簽名對象的空間都將被零覆蓋。
  7. PDF文件在Acrobat中重新加載,以確保內存和磁盤版本相同。

沒有理由為什麼人們不應該用gpg計算的簽名來做這件事。

現在顯而易見的是,嵌入簽名不會“繞過文檔簽名和驗證的一般概念”,如另一個答案所述。

但是,我不知道任何這樣的過程(以及相應的簽名檢查)已經實現並且容易獲得的工具。因此,出於實用性的原因(目前),如果您要將簽名發送給需要處理它的其他人,則可能需要嘗試此操作。


0
2017-09-25 12:10





PortableSigner是PDF文件的數字簽名(帶有X.509證書)的工具 你可以在這裡下載

http://sourceforge.net/projects/portablesigner/


-2
2017-10-02 13:31



這未能回答原始問題。 OP希望擺脫X.509證書並改為使用GPG。 - DanteTheEgregore
OP可以使用此應用程序與GPG簽署PDF。 - rɑːdʒɑ
該應用程序的文檔中沒有任何內容表明它可以與GPG一起使用。 - Ben