Sie müssen über den öffentlichen Schlüssel verfügen, um eine Signatur zu überprüfen, die mit dem entsprechenden privaten Schlüssel erstellt wurde. Sie müssen den Schlüssel jedoch nicht signieren oder lokal signieren. In diesem Fall erhalten Sie eine Warnung von GPG, dass der Schlüssel nicht vertrauenswürdig ist.
Hier ist ein Test, den ich mit einer Datei durchgeführt habe, die mit meinem eigenen Schlüssel signiert ist, aber auf einem System, auf dem der Schlüssel nicht importiert wurde:
[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$ gpg -v --status-fd 1 --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
[GNUPG:] ERRSIG 7FF2D37135C7553C 1 10 00 1380142299 9
[GNUPG:] NO_PUBKEY 7FF2D37135C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$
Leider funktioniert Harrys Vorschlag nicht, er extrahiert ein bisschen mehr Informationen, aber nicht genug, um von Nutzen zu sein.
Wie Sie sehen können, sind die meisten Informationen die Schlüssel-ID des Unterschlüssels, mit dem die Signatur erstellt wurde, und der Zeitpunkt, zu dem die Signatur erstellt wurde. Dies entspricht den Daten, die pgpdump (oder --list-packages) zur Verfügung stehen:
bash-3.2$ pgpdump thing.txt.gpg
Old: Compressed Data Packet(tag 8)
Comp alg - ZLIB <RFC1950>(comp 2)
Old: One-Pass Signature Packet(tag 4)(13 bytes)
New version(3)
Sig type - Signature of a binary document(0x00).
Hash alg - SHA512(hash 10)
Pub alg - RSA Encrypt or Sign(pub 1)
Key ID - 0x7FF2D37135C7553C
Next packet - other than one pass signature
Old: Literal Data Packet(tag 11)(24 bytes)
Format - binary
Filename - thing.txt
File modified time - Thu Sep 26 06:51:39 EST 2013
Literal - ...
Old: Signature Packet(tag 2)(412 bytes)
Ver 4 - new
Sig type - Signature of a binary document(0x00).
Pub alg - RSA Encrypt or Sign(pub 1)
Hash alg - SHA512(hash 10)
Hashed Sub: signature creation time(sub 2)(4 bytes)
Time - Thu Sep 26 06:51:39 EST 2013
Sub: issuer key ID(sub 16)(8 bytes)
Key ID - 0x7FF2D37135C7553C
Hash left 2 bytes - f0 97
RSA m^d mod n(3066 bits) - ...
-> PKCS-1
bash-3.2$
Wie Sie sehen können, enthält es den Hash-Algorithmus, die Details des Schlüsseltyps (mein Signaturschlüssel ist ein 3072-Bit-RSA-Unterschlüssel und die Schlüssel-ID des Unterschlüssels), aber es gibt nichts, um den Hauptschlüssel zu identifizieren. Dies sind nur Informationen Wird angezeigt, wenn Sie den öffentlichen Schlüssel haben und die Signatur überprüfen.
Dann habe ich meinen öffentlichen Schlüssel auf dieses System importiert und es erneut versucht:
[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E 55C4 321E 4E23 7359 0E5D
Subkey fingerprint: B7F0 FE75 9387 430D D0C5 8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$
Jetzt kann der Schlüssel identifiziert und mit dem Primärschlüssel abgeglichen werden. Es ist jedoch möglich, die Art dieser Warnungen wie folgt zu reduzieren:
[ben@seditious tmp]$ gpg -v --verify --trust-model always thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$
Es gibt immer noch eine Warnung, dass es sich um einen nicht vertrauenswürdigen Schlüssel handelt, aber nicht massiv, und das Entfernen der Ausführlichkeit reduziert ihn nur auf Folgendes:
[ben@seditious tmp]$ gpg --verify --trust-model always thing.txt.gpg
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
[ben@seditious tmp]$
Der öffentliche Schlüssel wird für die Überprüfungsphase benötigt, da er verwendet wird, um vom Unterzeichner generierte Daten mit ihrem privaten Schlüssel abzugleichen. Es kann in einfachen Worten als Ergänzung der Verschlüsselung betrachtet werden, bei der der private Schlüssel zum Entschlüsseln von mit dem öffentlichen Schlüssel verschlüsselten Daten benötigt wird.
Hinweis: Ich habe die UIDs in diesem Beispiel ein wenig angepasst, aber jeder, der diesen Schlüssel erhält, wird sehen, was er wirklich ist. Ansonsten ist die Ausgabe ein direktes Kopieren und Einfügen.
BEARBEITEN: Sie können die öffentliche Schlüsseldatei direkt wie einen Schlüsselbund aufrufen, wenn Sie sie im nicht-ASCII-gepanzerten Format haben (dh eine .gpg-Datei anstelle einer .asc-Datei). Trotzdem benötigen Sie den öffentlichen Schlüssel. Dazu sieht der Befehl folgendermaßen aus:
[ben@seditious ~]$ gpg -v --no-default-keyring --keyring /tmp/mykey.gpg --verify /tmp/thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E 55C4 321E 4E23 7359 0E5D
Subkey fingerprint: B7F0 FE75 9387 430D D0C5 8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious ~]$
gpg --status-fd 1 --verify (thefile)
in seiner Ausgabe als erste Zeichenfolge den Fingerabdruck des Schlüssels angibt, der die Signatur erstellt hat.