Encore un petit billet rapide pour résumer les principales commandes gpg

Création/récupération d’une clef

Création

ajout d’une photo

Récupération

Récupération manuelle

Récupération via un serveur de clefs

Chiffrer/déchiffrer symétriquement

Depuis l’entrée standard vers la sortie standard

$ echo "Message à chiffrer" | gpg --armor -c
-----BEGIN PGP MESSAGE-----

jA0ECQMC5qKy02G9DIf/0kkBmdIaeMgzIRnRKIlYBWOgxu4lBUy1fAD/vXLV9pp4
jvQnbXdqboWP2OuvWVjEfMLlL4GP5ZfWY0BlI5BWmkjtsZs5vDA1+u8s
=ADNn
-----END PGP MESSAGE-----

L’option --armor permet d’obtenir une sortie uniquement composée de caractères ASCII. Remarquons que gpg demandera deux fois de saisir la passphrase via une interface sécurisée.

Bash permet également d’injecter du texte sur l’entrée standard d’une commande via les Here strings <<< et Here documents <<.

$ gpg --armor -c <<< "Message à chiffrer"
-----BEGIN PGP MESSAGE-----

jA0ECQMCzJTyKzp9UP//0kkB08tlhdRSv9nYD+QyZKP7kvYja+ehvkr9qfMzq4J5
SGaykkGU3PzHwj3jgovfwLNGmExgagvZsCuCCruTLH0plxPO92BHMh41
=Ugag
-----END PGP MESSAGE-----

$ gpg --armor -c << EOF
> Message à chiffrer
> EOF
-----BEGIN PGP MESSAGE-----

jA0ECQMCiA3/VT6dnCP/0kkBPLM9j6rAhT71WWvQa9NTLl/TZB5WP5MOSZxWOGoR
/ocu1jQpYneV38yr6u0Yjwor9sfQlH90hnP87m3X6zfCeI4Z+AmNcmsm
=XAed
-----END PGP MESSAGE-----

Nous pouvons remarquer que, mis à part l’entête jA0ECQMC, les trois résultats sont à chaque fois différents alors que le texte à chiffrer est toujours le même. Deux raisons à cela. Principalement, le message est chiffré à l’aide d’une clef de session aléatoire qui elle est chiffrée à l’aide de la passphrase symétrique. Accessoirement, il semblerait aussi qu’un Timestamp soit inclus au message.

Pour déchiffrer depuis l’entrée standard, on pipe simplement sur gpg -d

$ echo "Message à chiffrer" | gpg --armor -c | gpg -d
gpg: données chiffrées avec AES256
gpg: chiffré avec 1 phrase secrète
Message à chiffrer

Ou de façon équivalente :

$ gpg --armor -c <<< "Message à chiffrer" | gpg -d

$ ( gpg --armor -c | gpg -d ) << EOF
Message à chiffrer
EOF

Remarquez que la passphrase n’est demandée qu’au moment du chiffrement. Ce comportement curieux est du au fait que gpg utilise un système de cache, système qui peut être désactivé via l’option --no-symkey-cache.

$ echo "Message à chiffrer" | gpg --no-symkey-cache --armor -c | gpg -d
gpg: données chiffrées avec AES256
gpg: chiffré avec 1 phrase secrète
Message à chiffrer

Cette fois-ci la passphrase a bien été demandée trois fois (deux pour chiffrer, et une pour déchiffrer).

Pour terminer, on remarque qu’avec la version de gpg que j’utilise, le chiffrement symmétrique par défaut est AES256. Si pour une raison quelconque, vous souhaitez choisir un autre algorithme, cela est possible via l’option --cipher-algo. Afin de savoir quel paramètre lui passer en argument (autrement dit, afin de savoir quels sont les algortihmes de chiffrement symétrique auxquels gpg a accès), il faut taper au préalable :

$ gpg --version
gpg (GnuPG) 2.2.12
libgcrypt 1.8.4
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[...]
Algorithmes pris en charge :
Clef publique : RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Chiffrement : IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
              TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
Hachage : SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression : Non compressé, ZIP, ZLIB, BZIP2

Tentons un chiffrement TwoFish :

$ echo "Message à chiffrer" | gpg --armor -c --cipher-algo twofish
-----BEGIN PGP MESSAGE-----

jA0ECgMC34mJeHovr4z/0kkB3ZdoUOYkwBUihMeVA5JBgH7+Yfo2f8jzPorypHUR
Rjb6LqbL5PadRd2yziy/0V6BCzkQv180QdFeGccf+RQsRdy55S0o1qjp
=3cLx
-----END PGP MESSAGE-----

Depuis un fichier vers un fichier

Chiffrer/déchiffrer assymétriquement

Depuis l’entrée standard vers la sortie standard

Depuis un fichier vers un fichier

Créer/vérifier une signature

Intégrée au fichier

Détachée du fichier

Intégration à un client mail

Lecture utile

https://gnupg.org https://gnupg.org/documentation/guides.html

RFC 4880 sur le format des messages OpenPGP

PGP et GPG, Assurer la confidentialité de ses e-mails et fichiers, de Michael W. Lucas, collection Accès libre aux éditions Eyrolles. Un peu daté et pas très détaillé au niveau de la ligne de commande. Néanmoins sa lecture est très instructive pour apprendre la logique PGP/GPG, le réseau de confiance, la gestion des clefs etc.