529 Words Cours TP

Objectif

Se familiariser avec les services de base de la sécurité : chiffrement symétrique, chiffrement asymétrique, hachage, signature numérique et sa vérification, et certification. Le TP s’appuie sur la suite logicielle OpenSSL, une boîte à outils cryptographiques implémentant les protocoles SSL et TLS.

1. Chiffrement symétrique

Chiffrement avec l’algorithme RC4, sur un fichier fichier_nom_eleve contenant du texte clair :

openssl enc -rc4 -in fichier_nom_eleve -out fichier_chiff_algo

OpenSSL permet de donner un mot de passe en entrée : à partir de ce mot de passe, il dérive une clé de chiffrement. Le fichier chiffré, une fois transmis, se déchiffre et se vérifie ainsi :

openssl enc -rc4 -d -in fichier_chiff_rc -out fichier_dechiff_rc
diff fichier_nom_eleve fichier_dechiff_rc

Chiffrement avec l’algorithme DES, avec une clé explicite :

openssl enc -des -in fichier_nom_eleve -out fichier_chiff_des -k 0123456789ABCDEF

2. Chiffrement asymétrique

Le chiffrement RSA demande une paire de clés publique/privée, générée au préalable. En OpenSSL, les clés RSA sont stockées au format .pem (Privacy Enhanced Mail).

# génération d'une paire de clés RSA de 1024 bits
openssl genrsa -out rsakey.pem 1024

# affichage des clés en hexadécimal
openssl rsa -in rsakey.pem -text -noout

# extraction de la clé publique à partir de la clé privée
openssl rsa -in rsakey.pem -pubout -out rsapubkey.pem

# chiffrement de la clé privée elle-même avec AES256
openssl enc -AES256 -in rsakey.pem -out rsakeyencaes.pem

Chiffrer le fichier qui contient la paire de clés oblige à saisir un mot de passe à chaque utilisation de cette clé.

Chiffrement et déchiffrement de données avec RSA :

# chiffrement avec la clé publique du destinataire
openssl pkeyutl -pubin -inkey rsapubkey.pem -in fichier_nom_eleve -encrypt -out fichier_chiff_rsa

# déchiffrement avec la clé privée
openssl pkeyutl -inkey rsakey.pem -in fichier_chiff_rsa -decrypt -out fichier_dechiff_rsa

3. Signature numérique

Pour signer un document, on calcule d’abord son empreinte :

openssl dgst -md5 -out fichier_nom_eleve.md5 fichier_nom_eleve
openssl dgst -sha1 -out fichier_nom_eleve.sha1 fichier_nom_eleve

Signer un document revient à signer son empreinte, avec la clé privée ; la vérification se fait avec la clé publique correspondante :

# signature de l'empreinte avec la clé privée
openssl rsautl -sign -in fichier_nom_eleve.sha1 -inkey rsaprivkey.pem -out fichier_sig

# vérification de la signature avec la clé publique
openssl rsautl -verify -in fichier_sig -out empreinte2 -pubin -inkey rsapubkey.pem

4. Certificat numérique

# génération d'une paire de clés RSA de 1024 bits pour le serveur
openssl genrsa -out serveur_cle.pem 1024

# création d'une demande de signature de certificat (CSR)
openssl req -new -key serveur_cle.pem -out serveur_cert.pem

Un certificat se signe de deux façons : auto-signature, ou signature par une Autorité de Certification (AC).

Auto-signature, avec une période de validité d’un an :

openssl req -new -x509 -days 365 -key serveur_cle.pem -out serveur_cert.crt
openssl x509 -in serveur_cert.crt -text -noout

Signature par une AC : génération de la clé privée et du certificat auto-signé de l’AC, puis signature de la demande du serveur par cette AC.

# clé privée RSA de l'AC, 2048 bits
openssl genrsa -out cakey.pem 2048

# certificat auto-signé de l'AC, valide 730 jours
openssl req -new -x509 -days 730 -key cakey.pem -out ca_crt

# signature de la demande du serveur (server.csr) par l'AC
openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey cakey.pem -CAcreateserial -CAserial ca.srl