Utiliser OpenPGP sous Linux Debian avec GnuPG
Présentation de GnuPG
PGP est le nom d’un programme de chiffrement créé en 1991 par Philip Zimmerman. Depuis lors, PGP est devenu le modèle dominant pour les logiciels de chiffrement personnels.
En juillet 1998, PGP Inc. a proposé un standard OpenPGP à l’IETF. Ce standard était voué à créer un cadre pour la création de logiciels de chiffrement personnels, et le terme OpenPGP pourrait alors être appliqué à tout logiciel qui serait conforme au standard. l’IETF a accepté la proposition, et formé le OpenPGP Working Group pour développer le standard.
La RFC 2440 décrit la spécification actuelle de OpenPGP; le succeseur est RFC 4880 et est devenu le standard OpenPGP proposé.
L’implémentation Open source la plus populaire de la spécification OpenPGP est GnuPG. Elle est disponible pour les systèmes Linux, les systèmes Open Source UNIX systems tels que les OSes BSD UNIX , et la plupart des UNIX commerciaux modernes. GnuPG (aussi souvent appelé simpement GPG) a même été porté sous Mac OS X et Microsoft Windows.
Installation de GnuPG
root@srv1:~# apt-get install gnupg Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Paquets suggérés : gnupg-doc libpcsclite1 parcimonie xloadimage imagemagick eog Paquets recommandés : gnupg-curl Les paquets suivants seront mis à jour : gnupg 1 mis à jour, 0 nouvellement installés, 0 à enlever et 97 non mis à jour. Il est nécessaire de prendre 1 149 ko dans les archives. Après cette opération, 333 ko d'espace disque seront libérés. Réception de : 1 http://debian.mirrors.ovh.net/debian/ jessie/main gnupg amd64 1.4.18-7+deb8u3 [1 149 kB] 1 149 ko réceptionnés en 0s (5 763 ko/s) (Lecture de la base de données... 36411 fichiers et répertoires déjà installés.) Préparation du dépaquetage de .../gnupg_1.4.18-7+deb8u3_amd64.deb ... Dépaquetage de gnupg (1.4.18-7+deb8u3) sur (1.4.18-7) ... Traitement des actions différées (« triggers ») pour man-db (2.7.0.2-5) ... Paramétrage de gnupg (1.4.18-7+deb8u3) ... root@srv1:~#
Générer une clé privée
root@srv1:~# gpg --gen-key gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Sélectionnez le type de clef désiré : (1) RSA et RSA (par défaut) (2) DSA et Elgamal (3) DSA (signature seule) (4) RSA (signature seule) Quel est votre choix ? 1 les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits. Quelle taille de clef désirez-vous ? (2048) La taille demandée est 2048 bits Veuillez indiquer le temps pendant lequel cette clef devrait être valable. 0 = la clef n'expire pas <n> = la clef expire dans n jours <n>w = la clef expire dans n semaines <n>m = la clef expire dans n mois <n>y = la clef expire dans n ans Pendant combien de temps la clef est-elle valable ? (0) La clef n'expire pas du tout Est-ce correct ? (o/N) o Une identité est nécessaire à la clef ; le programme la construit à partir du nom réel, d'un commentaire et d'une adresse électronique de cette façon : « Heinrich Heine (le poète) <heinrichh@duesseldorf.de> » Nom réel : JF Rullier Adresse électronique : jf.rullier@activpart.com Commentaire : ACTIVPART Vous avez sélectionné cette identité : « JF Rullier (ACTIVPART) <jf.rullier@activpart.com> » Faut-il modifier le (N)om, le (C)ommentaire, l'(A)dresse électronique ou (O)ui/(Q)uitter ? O Une phrase secrète est nécessaire pour protéger votre clef secrète. De nombreux octets aléatoires doivent être générés. Vous devriez faire autre chose (taper au clavier, déplacer la souris, utiliser les disques) pendant la génération de nombres premiers ; cela donne au générateur de nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie. ... Il n'y a pas suffisamment d'octets aléatoires disponibles. Veuillez faire autre chose pour que le système d'exploitation puisse rassembler plus d'entropie (128 octets supplémentaires sont nécessaires). fdgqdgfdsgdglkùkdslghùskdglkmhmFSkghkSFlkhfsùjgkF%Jmfsj shfhgfùlkjyjztlhùjn,!zedfrh,sdmhùkmrtlmhkzrt .....+++++ gpg: /root/.gnupg/trustdb.gpg : base de confiance créée gpg: clef B6ED6A32 marquée de confiance ultime. les clefs publique et secrète ont été créées et signées. gpg: vérification de la base de confiance gpg: 3 marginale(s) nécessaire(s), 1 complète(s) nécessaire(s), modèle de confiance PGP gpg: profondeur : 0 valables : 1 signées : 0 confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u. pub 2048R/B6ED6A32 2017-02-28 Empreinte de la clef = 6063 95C8 FFBE 0A89 0AD0 BEED 3C2B 93A8 B6ED 6A32 uid JF Rullier (ACTIVPART) <jf.rullier@activpart.com> sub 2048R/2A5D9300 2017-02-28 root@srv1:~#
Pour lister les clés publiques existantes dans notre trousseau:
root@srv1:~# gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub 2048R/B6ED6A32 2017-02-28 uid JF Rullier (ACTIVPART) <jf.rullier@activpart.com> sub 2048R/2A5D9300 2017-02-28 pub 1024D/CD2EFD2A 2009-12-15 uid Percona MySQL Development Team <mysql-dev@percona.com> sub 2048g/2D607DAF 2009-12-15 root@srv1:~#
Générer un certificat de révocation
Ceci crée un « certificat de révocation », qui est destiné à être publié pour notifier les utilisateurs de votre clé publique qu’elle a été révoquée, si votre passphrase ou votre clé privée a été compromise par un pirate.
root@srv1:~# gpg --output revoke.asc --gen-revoke 'JF Rullier' sec 2048R/B6ED6A32 2017-02-28 JF Rullier (ACTIVPART) <jf.rullier@activpart.com> Faut-il créer un certificat de révocation pour cette clef ? (o/N) o choisissez la cause de la révocation : 0 = Aucune raison indiquée 1 = La clef a été compromise 2 = La clef a été remplacée 3 = La clef n'est plus utilisée Q = Annuler (Vous devriez sûrement sélectionner 1 ici) Quelle est votre décision ? Entrez une description facultative, en terminant par une ligne vide : > Révocation clé JF Rullier > Cause de révocation : La clef a été compromise Révocation clé JF Rullier Est-ce d'accord ? (o/N) o Une phrase secrète est nécessaire pour déverrouiller la clef secrète de l'utilisateur : « JF Rullier (ACTIVPART) <jf.rullier@activpart.com> » clef RSA de 2048 bits, identifiant B6ED6A32, créée le 2017-02-28 sortie forcée avec armure ASCII. Certificat de révocation créé. Veuillez le déplacer sur un support que vous pouvez cacher ; toute personne accédant à ce certificat peut l'utiliser pour rendre votre clef inutilisable. Imprimer ce certificat et le stocker ailleurs est une bonne idée, au cas où le support devienne illisible. Attention quand même : le système d'impression utilisé pourrait stocker ces données et les rendre accessibles à d'autres. root@srv1:~#
Générer une clé publique
Ceci produit un fichier plein texte appelé « pubkey.txt » qui va contenir votre clé publique, dans lequel le nom est celui que vous avez utilisé pour générer la clé:
root@srv1:~# gpg --armor --output pubkey.txt --export 'JF Rullier' root@srv1:~#
Le fichier obtenu se présente ainsi:
root@srv1:~# cat pubkey.txt -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 mQENBFi1hUQBCADRgIFq31Z1R8viV0vO0/j0UJDiSlUqvStI3pTZ+rOl8TcVXyea q3eZgpEuo+yOao5v/lTAHx0nWF2RfrsM9tTwQkZtLJ/ZU1PgubjJOptOb93+jBGA AUilYHIsrZh/2DSQ5cIrpHXw1ipDiBM0FivTzAsFw7ZX1pyhFJXsJPTGTSMAHUas NDRlwXf1UwORHVl0MGuaCkvfnomryt3V4lCOTM5YwuLitoPxO++XZm2rlnz09J4x 3gDtKvgaJ5Bogf9skLDrNiE9rTsTQJQy2m1vqA7Z9FOk8iUZDsxj4wjXOOR7MYwc tAnmf0jrHSopTNNxXtB91xoX4GxWH/IiiKSLABEBAAG0MUpGIFJ1bGxpZXIgKEFD VElWUEFSVCkgPGpmLnJ1bGxpZXJAYWN0aXZwYXJ0LmNvbT6JATgEEwECACIFAli1 hUQCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEDwrk6i27WoyRikH/18m dN1I3DSvp9uygE7CzqZDOIzTsDjSbRnTIxtn76dixCrQaZ8tUOiZ2KI0PgnPuY56 mpgRXX6v9XeZDoDVMjPJtQKDHlE0+mhZ+0qNgPW14LwOoklet0cKTQUn6Ql/acO3 csHuSF/+iJJE5Y5k7SM15GBfcX1C44oyYjb53uLBq8jTP8o+2vBTbLwaJxpqV8W3 zKbtYgEvjInoUZzsOj9y2XE/jj9KOuqdSdjV0KSby9tlf/lrrfQVqEr+bJsMM2im IFGN2nbvtboej32oGxTKD+6o//BjCcTTzgVHWjQC6tOG73W1pct/XTWEapxIaCT8 05XWzCesgH/bR57YMK25AQ0EWLWFRAEIAL+mwn1JwQWtR61/JUJcJfP0FjmxgQzu Tw43zx4MZ8LWeEfp8Qdz8x+j5XsXc3KsuDtlyzvCeuEWwfGOEY56XMARR02FnMRV Gu2C5I4Rl5UkT8XGB/BVPfNA87OapLdihhLfNLv5O0d3tDVCaKw+0L6/6b8403yK XzAdUVlQnQu7h8EMa+jRJMYX/PJu6zfBDbZFXNUGqSk/Rwb7YReIKq5q4cdoJ18+ 5sZDo/I5zbA3dMsRiKqMQLycVa+yy97adDGODDrkHn/dAhMK5Nqo+NqEFPOwC7H4 Bse1iCkW6ZqL2jK51aNFIfUh774RcTU5kJkRQikpz7cw4xSjadE7iQEAEQEAAYkB HwQYAQIACQUCWLWFRAIbDAAKCRA8K5Ootu1qMkB8CADQz0eMk4iB6U9KQnmhZ5LM bkhupqugnYqN/7NWdkMw9mcZYXO97JRWCAWXrJpm5Ok00sbrUWp9MSAvfc+dgrMN uzxkeUOgZkvYGHYLOyobQ79cgQYVpvFyuRf36vdloPC7hnPirT6O/s/twT63Igct MS8qJtfwCsPR2Ju0AcBcpg87lMh7yRHs5qKs/jJkAnVNL293QophAzFPhrSChYLT 6oJtOOCeOJfDJ3IDmIM+uE7x6ibq79gy7IR/+IJz7L5YByJxgOq6khRpc+1BosD/ g16eB2WTvcR0h+z1fAlIyDWt4uyGAoe8b7uSIYuMFdTfMgv25VG41mNSp15GAzqB =yRcF -----END PGP PUBLIC KEY BLOCK----- root@srv1:~#
Enregistrer la clé publique
Ceci uploade votre clé publique sur un keyserver sur le domaine PGP de corporation fedoraproject.org de telle manière que les autres puissent chercher sur une localisation centrale votre clé publique:
root@srv1:~# gpg --keyserver keys.fedoraproject.org --send-keys 'B6ED6A32' --send-keys 'B6ED6A32' gpg: « --send-keys » n'est pas un identifiant de clef : ignoré gpg: envoi de la clef B6ED6A32 au serveur hkp keys.fedoraproject.org gpg: envoi de la clef B6ED6A32 au serveur hkp keys.fedoraproject.org root@srv1:~#
Importer une clé directement
En assumant que vous possédiez un fichier texte plein nommé « pubkey.txt » avec la clé publique de quelqu’un à qui vous envisager d’envoyer des fichiers chiffrés, voici comment vous pouvez importer la clé publique contenue dans ce fichier dans votre trousseau de clés GPG:
root@srv1:~# gpg --import pubkey.txt
Importer ue clé depuis un Keyserver
Cette commande récupère une clé publique depuis le serveur fedoraproject.org, en utilisant l’adresse Email du propriétaire pour l’identifier:
root@srv1:~# gpg --keyserver hkp://keys.fedoraproject.org --recv-keys 'B6ED6A32' gpg: demande de la clef B6ED6A32 sur le serveur hkp keys.fedoraproject.org gpg: clef B6ED6A32 : « JF Rullier (ACTIVPART) <jf.rullier@activpart.com> » n'est pas modifiée gpg: Quantité totale traitée : 1 gpg: non modifiées : 1 root@srv1:~#
Chiffrer un fichier
Pour chiffrer un fichier lorsque vous avez la clé publique du destinataire dans votre trousseau, vous pouvez utiliser cette commande, où ID est remplacé par l’ID de cette clé et filename.txt est remplacé par le nom du fichier que vous voulez chiffrer:
$ gpg --encrypt --recipient ID filename.ext
La version courte de cette commande est:
$ gpg -e -r ID filename.ext
Ex:
root@srv1:~# gpg –encrypt –recipient ‘B6ED6A32’ goods.sql
root@srv1:~#
Un fichier est créé avec le même nom, plus une extension .gpg:
root@srv1:~# ls -l goods.sql*
-rw-r--r-- 1 root root 41266 oct. 1 2015 goods.sql
-rw-r--r-- 1 root root 8533 févr. 28 16:54 goods.sql.gpg
root@srv1:~#
Remarque: Si vous voulez chiffrer un fichier telle sorte que seiul vous puissiez le lire, vous pouvez utiliser votre propre ID comme destinataire.
Déchiffrer un fichier
Déchiffrer un fichier est simple:
$ gpg --output filename.ext --decrypt filename.ext.gpg
Exemple:
root@srv1:~# gpg --output goods.clair --decrypt goods.sql.gpg Une phrase secrète est nécessaire pour déverrouiller la clef secrète de l'utilisateur : « JF Rullier (ACTIVPART) <jf.rullier@activpart.com> » clef RSA de 2048 bits, identifiant 2A5D9300, créée le 2017-02-28 (identifiant de clef principale B6ED6A32) gpg: chiffré avec une clef RSA de 2048 bits, identifiant 2A5D9300, créée le 2017-02-28 « JF Rullier (ACTIVPART) <jf.rullier@activpart.com> » root@srv1:~#