0% ont trouvé ce document utile (0 vote)
37 vues19 pages

Fascicule 3

Ce document présente un laboratoire sur la cryptographie utilisant OpenSSL, couvrant des concepts tels que le chiffrement symétrique et asymétrique, la signature numérique et les certificats numériques. Il décrit les commandes OpenSSL pour chiffrer et déchiffrer des fichiers, générer des clés RSA, et signer des documents, tout en soulignant l'importance de la sécurité des données. Les algorithmes comme RC4, DES, et RSA sont discutés, ainsi que les étapes pour créer et vérifier des signatures numériques et des certificats numériques.

Transféré par

ahmed douss
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
37 vues19 pages

Fascicule 3

Ce document présente un laboratoire sur la cryptographie utilisant OpenSSL, couvrant des concepts tels que le chiffrement symétrique et asymétrique, la signature numérique et les certificats numériques. Il décrit les commandes OpenSSL pour chiffrer et déchiffrer des fichiers, générer des clés RSA, et signer des documents, tout en soulignant l'importance de la sécurité des données. Les algorithmes comme RC4, DES, et RSA sont discutés, ainsi que les étapes pour créer et vérifier des signatures numériques et des certificats numériques.

Transféré par

ahmed douss
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Fascicule 3 : La Cryptographie avec OpenSSL

Meryam Bejaoui

Mohamed Aymen Chagra

Fakher Jemli

Ruqaia Sabta

A-Objectif :

L’objectif de ce lab est de vous familiariser avec les services de base de la


sécurité. Notamment le chiffrement symétrique, le chiffrement asymétrique, le
hachage, la signature numérique et sa vérification, et la certification.

Ces travaux pratiques sont basés sur la suite logicielle OpenSSL.

OpenSSL est une boîte à outils cryptographiques implémentant les protocoles


SSL et TLS qui offre une bibliothèque de programmation en C permettant de
réaliser des applications client/serveur sécurisées s’appuyant sur SSL/TLS.

1. CHIFFREMENT SYMETRIQUE

L’algorithme RC4 :(Rivest Cipher 4) est un algorithme de chiffrement par


flot conçu en 1987 par Ron Rivest pour RSA Security. Bien qu'il ait été
largement utilisé dans le passé, notamment dans des protocoles comme
SSL/TLS et WEP, il est aujourd'hui considéré comme obsolète en raison de
ses faiblesses cryptographiques.

La commande qui vous permet d’utiliser le chiffrement symétrique est la


commande

#openssl enc -in fichier_clair -out resultat_obtenu


- Créer le fichier fichier_nom_eleve contenant du texte clair

#gedit fichier_nom_eleve

- Chiffrer ce fichier avec l’algorithme RC4

# openssl enc -rc4 -in fichier_nom_eleve -out fichier_chiff_algo

NB : openSSL nous donne la possibilité de donner un mot de passe en entrée :


étant donné le mot de passe, openSSL dérive une clé de chiffrement.

- Vérifier que le message dans fichier_nom_eleve.enc est bien inintelligible

Ce fichier chiffré est transmis à votre camarade qui pourra également le


déchiffrer.

- Ecrire la commande qui permet de le déchiffrer et produit ainsi le fichier

#openssl enc -RC4 -d -in fichier_chiff_algo -out fichier_dechiff_rc

- Vérifier alors que le message déchiffré est bien identique au fichier initial

#diff fichier_nom_eleve fichier_dechiff_rc

-->Ils sont bien identiques !

L’algorithme DES(Data Encryption Standard) est un algorithme de


chiffrement symétrique qui a été largement utilisé pour sécuriser les
données dans les années 1970 et 1980. Bien que jadis une norme de
chiffrement largement adoptée, il est aujourd'hui considéré comme
obsolète en raison de ses vulnérabilités, notamment en raison de la taille
de sa clé relativement petite, qui peut être facilement attaquée par des
attaques de force brute

Pour chiffrer le fichier fichier_nom_eleve avec l’algorithme DES avec clé explicite :
#openssl enc -des -in fichier_nom_eleve -out fichier_chiff_des -k
0123456789ABCDEF

- Quelle est la commande qui permet de déchiffrer fichier_chiff_des ?

#openssl enc -des -d -in fichier_chiff_des -out fichier_dechiffre -k


0123456789ABCDEF

- Vérifier que le fichier déchiffré est identique au fichier initial.

#diff fichier_nom_eleve fichier_dechiffre

-->Ils sont identiques !

2. CHIFFREMENT ASYMETRIQUE :

Le chiffrement asymétrique RSA demande l’utilisation d’une paire de clés : une


clé publique et une clé privée qu’il faut tout d’abord les générer.

Génération de clé privée/publique RSA :


En openSSL, les clés RSA générées sont stockées dans un fichier avec
l’extension .pem (Privacy Enhanced Mail). L’instruction à utiliser est openssl
genrsa. Utiliser cette instruction pour :

- Générer une paire de clés de taille 1024 bits et stocker-la dans le fichier :
[Link]

#openssl genrsa -out [Link] 1024

- Afficher le fichier en utilisant la commande cat. Qu’est ce que vous remarquez ?


⟶ Le fichier contient la clé privée RSA :

 Ce fichier contient uniquement la clé privée au format PEM.


 La clé privée est encodée en Base64

- Une façon de visualiser les clés en format complet est d’utiliser la commande
rsa. Afficher alors les clés en format hexadécimal, en supprimant la sortie
normalement produite par l’instruction rsa.

#openssl rsa -in [Link] -text -noout

extrait de l’affichage :
- Extraire la clé publique de la clé privée et sauvegarder le résultat dans le fichier
: [Link]

#openssl rsa -in [Link] -pubout -out [Link]

- pour afficher la clé public :

#cat [Link]
Chiffrement de la clé RSA par l’algorithme AES256 : permet d'ajouter une
couche de sécurité supplémentaire à la clé privée en la protégeant par un
mot de passe (ou une phrase secrète). L'AES-256 est un algorithme de
chiffrement symétrique, utilisé ici pour crypter la clé privée RSA.

Nous allons maintenant utiliser l’algorithme AES256 pour chiffrer la clé privée.

- Ecrire la commande qui permet de chiffrer le fichier [Link] et produit


ainsi un fichier [Link].

#openssl enc -AES256 -in [Link] -out [Link]


Remarque : le fichier qu’on veut chiffrer est celui qui contient la paire de clé
privée/publique ! Ceci fera en sorte qu’à chaque fois qu’on veut utiliser
l’information stockée dans le fichier de clés, on devra mettre le mot de passe.

Chiffrement/déchiffrement de données avec RSA : est généralement utilisé


pour le chiffrement de petites quantités de données. RSA est un algorithme
de chiffrement asymétrique et est beaucoup plus lent que les algorithmes
de chiffrement symétrique comme AES. C'est pourquoi RSA est souvent
utilisé pour échanger une clé symétrique (par exemple, AES), qui est
ensuite utilisée pour chiffrer de grandes quantités de données.

- Ecrire la commande qui permet de chiffrer le fichier initial fichier_nom_eleve


avec la clé publique [Link] et produit ainsi un fichier
fichier_nom_eleve.rsaenc (utiliser l’instruction openssl rsautl).

#openssl pkeyutl -pubin -inkey [Link] -in fichier_nom_eleve -


encrypt -out fihcier_chiff_rsa

- Ecrire la commande qui permet de déchiffrer le fichier


fichier_nom_eleve.rsaenc et produit ainsi un fichier fichier_nom_eleve.rsadec.

#openssl pkeyutl -inkey [Link] -in fihcier_chiff_rsa -decrypt -out


fichier_dechiff_rsa

- Vérifier l’égalité des deux fichiers fichier_nom_eleve et fichier_dechiff_rsa.

#diff fichier_nom_eleve fichier_dechiff_rsa

⟶ Ils sont identiques !

3. SIGNATURE NUMERIQUE : permet de garantir l'intégrité et


l'authenticité des données en utilisant une clé privée pour signer
l'empreinte (hash) d'un fichier. Voici les étapes à suivre pour générer
une empreinte d'un fichier et pour signer un document.
Génération d’une empreinte d’un fichier : L'empreinte est une représentation
unique et compacte d'un fichier, obtenue à l'aide d'une fonction de hachage
cryptographique comme MD5, SHA1, ou SHA256.

Pour signer un document on calcule d'abord une empreinte de ce document.


L’instruction à utiliser pour calculer l’empreinte est :

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

- Calculer la valeur de l’empreinte du fichier fichier_nom_eleve avec l’algorithme


MD5 et la mettre dans un fichier fichier_nom_eleve.md5.

#openssl dgst -MD5 -out fichier_nom_eleve.md5 fichier_nom_eleve

- Quelle est la taille de cette empreinte ?

L'empreinte MD5 est toujours de 128 bits (16 octets) quelle que soit la taille ou
le contenu du fichier. Lorsqu'elle est représentée en hexadécimal, elle occupe 32
caractères.

verification

=> 32 caractéres hexadecimal (128 bits).

- Calculer la valeur de l’empreinte du même fichier avec l’algorithme SHA1 et la


mettre dans un fichier fichier_nom_eleve.sha1.
#openssl dgst -SHA1 -out fichier_nom_eleve.sha1 fichier_nom_eleve

- Quelle est la taille de cette empreinte ?

=> 40 caractéres hexadecimal (160 bits).

- Comparer le résultat des deux fonctions de hachage. Qu’est-ce que vous


remarquez ?

=> Les deux fonctions de hachage transforment les données d'entrée en


une empreinte unique, mais SHA1 produit des empreintes plus longues et
est légèrement plus robuste que MD5.

Signature d’un fichier : Une fois l'empreinte générée, la signature numérique


est réalisée en chiffrant cette empreinte avec une clé privée. Cela permet de
vérifier l'authenticité du fichier.

Signer un document revient à signer son empreinte. L’instruction à utiliser dans


ce cas est :

#openssl rsautl –sign –in empreinte_fichier –inkey [Link] – out


fichier_sig

- Signer le fichier fichier_nom_eleve.sha1 et mettre de résultat le fichier


fichier_sig. Dans ce cas, quel est la clé que vous devez utiliser pour signer ?

on doit utiliser le clé privée ([Link])


# openssl pkeyutl -sign -in fichier_nom_eleve.sha1 -inkey [Link] -out
fichier_sig

(le fichier qui contient le clé privée dans notre cas est “[Link]”)

- Il reste ensuite à vérifier que l’empreinte ainsi produite dans le fichier


fichier_nom_eleve.sha1 est la même que l’on peut calculer. Utiliser l’instruction
openssl rsautl -verify.

# openssl pkeyutl -verify -in fichier_nom_eleve.sha1 -sigfile fichier_sig -


pubin -inkey [Link]

- Quel est la clé que vous devez utiliser pour vérifier la signature du fichier
fichier_sig?

Lors de la vérification, on utilise la clé publique correspondante (dans


notre exemple, [Link]) pour déchiffrer la signature et obtenir
l'empreinte. Ensuite, cette empreinte est comparée avec l'empreinte
calculée directement à partir du fichier original.

4. CERTIFICAT NUMERIQUE : est un document électronique utilisé


pour prouver l'identité d'une entité (individu, organisation, site web,
etc.). Il contient des informations relatives à l'entité, ainsi que sa clé
publique. Ce certificat est signé par une autorité de certification (CA),
garantissant son authenticité et sa fiabilité. Le certificat numérique
est essentiel dans les systèmes de sécurité basés sur la
cryptographie, tels que SSL/TLS, pour sécuriser les communications
sur Internet.

Génération de la clé privée

- Générer une paire de clés RSA de taille 1024 bits et stocker le résultat dans le
fichier server_cle.pem

openssl genrsa -out server_cle.pem 1024

Génération d’une requête de création d’un certificat

Créer un fichier de demande de signature de certificat (CSR Certificate Signing


Request) :

# openssl req -new -key server_cle.pem -out server_cert.pem

Signature du certificat
Afin de signer le certificat deux possibilités sont offertes :

- Auto signer le certificat

- Signer le certificat par une autorité de certification (AC)

Auto signature d’un certificat

- Signer le fichier [Link] à l’aide de la clé privée contenant dans le fichier


server_cle.pem et stocker le résultat dans le fichier server_cert.crt. Le certificat
doit avoir une période de validité d’un an.

# openssl req -new -x509 -days 365 -key server_cle.pem -out


server_cert.crt

- Afficher le contenu du certificat en format texte :

#openssl x509 -in server_cert.crt -text -noout


Signature par une autorité de certification (AC)

La première étape consiste à générer une clé privée RSA pour l’AC de taille 2048
bits et de stocker le résultat dans le fichier [Link]

#openssl genrsa -out [Link] 2048


!Création du fichier [Link] à partir de la clé privée

# openssl req -new -key server_cle.pem -out [Link]

- Générer un certificat pour l’AC ayant une période de validité 730 jours et
stocker le résultat dans le fichier [Link].

#openssl req -new -x509 -days 730 -key [Link] -out [Link]
Rq: [Link] est le certificat auto signé de l'autorité de certification qui va
permettre de signer les certificats créés.

- Signer la demande du certificat du serveur (le fichier [Link]) par l’autorité


de certification AC en utilisant l’instruction suivante :

#openssl x509 -req -in [Link] -out [Link] -CA [Link] -CAkey
[Link] -CAcreateserial -CAserial [Link]

Rq : Le certificat signé est le fichier [Link]

Vous aimerez peut-être aussi