Vous êtes sur la page 1sur 4

Cryptographie

TP 6
Applications pratique

L'objectif est de manipuler quelques outils en ligne de commande pour mettre


en uvre des schmas simples de chiffrement et de signature.
Les exercices sont raliser sous Linux, depuis une invite de commande (un
terminal). Se placer dans un rpertoire vide pour commencer...

OpenSSL :
OpenSSL est une bibliothque de cryptographie opensource permettant de
raliser l'ensemble des fonctions courantes. Il existe galement un outil
utilisable en ligne de commande permettant d'accder ces fonctions.

Gestion des certificats RSA


- Gnration d'un certificat auto-sign
Commande :
openssl req -x509 -days 365 -newkey rsa:1024 -keyout private.key -out certificate.pem

Le champ important ici est Common Name . Dans le cas d'un site internet, il
s'agit du nom d'hte utilis par les clients.
Avec cette commande, la cl prive est chiffre par une passphrase. Dans le
cas d'une cl utilise par un systme automatis, on peut viter ce chiffrement
en ajoutant le paramtre -nodes.
Cela gnre un certificat auto-sign ( certificate.pem) et la cl prive associe
(private.key).
- Vrification du certificat
Pour afficher les informations du certificat :
openssl x509 -text -in certificate.pem

On y retrouve les informations saisies prcdemment. Chercher le champ


metteur, et dtenteur...
- Test : rcupration d'un certificat SSL
La commande suivante permet de rcuprer un certificat depuis un serveur
SSL : (taper les 3 lignes)
echo |\
openssl s_client -connect <host>:443 2>&1 |\
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > server.pem

Cette commande tablit une connexion avec le serveur <host>, et en rcupre


le certificat. Il est enregistr dans le fichier server.pem. On peut ensuite en
afficher les informations avec la commande prcdente.
Essayer avec le nom d'hte sango.cleyfaye.net . On constate que l'metteur
et le dtenteur du certificat ne sont pas les mmes...

Signature d'un message


- Signer un message
openssl smime -sign -signer certificate.pem \
-inkey private.key > message.signed

Cela gnre un message sign (format S/MIME) normalement utilis pour les e-
mails dans le fichier message.signed.
Il est normalement possible d'envoyer ce fichier tel quel comme un e-mail avec
la commande sendmail... Ce qu'on ne fera pas ici.
- Vrification d'une signature
Vous pouvez normalement vrifier la signature via la commande :
openssl smime -verify -in message.signed

Si vous essayez, vous verrez que la vrification choue.


Pour rsoudre le problme utiliser la commande :
openssl smime -verify -CAfile certificate.pem -in message.signed

La commande -CAfile permet de spcifier un CA utiliser. Pourquoi cette


commande fonctionne ici, alors qu'il n'y a pas de CA ?
Pour pouvoir changer des messages sign, il faudrait faire parvenir le
message sign, ainsi que la cl publique (certificate.pem).

Chiffrement symtrique
- Chiffrer un fichier
Crer un message dans un fichier texte, appel par exemple message.txt.

OpenSSL permet de faire du chiffrement simple, bas sur mot de passe. Pour
afficher la liste des algorithmes disponibles, utiliser :
openssl list-cipher-commands

Cette commande liste toutes les fonctions de chiffrement prsente dans la


version courante de OpenSSL, y comprit certaines mthodes qui ne sont pas de
la cryptographie (par exemple, base64).
On utilisera AES en mode CBC ici, on peut donc rduire la liste :
openssl list-cipher-commands |grep aes |grep cbc

Une fois l'algorithme choisi, on peut chiffrer ainsi :


openssl enc -aes-256-cbc -in message.txt -out message.cipher

Pour l'exemple, chiffrer deux fois le message dans deux fichiers diffrents
(message.cipher1 et message.cipher2) avec le mme mot de passe. Vrifier
alors si les chiffrs sont diffrents avec :
diff message.cipher1 message.cipher2
Pourquoi les deux fichiers sont diffrents ?
Essayer en ajoutant le paramtre -nosalt
- Dchiffrer un fichier
Aussi simplement :
openssl enc -d -aes-256-cbc -in message.cipher -out message.decipher

Normalement, on obtient en sortie le mme fichier que l'entre, ce que l'on


peut vrifier avec la commande :
diff message.txt message.decipher

Si les deux fichiers sont identiques, rien n'est affich.

Autres commandes utiles


Empreintes : openssl dgst -sha256 message.txt
Extraite la cl pub. : openssl x509 -in certificate.pem -pubkey -noout > public.key

Signer empreinte : openssl dgst -sha256 -sign private.key message.txt > hash.sign

Vrifier : openssl dgst -sha256 -verify public.key -signature hash.sign message.txt

Base64 : openssl enc -base64 -in message.txt

OpenSSL en ligne de commande permet d'intgrer toutes ces fonctions dans


des scripts complexes, et la bibliothque de programmation est utilis dans de
nombreux programmes (par exemple navigateur web...)

GnuPG :
GnuPG/GPG est un outil permettant de faire du chiffrement et de la signature
asymtrique. Son utilisation commence gnralement par gnrer sa propre
paire de cl. On diffuse ensuite sa cl, et on peut utiliser le systme.
- Gnration de la cl
gpg --gen-key

On peut laisser la plupart des choix par dfaut (cl RSA/RSA, taille 2048, sans
expiration...).
Noter/retenir l'identifiant de la cl utilis : en face de la ligne pub pour la cl
publique, sub pour la cl prive.
- Chiffrement
gpg -e -r <nom cible> message.txt

(Pour tester, chiffrez pour vous dans un premier temps...)


Cela produit un chiffr en ajoutant .gpg la fin du nom du fichier original (non-
modifi).
- Dchiffrement
gpg --output message.out -d message.txt.gpg

Cela dchiffre avec la cl prive associe automatiquement. Si vous vous tes


mis comme destinataire, votre cl priv est stocke dans la liste des cls de
votre compte, et le programme vous demande la passphrase associe.
- Gestion des cls
Pour que les autres puissent utiliser votre cl publique, il faut qu'ils la
connaissent. Vous pouvez l'envoyer de cette faon :
Il faut d'abord l'enregistrer dans un fichier :
gpg --export -a <nom> > public.gpg

Vous pouvez ensuite envoyer ce fichier (par exemple par mail) qui peut tre
intgr aux cls par la commande suivante :
gpg --import public.gpg

par le destinataire. Cette mthode n'apporte aucune garantie ; il faut s'assurer


par d'autres moyens (par exemple, vrification de l'empreinte de la cl) que
celle ci est bien intgre et authentique...
Pour lister les cls prsentes dans votre trousseau :
gpg --list-keys

- Application
Enregistrez votre cl publique dans un fichier avec votre nom, et envoyez l au
groupe de travail. Ajoutez les cls des autres dans votre list.
Vous pouvez maintenant chiffrer un message avec la commande prcdente,
en mettant le nom de quelqu'un d'autre en destinataire (ce qui utilise la cl
publique pour chiffrer). Faites le, et envoyez le message au groupe (par pice
jointe...). Mettez quand mme de quoi savoir qui il est rellement destin
pour gagner du temps...
Vous pouvez essayer de dchiffrer les messages ; seul ceux qui vous sont
destins seront visible, et pourront tre dchiffr avec votre cl prive.
- Signatures
On utilise la commande suivante :
gpg --sign --local-user <nom signataire> message.txt

Cela crera comme prcdemment un fichier avec l'extension .gpg, contenant


le message et sa signature. L'option --local-user peut tre omise pour signer
avec la cl par dfaut (la premire cr en gnral).
Si vous ouvrez le fichier .gpg avec un diteur de texte, vous pourrez y voir le
message en clair. Il est possible de chiffrer en mme temps, en combinant les
commandes :
gpg --sign -e -r <nom destinataire> message.txt

- Vrification
Commande de vrification :
gpg --verify message.txt.gpg

et dans le cas d'une version chiffre :


gpg -d message.txt.gpg

On utilise la commande de dchiffrement. Si elle dtecte une signature, cette


dernire sera alors vrifie.
Si il reste du temps, essayez maintenant d'envoyer des messages signs aux
autres...

Vous aimerez peut-être aussi