-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 TP2 : signature et électronique et chiffrement avec GPG info-204, Pierre Hyvernat 06/10/2009 Consignes ========= 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. Pour ce TP, vous devrez m'envoyer deux mails ainsi qu'un petit rapport. TOUS les emails que vous m'enverrez devront avoir comme sujet [info-204] TP2 ..., où les ... peuvent être n'importe quoi. Le rapport devra être un fichier texte (ou un fichier pdf ou un fichier OpenOffice .odt). Les rapports envoyés dans un autre format (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 ; et je ne veux pas lire un roman fleuve de 40 pages ! - Vous pouvez travailler en binomes pour le rapport ; mais chacun doit m'envoyer les 2 mails (signés et cryptés) : seul le rapport ne sera fait qu'en un seul exemplaire. - ATTENTION, vos mail et vos documents doivent impérativement comporter vos noms, prénoms et filières. Liens utiles ============ - la page de GPG (http://www.gnupg.org/), - la page de PGP (http://www.pgp.com/). ============================================================================= 1. Préliminaires ================= Pour commencer le TP, redémarrez votre machine sous Linux, identifiez vous et ouvrez un navigateur internet (Internet --> Navigateur Web Iceweasel) sur la page du TP : http://lama.univ-savoie.fr/~hyvernat/Enseignement/0910/info204/tp2.html. Dans un terminal (Menu Accessoire --> Terminal, vérifiez que le logiciel est bien installé avec la commande $ gpg --version - Pour toutes les commandes, le "$" au début de chaque ligne représente l'invite de commande. Vous ne devez pas les écrire ... - Vous pouvez naviguer parmi les commandes tapées précédemment avec les touches « flèche en haut » et « flèche en bas ». 2. GPG et le chiffrement symétrique ==================================== 2.1. Chiffrement ================ Si vous partagez une clé avec votre destinataire, vous pouvez utiliser GPG pour faire de cryptographie symétrique. Pour crypter le fichier "nom_fichier", il faut utiliser la commande : $ gpg --symmetric nom_fichier Ceci créera un fichier binaire "nom_fichier.gpg" contenant le fichier chiffré, Vous pouvez également créer un fichier crypté en ASCII, plus approprié si vous devez l'envoyer par email par exemple. La commande correspondante est $ gpg --symmetric --armour nom_fichier et le fichier crypté s'appellera "fichier.asc". Question Utilisez cette commande pour créer un fichier crypté. Vérifier qu'en modifiant un tout petit peu la clé, le contenu du fichier crypté change beaucoup. 2.2. Déchiffrement =================== Pour décrypter, il suffit d'utiliser : $ gpg --decrypt nom_fichier.asc (Bien entendu, "nom_fichier.asc" sera remplacé par "nom_fichier.gpg" si besoin...) Question 1. Envoyez un fichier crypté à votre voisin. 2. Décryptez le fichier chiffré de la question précédente et vérifier que vous obtenez le bon message. (Vous pouvez échanger la clé à l'oral.) 3. Essayez de décrypter le fichier en utilisant une clé erronée (une seule lettre de différence), que se passe-t'il ? 4. À votre avis, que peut-on faire pour déchiffrer le fichier si on a perdu la clé ? 3. Gestion des clés publique / privée ======================================= 3.1. Création des clés ======================== Question Les clés sont stockées dans un répertoire caché de votre répertoire personnel : .gnupg. Vérifiez que ce répertoire n'existe pas. (Et s'il existe, regardez les fichiers qu'il contient ainsi que leurs dates de de modification.) Pour créer votre propre clé publique/clé privée, il faut utiliser la commande $ 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 GPG... - Mettez votre vrai nom (ou au moins vos initiales) et choisissez ``info-204'' 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. Remarque : si GPG vous dis qu'il n'a pas assez d'entropie, il faut faire travailler le processeur. Vous pouvez utiliser la commande $ find / -name a dans un autre terminal et attendre un peu... Pour vérifiez que les clés ont bien été créées, utilisez la commande $ gpg --list-keys Vous devriez obtenir quelque chose du genre $HOME/.gnupg/pubring.gpg ------------------------------- pub 2048R/17B5595E 2010-05-06 [expire: 2010-06-05] uid Pierre Hyvernat (info-204) sub 2048R/4FBCE118 2010-05-06 [expire: 2010-06-05] qui vous indique que vous avez une clé principale (ligne "pub") qui expire le 5 juin ; et une sous-clé (ligne "sub") qui expire aussi le 5 juin. 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. Question Créez votre propre clé et vérifiez l'existence du répertoire ".gnupg". Quels sont les fichiers qu'il contient ? Remarque : lors de la création d'une clé de plus longue durée, il est impératif de créer des certificats de révocation avec "$ gpg --output revoke.txt --gen-revoke uid" où "uid" est l'identité de la clé concernée. C'est ceci qui vous permettra de faire savoir que votre clé ne doit plus être utilisée... (Si vous perdez votre clé privée par exemple.) ATTENTION : votre clé secrète doit rester secrète. Si quelqu'un y a accès, il peut usurper votre identité et lire les messages chiffrés qui vous sont adressés. Votre passphrase doit en garantir la sécurité, car c'est la seul protection que vous avez si quelqu'un peut accéder à votre compte... Choisissez donc une passphrase sûre, et ne la dévoilez à personne. 3.2. Partage des clés ====================== Pour envoyer votre clé publique à quelqu'un, vous pouvez commencer par l'exporter avec la commande $ 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 : $ gpg --output cle.gpg --export uid À l'inverse, pour importer une clé (en binaire ou en ASCII) contenue dans le fichier "cle", il suffit d'utiliser la commande $ gpg --import cle. Question 1. Échangez vos clés avec votre voisin en exportant la votre et important la sienne. 2. Vérifiez qu'une nouvelle clé apparaît dans la liste affichée par "$ gpg --list-keys". Question Pour partager vos clés, allez ajouter votre clé publique sur le Wiki du cours à l'adresse suivante : http://www.lama.univ-savoie.fr/wiki/index.php/Clés_publiques (http://www.lama.univ-savoie.fr/wiki/index.php/Cl%C3%A9s_publiques) Il faut : 1. éditer le wiki (et créer un identifiant si vous n'en avez pas), 2. ajouter votre nom et prénom sur la page, 3. copier/coller votre clé publique en ASCII entre des balises "
" et "
". 3.3. Vérifier une clé ======================= Chaque clé possède une « empreinte digitale ». Quand vous récupérez une clé, il est bon 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 2190 DCB0 25C1 AD6E 4CA9 74CB 8BC6 5DD0 34C4 F5C0 Comme vous avez ce sujet imprimé, vous pouvez être sûr qu'il ne s'agit pas d'une fausse empreinte... Pour trouver l'empreinte d'une clé, vous pouvez utiliser $ gpg --fingerprint qui listera toutes les clés connues avec leur empreinte. Une fois que vous avez vérifié une clé, vous pouvez l'authentifier pour dire « je fais confiance à cette clé... » La commande est simplement : $ gpg --sign-key uid où "uid" est l'identité de la clé à authentifier. Question 1. Vérifiez l'empreinte des clés que vous avez récupérées, et authentifier les. 2. Donnez moi votre empreinte, en main propre, c'est à dire en l'inscrivant sur la feuille que j'aurais amené pour le TP... 4. Signature électronique ========================== 4.1. Signature ============== Maintenant que vous avez des clés, vous pouvez signer des messages. Pour cela, il faut utiliser : $ 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 $ 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. Question 1. Le sujet du TP signé se trouve ici (http://lama.univ-savoie.fr/~hyvernat/Enseignement/0910/info204/tp2.txt.asc). Vérifiez que c'est bien moi qui l'ai écrit... Décrivez les étapes nécessaires pour cette vérification. 2. Quelle a été la clé utilisée pour créer cette signature ? Envoyez moi un email signé (pierre.hyvernat@univ-savoie.fr) pour répondre à ces deux questions. (Il suffit de copier-coller tout le fichier signé avec "--clearsign" dans un email...) 4.2. Vérification ================== Pour vérifier un fichier signé, on utilise $ gpg --verify fichier.asc Il faut bien entendu pour cela disposer de la clé publique de la personne qui a signé le document. Question 1. Comparez les signatures d'un document original (par exemple : « Les misérables » (http://lama.univ-savoie.fr/~hyvernat/Enseignement/0910/info204/miserables.txt) de Victor Hugo et du même document où vous avez passé une lettre de minuscule à majuscule. 2. Vérifiez la signature d'un message que votre voisin vous enverra. 3. Vérifiez la signature d'un message qui a été modifié après signature. Que se passe-t'il ? 5. Chiffrement ============== 5.1. Chiffrement ================ Le principe est le même que pour la signature : on utilise $ gpg --encrypt fichier pour obtenir un fichier binaire "fichier.gpg" 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 ASCII, la commande devient : $ gpg --encrypt --armour fichier pour obtenir un fichier ASCII "fichier.asc" contenant le fichier original crypté. Question Quelle est la clé utilisée pour crypter un fichier ? Envoyez moi la réponse dans un mail que vous crypterez... 5.2. Déchiffrement =================== Toujours pareil : pour décrypter, on utilise $ gpg --decrypt fichier Question 1. Testez le cryptage / décryptage avec votre voisin... 2. Si vous voulez crypter et signer un fichier, quels sont les différences entre : - signer puis crypter, - crypter puis signer ? 6. Bonus : réseau de confiance =============================== Question Lisez les parties 3.2 (http://www.gnupg.org/gph/fr/manual.html#AEN341), 4.1.4 (http://www.gnupg.org/gph/fr/manual.html#AEN541) et 4.2 (http://www.gnupg.org/gph/fr/manual.html#AEN562) du manuel de GPG (http://www.gnupg.org/gph/fr/manual.html) et décrivez succinctement le concept de réseau de confiance. 7. FIN ====== Question - Envoyez moi votre rapport crypté et signé. (Si vous avez peur de vous tromper, mettez également une version non cryptée.) - Pour faciliter les vérifications, joignez moi également : - votre « passphrase » - votre clé privée obtenue avec la commande suivante ("uid" est votre adresse email pour choisir votre clé) $ gpg --output cle_privee.asc --export-secret-key --armour uid -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQEcBAEBAgAGBQJL40w4AAoJEIvGXdA0xPXABG4IAJj6uyqKw2WOItJ24TZsRxuz K8n6jn27hx8AbHrjEaepSejTOcAfR/Hklr4UsGSQXS2O6P6fkxQZnsDwQMRPelqf 5ndoVhUyq27fZvVIrMLcyhjnCz+tUrLEdAAEbRy7X84vSIP+F4HlsTmXy5G2N2p4 RfPaMyBmIFRDyB8CY6pAmaX5wJf2oTbFovC+H8zn1as2RxCFM8Cd+IzGemESzj/W Gjq5sE59+JhOiXKLuRAE9QcBVcQ0iHgGXxBG07r155IObnQedaTkoSOmP2UH6ORp r2Lk8qE7ybtFgnwPndIAm0yuZIRVIcnAuP5P7EcmX5VckJpNoqUvmlvDsyCFYXw= =jyWR -----END PGP SIGNATURE-----