Vous devrez utiliser l'interface TPLab pour envoyer vos TP aux encadrants de TP.
Pour ce TP, vous devrez envoyer un message (signé et crypté) contenant un petit rapport.
Le rapport sera devra être un fichier texte. Les rapports envoyés dans un autre format (pdf, openoffice, openrtf, word) ne seront pas lus.
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...
Le texte ci dessous a été crypté en utilisant un décalage de lettres (« code de César »). En vous aidant de la page http://lama.univ-savoie.fr/~hyvernat/substitution.php, décryptez le...
(Il faut utiliser l'option « codage de César » de la page...)
R'thi jc vpgh, xa gtcigt spch jc rpué, ti eadju...
En utilisant la page http://lama.univ-savoie.fr/~hyvernat/substitution.php, décryptez le texte suivant.
Zp ! lml ! i'rev ql brq imqkv, srqlr pmaar ! Ml bmqozxv jxkr...Mp ! Jxrq !...txrl jre ipmere rl emaar... Rl ozkxzlv nr vml, -bzk rfrabnr, vrlrw : Zdkreexh: "Amx, amlexrqk, ex s'zozxe ql vrn lrw Xn hzqjkzxv eqk-nr-ipzab yqr sr ar n'zabqvzeer !" Zaxizn: "Azxe xn jmxv vkrabrk jzle omvkr vzeer ! Bmqk tmxkr, hzxvre-omqe hztkxyqrk ql pzlzb !" Jreikxbvxh: "I'rev ql kmi !...i'rev ql bxi !. . .i'rev ql izb ! Yqr jxe-sr, i'rev ql izb ?...I'rev qlr bélxleqnr !" Iqkxrqf: "Jr yqmx erkv irvvr mtnmldqr izbeqnr ? J'éikxvmxkr, amlexrqk, mq jr tmîvr à ixerzqf ?" Dkzixrqf: "Zxarw-omqe à ir bmxlv nre mxerzqf Yqr bzvrklrnnrarlv omqe omqe bkémiiqbâvre Jr vrljkr ir brkipmxk à nrqk brvxvre bzvvre ?"
Faites la suite du TP avant de faire cette cryptanalyse.
Comme dernier exemple, essayez de décryptez le texte suivant.
inb HqgnwMpf QMwighI JqM Juh thtuwwb Wgnb wugg dF gqg iMnFdFkhI huWg taMF gqMhg FMg dFongstgFg MppuhdMFh JqgF qg Juh ta uww FdkqgI Juh hguggl ug gqg cngufouhg gucwgb d hgMMl taMF gqg qgungq-ntk uFl adpfgl ta gqg hgdpf Jqdpq Mtn WdhdgMn qul wgog cgqdFl qdi gqg Fdkqg cgoMngb dg Juh u odFgI gqdpf adgpg Mo JMMlI ctwcMth-qgulglI Mo gqg hMng Jqdpq dh fFMJF uh u xAgFuFk wuJbgnbx Lthg tFlgn gqg qgul Juh u cnMul hdwWgn cuFl Fgunwb uF dFpq upnMhhb xGM Luigh iMngdignI ibnbPbHbI onMi qdh ondgFlh Mo gqg PbPbQbIx Juh gFknuWgl taMF dgI Jdgq gqg lugg x1884bx dg Juh lthg htpq u hgdpf uh gqg Mwl-ouhqdMFgl ouidwb anupgdgdMFgn thgl gM punnb-ldkFdodglI hMwdlI uFl nguhhtndFkb
Le but de la suite 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) : le programme gpg
en mode texte.
Dans un terminal (Menu Applications --> Accessoire --> Terminal
, vérifiez que le logiciel est bien installé avec la commande
$ gpg --version
Créez ensuite un répertoire dans le bureau et positionnez-vous dans ce répertoire :
$ mkdir Bureau/info223-TP3 $ cd Bureau/info223-TP3
$
" au début de chaque ligne représente l'invite de commande. Vous ne devez pas les écrire ...
cd Bureau/info223-TP3
.
Tab
.
Si vous partagez une clé secrète avec votre destinataire, vous pouvez utiliser GPG pour faire de la cryptographie symétrique. Pour crypter le fichier "nom_fichier
", il faut utiliser la commande :
$ 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
$ gpg --symmetric nom_fichier
Ceci créera un fichier binaire "nom_fichier.gpg
" contenant le fichier binaire chiffré.
Utilisez cette commande pour créer un fichier crypté. Vérifier qu'en modifiant un tout petit peu la clé ou le contenu du fichier, le contenu du fichier crypté change énormément.
Vous pouvez pour ceci utiliser un gros fichier texte et regarder ce qui se passe dans le fichier crypté en l'ouvrant avec un éditeur de texte (gedit
ou autre).
Pour décrypter, il suffit d'utiliser :
$ gpg --decrypt nom_fichier.asc
(Bien entendu, "nom_fichier.asc
" sera remplacé par "nom_fichier.gpg
" si le fichier a été crypté en binaire..)
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
$ gpg --gen-key
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/E480246B 2013-04-09 [expires: 2013-05-09] uid Pierre Hyvernat <pierre.hyvernat@univ-savoie.fr> sub 2048R/0F198174 2013-04-09 [expires: 2013-05-09]
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.
Créez votre propre clé et vérifiez son existence.
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.
Ceci est d'autant plus important si vous avez distribué votre clé publique...
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.asc
", il suffit d'utiliser la commande
$ gpg --import cle.asc
$ gpg --list-keys
".
Pour faciliter le partage de clé, il est également possible d'utiliser un annuaire de clé. Nous n'en utiliserons pas pour ce TP.
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, nos clés possèdent l'empreinte
6215 344A A580 EE2F 8FE7 FCCD 7236 FA90 E481 246B
(lien vers la clé)
663B 4C4A FD91 EA77 6232 ECE0 8227 E420 6E85 0391
(lien vers la clé)
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
$ 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 :
$ gpg --sign-key uid
où "uid
" est l'identité de la clé à authentifier.
Pour obtenir la liste des signatures sur les clés que vous possèdez, il faut utiliser la commande
$ gpg --list-sigs
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.
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.
Deux versions du sujet du TP signé se trouvent ici et là.
Le principe est le même que pour la signature : on utilise
$ 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 :
$ gpg --encrypt fichier
pour obtenir un fichier "fichier.gpg
" contenant le fichier original crypté.
Toujours pareil : pour décrypter, on utilise
$ gpg --decrypt fichier
uid
" est votre adresse email pour choisir votre clé)
$ gpg --output cle_privee.asc --export-secret-key --armour uid
Pour rappel, voici ce que doit contenir votre rapport (au format txt) :