Vous devez avoir la clé publique pour vérifier une signature faite avec la clé privée correspondante, mais vous n'avez pas besoin de signer ou même de signer localement la clé. Dans ce cas, vous recevrez un avertissement de GPG indiquant que la clé n'est pas approuvée.
Voici un test que j'ai fait avec un fichier signé par ma propre clé, mais sur un système où la clé n'avait pas été importée:
[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]$
Malheureusement, la suggestion de Harry ne fonctionne pas, elle extrait un peu plus d'informations, mais pas assez pour être utile.
Comme vous pouvez le voir, le plus d'informations obtenues est l'ID de clé de la sous-clé utilisée pour effectuer la signature et l'heure à laquelle la signature a été effectuée. Cela correspond aux données disponibles pour pgpdump (ou --list-packets):
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$
Comme vous pouvez le voir, il fournit l'algorithme de hachage, les détails du type de clé (ma clé de signature est une sous-clé RSA 3072 bits et l'ID de clé de la sous-clé, mais il n'y a rien pour identifier la clé principale. Ces informations ne sont que révélé lorsque vous avez la clé publique et vérifiez la signature.
J'ai ensuite importé ma clé publique sur ce système et réessayé:
[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]$
Maintenant, il est capable d'identifier la clé et de la faire correspondre à la clé primaire. Il est cependant possible de réduire la nature de ces avertissements comme ceci:
[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]$
Il y a toujours un avertissement qu'il s'agit d'une clé non fiable, mais pas massivement et la suppression de la verbosité ne la réduit qu'à ceci:
[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]$
La clé publique est requise pour l'étape de vérification car elle est utilisée pour faire correspondre les données générées par le signataire avec sa clé privée. Il peut être considéré, en termes simples, comme le complément du cryptage où la clé privée est nécessaire pour décrypter les données cryptées vers la clé publique.
Remarque: J'ai légèrement modifié les UID dans cet exemple, mais tous ceux qui obtiennent cette clé verront ce qu'ils sont vraiment. Sinon, la sortie est un simple copier-coller.
EDIT: Vous pouvez appeler le fichier de clé publique directement comme un trousseau si vous l'avez au format armé non ASCII (c'est-à-dire un fichier .gpg au lieu d'un fichier .asc). Même ainsi, vous avez toujours besoin de la clé publique. Pour ce faire, la commande est la suivante:
[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)
donne dans sa sortie comme première chaîne l'empreinte de la clé qui a fait la signature.