Signatures numériques avec GnuPG

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 vous 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 signSign, 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 l’option --sign, le fichier est efficacement chiffré avec la clé privée. La clé publique est requise pour afficher le contenu du fichier. Cela oblige le destinataire à vérifier l’origine et supprime tout contenu en texte clair du transit. Ce n’est pas privé car toute personne disposant de la clé publique peut déchiffrer le fichier.

$ gpg -s sample.txt

Cela donne un fichier nommé sample.txt.gpg.

$ file sample*sample.txt: ASCII textsample.txt.gpg: data
Image
 Graphique affichant deux fichiers envoyés de A à B où l'un est en texte brut et l'autre est crypté

Pour vérifier uniquement la signature, utilisez l’option --verify. Pour afficher le contenu et afficher la vérification de la signature, utilisez l’option --decrypt.

$ gpg --decrypt sample.txt.gpg Sample text for gpg signinggpg: Signature made Sat 30 May 2020 09:16:24 AM EDTgpg: using DSA key 15AC***********...omitted...

Créer une signature détachée

L’option signature détachée est disponible pour permettre à chacun de visualiser le message sans avoir la clé publique. Cela crée un fichier de signature séparé 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 crypté 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 l’option --detach-sign.

$ gpg -b sample.txt

Le résultat est séparé.fichier de données sig.

$ file sample*sample.txt: ASCII textsample.txt.gpg: datasample.txt.sig: data
Image
 Graphique affichant deux fichiers envoyés de A à B où l'un est en texte brut et l'autre est crypté

Si vous ne souhaitez pas partager, publier ou envoyer un fichier de données par e-mail, vous pouvez signer le fichier avec l’option --armor, et cela créera un fichier texte ASCII avec la signature. Il utilisera également le.extension asc au lieu du.extension sig:

$ cat sample.txt.asc -----BEGIN PGP SIGNATURE-----iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJdC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8==IvP/-----END PGP SIGNATURE-----

Le fichier texte brut d’origine 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 laisser le nom du fichier non crypté.

$ 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...

Créer une signature en texte clair

L’option --clear-sign 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 SOMME de contrôle de téléchargement Fedora. 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.

Image
 Contenu du fichier de SOMME de CONTRÔLE montrant à la fois le texte brut du bloc de signature SHA256SUM et PGP

L’option --clear-sign créera un nouveau fichier avec le .extension asc.

$ gpg --clear-sign sample.txt
$ file sample*sample.txt: ASCII textsample.txt.asc: ASCII textsample.txt.gpg: datasample.txt.sig: data

Pour vérifier la signature, utilisez l’option --verify:

$ 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 de GPG contient un avertissement indiquant que les signatures détachées sont la meilleure option lorsqu’une vérification complète est requise.

Depuis la page de manuel gpg:

Remarque : Lors de la vérification d’une signature en clair, GPG vérifie uniquement ce qui constitue les données signées en clair et pas de données supplémentaires en dehors de la signature en clair ou des lignes d’en-tête qui suivent directement la ligne de marqueur de tiret. L’optionoutputoutput 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.

Utilisation d’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 porte-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 l’option --keyring.

Même si une seule personne utilise la clé pour signer des fichiers, créez une paire de clés séparée à utiliser pour la signature. N’utilisez pas la même clé pour d’autres tâches quotidiennes telles que le cryptage 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 l’option --local-useridentity.

$ gpg --local-user "My Project 2" --clear-sign sample.txt

Récapitulatif

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 affichés sur un site Web. Les consommateurs peuvent ensuite vérifier les téléchargements avant d’installer un logiciel sur leurs systèmes.



+