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:
- Ein zu signierendes Dokument wird in einen Bytestrom umgewandelt.
- 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.
- 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.
- 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.
- Der Hashwert wird mit dem privaten Schlüssel des Unterzeichners verschlüsselt und ein hexadezimal codiertes PKCS # 7-Objektsignaturobjekt wird generiert.
- 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.
- 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.