Dans un article précédent, j'ai présenté GnuPG en vérifiant un fichier signé et en chiffrant un fichier pour un destinataire à l'aide d'une clé publique. J'ai également partagé comment créer une paire de clés et exporter une clé publique afin que nous puissions recevoir des messages cryptés. Dans cet article, je vais montrer comment signer des fichiers avant de les partager par e-mail ou de les publier sur un site Web.
Avec GnuPG, il existe plusieurs méthodes pour signer un fichier.
$ gpg --help | grep -i sign
Sign, check, encrypt or decrypt
-s, --sign make a signature
--clear-sign make a clear text signature
-b, --detach-sign make a detached signature
--verify verify a signature
Au fur et à mesure que chaque option est discutée, je signerai un simple fichier texte.
$ cat sample.txt
Sample text for gpg signing
Faire une signature
Avec le --sign
option, le fichier est effectivement crypté avec la clé privée. La clé publique est nécessaire pour afficher le contenu du fichier. Cela oblige le destinataire à vérifier l'origine et supprime tout contenu en texte clair du transit. Il n'est pas privé car toute personne disposant de la clé publique peut déchiffrer le fichier.
$ gpg -s sample.txt
Cela se traduit par un fichier nommé sample.txt.gpg.
$ file sample*
sample.txt: ASCII text
sample.txt.gpg: data
Pour vérifier uniquement la signature, utilisez le --verify
option. Pour à la fois afficher le contenu et afficher la vérification de la signature, utilisez le --decrypt
option.
$ gpg --decrypt sample.txt.gpg
Sample text for gpg signing
gpg: Signature made Sat 30 May 2020 09:16:24 AM EDT
gpg: using DSA key 15AC***********
...omitted...
Faire une signature détachée
L'option de signature détachée est disponible pour offrir à chacun la possibilité de visualiser le message sans avoir la clé publique. Cela crée un fichier de signature distinct qui est utilisé pour vérifier le message d'origine si vous le souhaitez. Dans sa forme la plus simple, ce fichier contient un hachage du message d'origine et est chiffré avec la clé privée. Toute personne disposant de la clé publique peut ouvrir la signature, puis comparer les hachages pour vérifier l'intégrité du fichier signé.
Créez le fichier de signature en utilisant le --detach-sign
option.
$ gpg -b sample.txt
Le résultat est un fichier .sig distinct. fichier de données.
$ file sample*
sample.txt: ASCII text
sample.txt.gpg: data
sample.txt.sig: data
Si vous ne souhaitez pas partager, publier ou envoyer par e-mail un fichier de données, vous pouvez signer le fichier avec le --armor
option, et il créera un fichier texte ASCII avec la signature. Il utilisera également le .asc extension au lieu de .sig extension :
$ cat sample.txt.asc
-----BEGIN PGP SIGNATURE-----
iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJ
dC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8=
=IvP/
-----END PGP SIGNATURE-----
Le fichier original en texte brut et le fichier de signature séparé doivent tous deux être mis à la disposition du destinataire.
Pour vérifier la signature, spécifiez le fichier de signature, puis le fichier d'origine.
$ gpg --verify sample.txt.sig sample.txt
Si les noms par défaut ont été utilisés, vous pouvez omettre le nom du fichier non chiffré.
$ gpg --verify sample.txt.sig
gpg: assuming signed data in 'sample.txt'
gpg: Signature made Sat 30 May 2020 09:23:53 AM EDT
...omitted...
Faire une signature en texte clair
Le --clear-sign
option est une option plus récente en termes de longue histoire de GPG et est très courante pour les fichiers publiés sur des sites Web tels que les fichiers de téléchargement Fedora CHECKSUM. Le contenu est lisible par n'importe qui. Les informations de signature sont également disponibles dans le même fichier pour ceux qui souhaitent vérifier l'origine et l'intégrité du contenu.
Le --clear-sign
l'option créera un nouveau fichier avec .asc extension.
$ gpg --clear-sign sample.txt
$ file sample*
sample.txt: ASCII text
sample.txt.asc: ASCII text
sample.txt.gpg: data
sample.txt.sig: data
Pour vérifier la signature, utilisez le --verify
choix :
$ gpg --verify sample.txt.asc
gpg: Signature made Sat 30 May 2020 09:27:56 AM EDT
...omitted...
gpg: WARNING: not a detached signature; file 'sample.txt' was NOT verified!
Notez qu'un message s'affiche pendant le processus de vérification avertissant que le fichier d'origine associé n'est pas vérifié. Vous pouvez renommer ce fichier avant de le publier sur votre site Web. La vérification vérifiera toujours le contenu du fichier.
Bien qu'il s'agisse souvent de la méthode la plus pratique pour les consommateurs de vos produits, la page de manuel GPG contient un avertissement indiquant que les signatures détachées sont la meilleure option lorsqu'une vérification complète est requise.
À partir de la page de manuel de gpg :
Remarque :lors de la vérification d'une signature en texte clair, GPG vérifie uniquement ce qui constitue les données signées en texte clair et non les données supplémentaires en dehors de la signature en texte clair ou des lignes d'en-tête suivant directement la ligne de marqueur de tiret. L'option --output peut être utilisée pour écrire les données signées réelles, mais il existe également d'autres pièges avec ce format. Il est suggéré d'éviter les signatures en clair au profit des signatures détachées.
Utiliser une paire de clés spécifique
Les exemples ci-dessus ont tous été signés avec la première clé privée disponible dans mon trousseau de clés. Je souhaiterais peut-être utiliser une clé différente lorsque je signe un fichier pour publication sur un site Web. Une paire de clés est créée spécifiquement pour le projet ou le produit. La paire de clés peut même se trouver sur un nouveau trousseau de clés partagé.
$ gpg --keyring /etc/gpgkeys --no-default-keyring --full-gen-key <other options>
Lorsqu'un fichier est signé ou chiffré, assurez-vous de spécifier également le --keyring
option.
Même si une seule personne utilise la clé pour signer les fichiers, créez une paire de clés distincte à utiliser pour la signature. N'utilisez pas la même clé pour d'autres tâches quotidiennes telles que le chiffrement des e-mails personnels. Vous pouvez lister les noms de clés privées disponibles avec gpg --list-secret
. L'ID, le nom ou l'e-mail peuvent être utilisés pour identifier la clé.
Pour signer le fichier avec une clé spécifique d'un trousseau de clés, utilisez le --local-user
option d'identité.
$ gpg --local-user "My Project 2" --clear-sign sample.txt
Conclusion
Si votre fichier texte simple est une liste de hachages de somme de contrôle pour vos téléchargements de produits, ce fichier, tous les fichiers de signature et la clé publique utilisée pour vérifier les signatures peuvent tous être publiés sur un site Web. Les consommateurs peuvent ensuite vérifier les téléchargements avant d'installer un logiciel sur leurs systèmes.
[ Vous voulez en savoir plus sur la sécurité ? Consultez la liste de vérification de la sécurité informatique et de la conformité. ]