Vous êtes sur la page 1sur 7

Principes et Algorithmes de Cryptographie

TP OpenSSL

1. Prsentation de lOpenssl
1.1.

Protocole SSL

Le protocole SSL (Secure Socket Layer) a t dvelopp par la socit Netscape


Communications Corporation pour permettre aux applications client/serveur de communiquer
de faon scurise. TLS (Transport Layer Security) est une volution de SSL ralise par
lIETF.
La version 3 de SSL est utilise par les navigateurs tels Netscape et Microsoft Internet
Explorer depuis leur version 4.
SSL est un protocole qui sintercale entre TCP/IP et les applications qui sappuient sur TCP.

1.2.

openssl

OpenSSL est une bote outils cryptographiques implmentant les protocoles SSL et TLS
qui
Offre :
1. Une bibliothque de programmation en C permettant de raliser des applications
client/serveur scurises sappuyant sur SSL/TLS.
2. Une commande en ligne (OpenSSL) permettant :
la cration de cls RSA, DSA (signature)
la cration de certificats X509
le calcul dempreintes (MD5, SHA, RIPEMD160, ...)
le chiffrement et dchiffrement (RSA, DES, IDEA, RC2, RC4, Blowfish, ...)
la ralisation de tests de clients et serveurs SSL/TLS
la signature et le chiffrement de courriers (S/MIME)

2. Chiffrement symtrique openssl


La syntaxe gnrale de la commande openssl est la suivante :
#openssl enc <-algo> -in <fichier.txt> -out <fichier.enc>
chiffre fichier.txt avec l'algorithme spcifi (openssl enc --help pour avoir la liste des
possibilits ou bien openssl list-cipher-commands) en un fichier.fic.
#openssl enc <-algo> -in <chiffre> -d -out <resultat> : pour le dcryptage

Blowfish
Chiffrement d'un fichier : Pour chiffrer un fichier avec lalgorithme blowfish

# openssl enc blowfish -in toto -out toto.bf

Pour dchiffrer un fichier avec lalgorithme blowfish


# openssl enc blowfish -d -in toto.bf -out toto.bfdechiff
Vrifier maintenant que le contenu de toto et toto.dechiffre est le mme
#diff toto toto.dechiffre

Chiffrement d'un fichier : Pour chiffrer un fichier avec lalgorithme blowfish en mode CBC

# openssl enc bf-cbc -in toto -out toto.bfcbc

Pour dchiffrer un fichier avec lalgorithme blowfish

# openssl enc bf-cbc -d -in toto.bfcbc -out toto.bfcbcdechiff

Pour chiffrer le fichier toto avec une cl explicite, il faut utiliser les options -K et -iv
{ -K (K majuscule) suivi de la cl exprime en hexa;
{ -iv (iv en minuscules) suivi du vecteur d'initialisation exprime en hexad_ecimal1.
L'exemple qui suit montre la commande pour chiffrer toto avec Blowfish en mode CBC avec
un vecteur d'initialisation de 64 bits exprime par 16 chiffres hexa, et une cl de 128 bits
exprime par 32 chiffres hexa.

# openssl enc bf-cbc -in toto -out toto.bfcbc iv


0123456789ABCDEF K 01234567890ABCDEF0123456789ABCDEF
Question : Essayer de dchiffrer le fichier toto.bfcbc ?

RC4
# openssl enc rc4 -in toto -out toto.rc4

Pour dchiffrer un fichier avec lalgorithme RC4

# openssl enc rc4 -d -in toto.rc4 -out toto.rc4dechiff

Question : vrifier que toto.rc4 et toto.bf sont deux fichiers diffrents ? Quest ce que vous
constatez ?
Question : Tentez de dchiffrer un cryptogramme en utilisant un mauvais mot de passe. Comment
ragit openssl ?

Question : essayer de chiffrer un fichier de votre choix avec lalgorithme cast en mode CBC,
puis le dchiffrer ?

DES
Chiffrement d'un fichier : Pour chiffrer un fichier avec lalgorithme DES avec cl explicite

# openssl enc des -in toto -out toto.des k 0123456789ABCDEF

Question: Quelle est la commande qui permet de dchiffrer toto.des ?


Question: Quelle est la commande qui permet de crypter le fichier toto avec lalgorithme
3DES avec cl explicite ?
Question: Quelle est la commande qui permet de le dcrypter ?

AES
Chiffrement d'un fichier
Pour chiffrer un fichier avec lalgorithme AES utilisant une cl symtrique.

#openssl aes-256-cbc -in toto -out toto.aes -e -k cle.key


cle.key : fichier contenant une cl quelconque quon peut la
gnrer avec openssl dune manire alatoire
#openssl rand out cl.key 1024

pour gnrer un nombre alatoire sur numbits (utiliser loption base 64 pour la lisibilit).
Pour dchiffrer un fichier avec lalgorithme AES utilisant une cl symtrique

# openssl aes-256-cbc -in toto.aes -out

toto2 -d k cl.key

Question : vrifier maintenant que le contenu de toto et toto1 est le mme


Question : Quelle est la diffrence si dans la commande prcdente on supprime loption out toto2 ?

Chiffrement AES avec vecteur dinitialisation. Attention, ce vecteur doit tre chang
avant chaque cryptage !

#openssl enc -e -a -aes-128-cbc -iv "0123" -in tot

-out toto.aes

Dchiffrement AES avec vecteur dinitialisation

#openssl enc -d -a -aes-128-cbc -iv "0123" -in toto.aes -out


toto2
enter aes-128-cbc decryption password: azerty
Question : vrifier maintenant que le contenu de toto et toto1 est le mme ?

3. Chiffrement asymtrique avec openSSL


3.1. Gnration de cl RSA
La syntaxe qui permet de gnrer une paire de cl prive publique RSA est la suivante :
#openssl genrsa -out <fichier.pem> <size>
Question : gnrer une cl RSA de taille 1024 bits?
Question : gnrer une cl RSA de taille 20 bits?

Visualisation des cls RSA

#openssl rsa in macle.pem text -noout


Loption text demande laffichage dcod de la paire de la paire de cl. Loption noout
supprime la sortie normalement produite par la commande rsa.

Chiffrement de la cl RSA par DES

#openssl rsa in macle.pem des out macle.pem


Question : comment peut-on crypter macle.pem avec blowfish ou RC4?
Question : quelle est lutilit de crypter le fichier macle.pem?

Extraction de la partie publique

#openssl rsa in macle.pem pubout out maclepub.pem

Stocke la partie publique dans un ficchier part. Notez que macle.pem peut tre crypt ou
non avec un algorithme symtrique.
Question : afficher le contenu du fichier maclepub.pem ?

3.2. Chiffrement et dchiffrement de donnes avec RSA

#openssl rsautl pubin inkey maclepub.pem in toto encrypt out


toto.rsa

Le cryptage avec RSA se fait avec la cl publique. Pour faire le dcryptage la commande
suivante le permet

#openssl rsautl inkey macle.pem in toto.rsa decrypt out


toto.rsadec
Vrifier lgalit des fichiers toto.rsadec et toto ?

4. Hachage
La syntaxe gnrale de la commande pou les fonctions de hachage est la suivante.

$openssl dgst <-algo> -out <sortie> <entree>


Pour hacher un fichier. algo est l'algorithme de hachage (sha, sha1, dss1, md2, md4, md5,
ripemd160).

MD5
Question : Calculer la valeur de lempreinte du fichier toto avec lalgorithme MD5 et la mettre
dans un fichier emp.md5? Quelle est la taille de cette empreinte ?

SHA1
Question : Calculer la valeur de lempreinte du fichier toto avec lalgorithme SHA1 et la
mettre dans un fichier emp.sha1? Quelle est la taille de cette empreinte ?
Comparer le rsultat des deux fonctions de hachage ?

Signature de fichiers
Signer un document revient signer son empreinte. Pour cela, on utilise loption sign de la
commande rsautl :

#openssl rsautl sign in result_hashage inkey clprive.pem


out signature

Tout dabord on doit calculer lempreinte du fichier

#openssl dgst md5 out empreinte toto


Puis signe le document revient signer (la crypter avec la cl prive) son empreinte.

#openssl rsautl sign in empreinte inkey cl.pem out signature


Il reste en suite vrifier que lempreinte ainsi produite est la mme que lon peut calculer.
Loption pubin indique que la cl utilise pour la vrification est la partie publique.

#openssl rsautl verify in signature -out empreinte2 pubin


inkey clpub.pem
Question : comparer empreinte et empreinte2?

5. Certificats
Un certificat auto sign est comme le certificat de lautorit de certification 'root' qui va signer
lui-mme son certificat. Thoriquement, a n'a pas de valeur, mais ici, c'est nous le tiers de
confiance et nous savons qui nous sommes.

5.1. Cration du certificat de l'autorit de certification


La premire tape consiste gnrer une paire de cls RSA pour lautorit de certification
(CA) avec openssl.
On vous demande de crer cette paire de cl et de la mettre dans un fichier ca_cle.pem ?
Ensuite, partir de la cl prive, on cre un certificat x509 pour une dure de validit d'un an
auto-sign :

#openssl req
ca_cert.pem

new

x509

days

365

key

ca_cle.pem

out

Vous allez saisir maintenant les informations suivantes (celles en gras)


Country Name (2 letter code) [AU]: TN
State or Province Name (full name) [Some-State]:Tunis
Locality Name (eg, city) []:Tunis
Organization Name (eg, company) [Internet Widgits Pty Ltd]: ESPRIT
Organizational Unit Name (eg, section) []:ESPRIT
Common Name (eg, YOUR name) []:CA
Email Address []: votremail@xxx

C'est notre certificat d'autorit de certification qui va permettre de signer les


certificats crs
Pour visualiser le contenu dun certificat utiliser la commande suivante :

#openssl x509 -in ca_cle.pem text noout

Question : Expliquer le contenu du fichier afficher ?

5.2. Cration du certificat pour serveur


Gnrer cl RSA pour votre serveur et de la mettre dans un fichier serveur_cle.pem ?
Ensuite vous allez maintenant crer un fichier de demande de signature de certificat (CSR
Certificate Signing Request) ave cla commande suivante :

#openssl req new -key serveur_cle.pem out serveur_cert.pem


Vous allez saisir maintenant les informations suivantes remplissez-les en adaptant sauf le
champ "Common Name" qui doit tre identique au nom d'hte de votre serveur
Common Name (eg, YOUR name) []:serveur.fr

Taper la commande less serveur_cert.pem pour visualiser le contenu du certificat.

5.3. Signature du certificat du serveur par la CA

#openssl x509 req in serveur_cert.pem out serveur_cert.pem


-CA ca_cert.pem CAkey ca_cle.pem CAcreateserial CAserial
ca.srl

Pour vrifier un certificat, il est ncessaire de disposer du certificat de lautorit qui la mis

#openssl verify CAfile ca_cert.pem serveur_cert.pem