Est-il possible de demander à gpg (ou gpg4win) de simplement vérifier si un fichier a été signé par un fichier de clé publique particulier, sans avoir à importer, signer et approuver cette clé?
c'est à dire quelque chose comme
gpg --using-key pubkey.txt --verify message.txt
au lieu d'avoir à créer votre propre clé privée, puis faire
gpg --import pubkey.txt
gpg --lsign-key [name within pubkey.txt]
# ... something to do with choosing trust levels
gpg --verify message.txt
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.Réponses:
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:
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):
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é:
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:
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:
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:
la source
Si vous êtes prêt à expédier un trousseau de clés, plutôt qu'un fichier de clé publique, vous souhaitez probablement utiliser
gpgv
plutôt quegpg
:la source
Si votre mot "vérifier" dans la question signifie "absolument vérifier", alors bien sûr une clé publique doit être importée pour vérifier complètement un document signé. Cependant, si cela signifie «identifier», je décris ci-dessous une heuristique qui peut dire si un groupe de documents a tous été signé par la même signature.
Selon les tests effectués par @Ben pour vérifier mon commentaire, il est possible que la commande suivante puisse être utilisée pour indiquer heuristiquement la clé de signature:
Le test de Ben a donné le résultat ci-dessous. Il convient de noter les valeurs de ERRSIG et NO_PUBKEY, ainsi que la valeur de "RSA key ID" qui est partiellement contenue dans les deux, comme suit:
Remarque au-dessus de la chaîne
7FF2D37135C7553C
. Cette même chaîne se trouve à l'intérieur de l'empreinte digitale de la clé qui est signalée une fois la clé importée:Cette chaîne se trouve comme la partie inférieure de l'empreinte digitale (sous-clé ci-dessus), elle peut donc éventuellement être utilisée pour identifier la clé. L'empreinte digitale de la clé primaire devrait également être vérifiée, en plus de la sous-clé.
La chaîne "ID de clé RSA" est identique dans les deux sorties et se trouve également comme la dernière partie de l'empreinte digitale, il peut donc être possible qu'elle suffise à elle seule pour identifier la signature. Si tel est le cas, l'utilisation de la sortie de
gpg --verify
peut suffire à identifier la signature de manière plus simple.Ma connaissance de GPG n'est pas suffisante pour valider complètement cette méthode, vous devriez donc l'essayer sur d'autres fichiers d'exemple. Si cela fonctionne, vous pouvez alors trier les fichiers en fonction de leurs signatures, mais vous devrez importer la clé pour trouver l'identité du signataire.
Pour énoncer clairement à nouveau: Cette méthode ne peut pas identifier complètement une signature. Ce n'est qu'un moyen de trier heuristiquement des documents signés.
la source