Betten Sie eine GPG-Signatur in eine PDF-Datei ein

8

Ist es möglich, GPG-Signaturen in PDF-Dateien einzubetten, wie dies mit X.509-Signaturen möglich ist?

(Ich habe bisher JSignPDF verwendet, um meine Rechnungen zu unterschreiben, aber jetzt hat sich das Gesetz etwas gelockert und es erfordert kein X.509 mehr (nur, dass ich eine gewisse Garantie für Integrität und Authentizität gebe, wofür ich denke , GPG sollte ausreichen). Jetzt weiß ich, dass ich separate Signaturen verwenden kann, aber ich möchte meine Kunden nicht damit verwechseln, warum ich ihnen diese * sig-Dateien sende.)

PSkocik
quelle

Antworten:

2

Teilantwort:

Der Prozess, wie X.509 Unterzeichnung Arbeiten wird beschrieben von Adobe im Detail: Eine Signatur ist nur ein weiteres Objekt in der PDF - Datei, die unter anderem Elemente enthält, der Byte - Bereich , für die die Unterschrift wird. Dann

Der Signiervorgang ist wie folgt:

  1. Ein zu signierendes Dokument wird in einen Bytestrom umgewandelt.
  2. Die gesamte PDF-Datei wird mit einem ausreichend großen Speicherplatz für den Signaturwert sowie mit Worst-Case-Werten im ByteRange-Array auf die Festplatte geschrieben. ByteRange ist ein Array von vier Zahlen. Die erste Zahl in jedem Paar ist der Versatz in der Datei (von Anfang an, beginnend mit 0) des Beginns eines Bytestroms, der in den Hash aufgenommen werden soll. Die zweite Zahl ist die Länge dieses Streams. Die zwei Paare definieren zwei Folgen von Bytes, die definieren, was gehasht werden soll. Der tatsächliche Signaturwert wird in der Taste / Contents zwischen dem Ende der ersten Sequenz und dem Beginn der zweiten Sequenz gespeichert. In 4 wird der Hash für die Bytes 0 bis 839 und 960 bis 1200 berechnet.
  3. Sobald der Speicherort des Signaturwerts in Bezug auf Offsets in der Datei bekannt ist, wird das ByteRange-Array mit den richtigen Werten überschrieben. Da sich die Byte-Offsets nicht ändern dürfen, werden zusätzliche Bytes nach der neuen Array-Anweisung mit Nullen überschrieben.
  4. Der Hash der gesamten Datei wird unter Verwendung der durch den realen ByteRange-Wert angegebenen Bytes unter Verwendung eines Hash-Algorithmus wie SHA-256 berechnet. Acrobat berechnet immer den Hash für eine Dokumentsignatur über die gesamte PDF-Datei, beginnend mit Byte 0 und endend mit dem letzten Byte in der physischen Datei, jedoch ohne die Signaturwertbytes.
  5. Der Hashwert wird mit dem privaten Schlüssel des Unterzeichners verschlüsselt und ein hexadezimal codiertes PKCS # 7-Objektsignaturobjekt wird generiert.
  6. Das Signaturobjekt wird in der Datei auf der Festplatte abgelegt und überschreibt den Platzhalter- / Inhaltswert. Jeder Platz, der nicht für das Signaturobjekt verwendet wird, wird mit Nullen überschrieben.
  7. Die PDF-Datei wird in Acrobat erneut geladen, um sicherzustellen, dass die In-Memory- und On-Disk-Versionen identisch sind.

Es gibt keinen Grund, warum man dies mit einer von gpg berechneten Signatur nicht tun sollte.

Es sollte jetzt auch offensichtlich sein, dass das Einbetten der Signatur "die allgemeine Idee der Signatur und Überprüfung von Dokumenten nicht umgeht", wie in einer anderen Antwort erwähnt.

Ich kenne jedoch keine Tools, bei denen ein solcher Prozess (und die entsprechende Signaturprüfung) bereits implementiert und leicht verfügbar ist. Aus praktischen Gründen (im Moment) ist es wahrscheinlich ratsam, dies zu versuchen, wenn Sie die Unterschrift an andere Personen senden, die sich damit befassen müssen.

dirkt
quelle
1

Denken Sie nicht, dass dies möglich ist, da dies die allgemeine Idee der Signatur und Überprüfung von Dokumenten umgeht. Siehe GPG-Handbuch - Die Signatur wird separat aufbewahrt, einfach weil das Einbetten die Datei ändern und daher die eingebettete Signatur ungültig machen würde.

Die nächstgelegene Befehlszeilenoption ist möglicherweise gpg --clearsign.

Sehen Sie auch den Unterschied zwischen --sign und --clearsign :

--clearsign erstellt Daten + Signatur, wobei die Daten für den Menschen lesbar bleiben. Sie benötigen OpenPGP, um die Signatur zu überprüfen. Wenn Sie jedoch nur den Text lesen müssen, benötigen Sie keine spezielle Software. Die Daten sind für Menschen lesbar.

LibreOffice scheint auch in der Lage zu sein, PDF-Dateien zu signieren.

Martin Zeitler
quelle
0

Etwas andere Antwort - können Sie mit PGP-Dongles wie Yubikey NEO signieren? Unser Ansatz bestand darin, ein X.509-Zertifikat für einen Schlüssel im PGP-Dongle zu erhalten und es dann mit JSignPdf zu verwenden. Der schwierige Teil bestand darin, eine Zertifizierungsanforderung zu erstellen.

dc352
quelle
-2

PortableSigner ist ein Tool zum digitalen Signieren (mit X.509-Zertifikaten) von PDF-Dateien, das Sie hier herunterladen können

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

rɑːdʒɑ
quelle
3
Dies beantwortet die ursprüngliche Frage nicht. OP möchte sich von X.509-Zertifikaten entfernen und stattdessen GPG verwenden.
DanteTheEgregore
OP kann diese Anwendung verwenden, um PDF mit GPG zu signieren.
rɑːdʒɑ
3
In den Dokumenten für diese App ist nichts enthalten, was darauf hinweist, dass sie mit GPG verwendet werden kann.
Ben