-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 TP3 : signature électronique et chiffrement avec GPG info-223 : « science informatique » Printemps 2012 - ------------------------------------------------------------------------ Consignes Liens utiles 1. GPG et le chiffrement symétrique 1.1. Vérifications 1.2. Chiffrement 1.3. Déchiffrement 2. Gestion des clés publique / privée 2.1. Création des clés 2.2. Certificat de révocation 2.3. Partage des clés 2.3.1. À la main 2.3.2. Avec un annuaire 2.3.3. Vérifier et contre-signer une clé 3. Signature électronique 3.1. Signature 3.2. Vérification 4. Chiffrement 4.1. Chiffrement 4.2. Déchiffrement 5. Réseau de confiance 6. FIN - ------------------------------------------------------------------------ Vous avez jusqu'à la fin de la journée pour m'envoyer votre TP par email (pierre.hyvernat@univ-savoie.fr) Consignes ========= Pour ce TP, vous devrez m'envoyer un email (signé et crypté) contenant un petit rapport. IMPORTANT le sujet du message sera "[info-223] TP3 ...", où les ... peuvent être n'importe quoi. Le rapport sera devra être un fichier texte. Les rapports envoyés dans un autre format (pdf, openoffice, openrtf, word) ne seront pas lus. (Ce n'est pas une blague.) Faites attention lors de la rédaction du rapport : je ne veux pas lire la suite des commandes que vous avez utilisées. Soyez concis... <<>> Liens utiles ============ - la page de GPG (http://www.gnupg.org/), - la page de PGP (http://www.pgp.com/), - un gros fichier texte (« Les misérables » de Victor Hugo) (./TP3/miserables-1.txt) ============================================================================= 1. GPG et le chiffrement symétrique =================================== 1.1. Vérifications ================== Le but de ce TP est de vous familiariser avec la notion de signature électronique et de chiffrement clé publique / clé privée en utilisant le logiciel GPG (Gnu Privacy Guard : http://www.gnupg.org/). GPG est une version libre du logiciel PGP (Pretty Good Privacy : http://www.pgp.com/) crée par Philip Zimmermann. Bien qu'il existe des clients graphique (GPA par exemple), nous allons utilisez l'outil le plus basique (mais aussi le plus puissant) qui soit : le programme gpg en mode texte. Dans un terminal (Menu Applications --> Accessoire --> Terminal, vérifiez que le logiciel est bien installé avec la commande [[[shell $ gpg --version ]]] Créez ensuite un répertoire dans le bureau et positionnez-vous dans ce répertoire : [[[shell $ mkdir Desktop/info223-TP2 $ cd Desktop/info223-TP2 ]]] <<>> 1.2. Chiffrement ================ Si vous partagez une clé secrète avec votre destinataire, vous pouvez utiliser GPG pour faire de cryptographie symétrique. Pour crypter le fichier "nom_fichier", il faut utiliser la commande : [[[shell $ gpg --symmetric --armour nom_fichier ]]] Ceci créera un fichier "nom_fichier.asc" contenant le fichier chiffré. Cette méthode est préférée quand vous voulez par exemple envoyer le fichier par email. Vous pouvez également créer un fichier crypté binaire. La commande correspondante est [[[shell $ gpg --symmetric nom_fichier ]]] Ceci créera un fichier binaire "nom_fichier.gpg" contenant le fichier binaire chiffré. <<>> 1.3. Déchiffrement ================== Pour décrypter, il suffit d'utiliser : [[[shell $ gpg --decrypt nom_fichier.asc ]]] (Bien entendu, "nom_fichier.asc" sera remplacé par "nom_fichier.gpg" si le fichier a été crypté en binaire..) <<>> 2. Gestion des clés publique / privée ===================================== 2.1. Création des clés ====================== Les clés sont stockées dans un répertoire caché de votre répertoire personnel : .gnupg. Vous êtes la seule personne à avoir accès à ce fichier. De plus, vos clés sont protégées par un mot de passe pour renforcer la sécurité. Pour créer votre propre clé publique/clé privée, il faut utiliser la commande [[[shell $ gpg --gen-key ]]] - Créez vos clés en acceptant les choix par défaut, sauf pour la durée de validité de vos clés : comme il s'agit d'un premier essai, je vous conseille de ne créer qu'une clé temporaire (30 jours). Vous pourrez toujours recréer des clés quand vous vous serez familiarisés avec le fonctionnement de GPG... - Mettez votre vrai nom (ou au moins vos initiales) et choisissez ``info-223 2012'' comme commentaire. Choisissez une adresse email que vous consultez régulièrement... - Choisissez une « passphrase » sûre et dont vous vous rappellerez... Elle vous servira à chaque fois que vous aurez à utiliser votre clé privée. <<>> Pour vérifiez que les clés ont bien été créées, utilisez la commande [[[shell $ gpg --list-keys ]]] Vous devriez obtenir quelque chose du genre [[[shell $HOME/.gnupg/pubring.gpg pub 2048R/729616C2 2012-03-20 expire: (2012-05-19) uid Pierre Hyvernat (info-223 année 2012) sub 2048R/215D7425 2012-03-20 expire: (2012-05-19) ]]] qui vous indique que vous avez une clé principale (ligne "pub") qui expire le 19 mai ; et une sous-clé (ligne "sub") qui expire aussi le 19 mai. La ligne "uid" vous donne l'identité de l'utilisateur correspondant. La clé principale est utilisé pour les signatures, et la sous-clé pour le chiffrement. <<>> <<>> 2.2. Certificat de révocation ============================= Lors de la création d'une clé importante, il est impératif de créer un certificats de révocation. C'est ceci qui vous permettra de faire savoir que votre clé ne doit plus être utilisée... Un tel certificat pourra servir dans le cas où vous perdez votre clé privée, ou bien vous avez perdu votre passphrase, ou on vous a volé votre ordinateur... Pour créer un certificat de révocation, il faut faire : [[[shell $ gpg --output revoke.txt --gen-revoke uid ]]] où "uid" est l'identité de la clé concernée. Cette commande génèrera un fichier revoke.txt Attention : ce fichier permet de supprimer votre clé... <<>> 2.3. Partage des clés ===================== 2.3.1. À la main ================ Pour envoyer votre clé publique à quelqu'un, vous pouvez commencer par l'exporter avec la commande [[[shell $ gpg --output cle.asc --export --armour uid ]]] où "uid" est l'identité (l'adresse email par exemple) de la clé concernée et "cle.asc" le nom du fichier qui contiendra la clé en ASCII. Si vous voulez exporter la clé en binaire, il faut utiliser : [[[shell $ gpg --output cle.gpg --export uid ]]] À l'inverse, pour importer une clé (en binaire ou en ASCII) contenue dans le fichier "cle.asc", il suffit d'utiliser la commande [[[shell $ gpg --import cle.asc ]]] <<>> 2.3.2. Avec un annuaire ======================= Pour partager les clés à grande échelle, on utilise plutôt un serveur de clés. Il existe de nombreux serveurs publics, comme par exemple celui du MIT : pgp.mit.edu. Ces serveurs de clés sont tous interconnectés, et il est pour cette raison impossible de pirater ces annuaires... (Il faudrait pour ceci arriver à tous les pirater en même temps !) Pour ne pas polluer les annuaires publics avec nos essais, nous utiliserons un serveur de clés local installé sur la machine d53.lama.univ-savoie.fr. (Il s'agit de l'ordinateur dans mon bureau...) Ce serveur n'est par contre accessible que depuis le campus. Pour envoyer une clé sur un serveur, il faut utiliser la commande [[[shell $ gpg --keyserver d53.lama.univ-savoie.fr --send-key 0xnnnnnnnn ]]] où nnnnnnnn est le numéro de votre clé, càd les chiffres apparaissant après le 1024D sur la première ligne de votre entrée lors de la commande gpg --list-keys. (729616C2 dans mon cas) Vous pouvez également télécharger des clés sur le serveur avec [[[shell $ gpg --keyserver d53.lama.univ-savoie.fr --recv-key 0xnnnnnnnn ]]] Le plus simple pour trouver le numéro de la clé de quelqu'un dans l'annuaire est d'utiliser l'interface web : http://d53.lama.univ-savoie.fr:11371. Vous pouvez aussi utiliser une commande gpg: [[[shell $ gpg --keyserver d53.lama.univ-savoie.fr --search-keys hyvernat ]]] pour chercher ma clé. <<>> 2.3.3. Vérifier et contre-signer une clé ======================================== Chaque clé possède une « empreinte digitale ». Quand vous récupérez une clé, il est important de vérifier cette empreinte... Cette empreinte est suffisamment petite pour être facilement transmissible (carte de visite etc.) Par exemple, ma clé possède l'empreinte [[[shell 4EB0 814A 796F A631 F2E3 3004 277B 0890 7296 16C3 ]]] Comme on ne peut pas faire confiance à une page web, je vous l'écrirais au tableau... Pour trouver l'empreinte d'une clé, vous pouvez utiliser [[[shell $ gpg --fingerprint ]]] qui listera toutes les clés connues avec leur empreinte. Si vous mettez une chaîne de caractères à la fin de la commande, cela ne listera que les clés qui contiennent la chaîne en question. (Pratique quand vous avez beaucoup de clés.) Une fois que vous avez vérifié une clé, vous pouvez l'authentifier pour dire « je fais confiance à cette clé... » On parle de contre-signature. La commande est simplement : [[[shell $ gpg --sign-key uid ]]] où "uid" est l'identité de la clé à authentifier. Une fois que vous avez contre-signé une clé, vous pouvez la renvoyer à l'annuaire pour qu'il prenne en compte votre signature sur la clé publique : [[[shell $ gpg --keyserver d53.lama.univ-savoie.fr --send-key 0xnnnnnnn ]]] <<>> 3. Signature électronique ========================= 3.1. Signature ============== Maintenant que vous avez des clés, vous pouvez signer des messages. Pour cela, il faut utiliser : [[[shell $ gpg --clearsign fichier ]]] pour signer le fichier "fichier". Ceci créera un nouveau fichier "fichier.asc" qui contiendra le fichier original avec une signature vous authentifiant. La commande [[[shell $ gpg --detach-sign fichier ]]] permet elle de créer uniquement une signature (binaire) pour le fichier en question. Cette signature (fichier "fichier.sig") devra être envoyé avec le fichier original. Pour un fichier texte, la première méthode est préférable. (Sauf si c'est un email et que votre logiciel gère les signatures en pièce jointe...) Pour un fichier binaire, il faut mieux utiliser la seconde méthode. 3.2. Vérification ================= Pour vérifier un fichier signé, on utilise [[[shell $ gpg --verify fichier.asc ]]] Il faut bien entendu pour cela disposer de la clé publique de la personne qui a signé le document. <<>> <<>> 4. Chiffrement ============== 4.1. Chiffrement ================ Le principe est le même que pour la signature : on utilise [[[shell $ gpg --encrypt --armour fichier ]]] pour obtenir un fichier ASCII "fichier.asc" contenant le fichier original crypté. GPG nous demandera les destinataires, à choisir parmi les gens dont on possède les clés publiques. Si on veut obtenir un fichier binaire, la commande devient : [[[shell $ gpg --encrypt fichier ]]] pour obtenir un fichier "fichier.gpg" contenant le fichier original crypté. 4.2. Déchiffrement ================== Toujours pareil : pour décrypter, on utilise [[[shell $ gpg --decrypt fichier ]]] <<>> 5. Réseau de confiance ====================== <<>> 6. FIN ====== <<>> <<>> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQEcBAEBAgAGBQJPaIyxAAoJECd7CJBylhbCFQ4IAJmTk8Vd/TR4zCYvwhegS7gl A/tSPo74hGQuA56W9GfuhHi7Dxxpv1Q0sQD/0Iu71iOdmq3yFYpcUNR/mW58Vp5u oP49mvF1ywdkClv9gB2TuTS4t1bVFk0lF5n0iCfGEDkffXv3N0v7cqL8uziTXHdD 4o9F7tImVLsBnf1NnwB4EvTwHKdeZaoQ28dNZm3TjCEJaDMdxrqBxILiJWEunsuw /yLbOWDen5hn3M0UzUejoZHTzpR27JSOwJhOJq9nORpBHE6PPIXSXNWnm4VHWdLJ U+HRrRquYKbnDTyyWX4h8NP1yDI7tN7EeJjhJn2Z7BL/5/Qr1pLNU/bbBT1Yfeo= =Ex2W -----END PGP SIGNATURE-----