Introduction à la sécurité informatique
Cours

Atelier Pratique I : Opérations Cryptographiques avec OpenSSL

Objectifs

Se familiariser avec les opérations cryptographiques: chiffrement, déchiffrement, hashage, signature digitale.

Organiser l'environnement de travail
  • Pour des raisons de clarté, créer un répertoire pour la source (Source) et un répertoire pour le destinataire (Destinataire).

  • Mettre tous les fichiers qui concernent la source dans le répertoire Source et tous les fichiers qui concernent le destinataire dans le répertoire Destinataire.

  • A chaque fois qu'un fichier doit être transmis de la source vers le destinataire, copier ce fichier dans le répertoire du destinataire.

  • Pour pouvoir appeler l'exécutable openssl.exe, rajouter le chemin de ce dernier dans la variable d'environnement PATH. Si vous ne savez pas le faire demandez à votre enseignant.

Résumé du travail à réaliser

Voici un schéma résumant le scénario d'échange sécurisé à réaliser. Il permettra d'assurer la confidentialité, l'intégrité, l'authentification de l'origine et la non-répudiation.

Résumé du travail à réaliser
Résumé du travail à réaliser

Côté émetteur

Message confidentiel

Créer un fichier "message.txt" et y mettre un texte confidentiel

Générer les clés privées RSA de la source et la destination

...\Source> openssl genrsa -out src_rsa.pem -passout pass:srcpasswd -des 512

...\Destinataire> openssl genrsa -out dest_rsa.pem -passout pass:destpasswd -des 512

src_rsa.pem et dest_rsa.pem vont contenir les clés privées de la source et du destinataire protégés par les mots de passe srcpasswd et destpasswd respectivement.

Extraction des clés publiques à partir des fichier "src_rsa.pem" et "dest_rsa.pem" vers "src_rsa_pub.pem" et "dest_rsa_pub.pem"

...\Source> openssl rsa -in src_rsa.pem -passin pass:srcpasswd -out src_rsa_pub.pem -pubout

...\Destinataire> openssl rsa -in dest_rsa.pem -passin pass:destpasswd -out dest_rsa_pub.pem -pubout

Ici l'option -pubout permet d'extraire la clé publique (par defaut c'est la clé privée qui est extraite)

L'option passin et passout c'est pour ptoteger les fichiers, pass:xxxx permet de faire une protection par mots de passe.

échange de secret partagé

La source choisi un secret partagé (qui sera utilisé pour générer la clé symétrique partagée) par exemple "secret" (stocké dans secret.txt) et elle chiffre ce secret partagé avec la clé publique de la destination "dest_rsa_pub.pem" Ici "secret" sera utilisé par DES pour fabriquer la clé symétrique ET le vecteur d'initialisation nécessaire pour DES en mode CBC.

..\Source> openssl rsautl -in secret.txt -out secret.crypt -inkey dest_rsa_pub.pem -pubin -encrypt

Chiffrement de "message.txt" avec DES-CBC en utilisant le secret partagé "secret" comme paramètre de génération de clé de session et de vecteur d'initialisation.

...\Source> openssl enc -des-cbc -in message.txt -out message.crypt -pass file:secret.txt

Signature de message crypté "message.crypt"

Calcul de condensat (code de hashage) avec MD5

  • ...\Source> openssl dgst -md5 -binary -out message.crypt.dgst message.crypt

Chiffrement du condensat (code de hashage) avec la clé privée de la source "src_rsa.pem"

  • ...\Source> openssl rsautl -in message.crypt.dgst -out message.crypt.dgst.sign -sign -inkey src_rsa.pem

Côté Récepteur

La destination connait: dest_rsa.pem dest_rsa_pub.pem et recoit: "secret.crypt" "message.crypt" "message.crypt.dgst.sign"

Donc il faudra recopier ces trois fichiers du répertoire Source vers le répertoire Destinataire.

Authentification de la source et de l'intégrité de donnée reçue.

Déchiffrement de l'empreinte (code de hashage) du message ==> dgst1

  • ...\Destinataire> openssl rsautl -in message.crypt.dgst.sign -out dgst1 -pubin -inkey src_rsa_pub.pem

La destination calcule elle même le digest à partir de "message.crypt" ==>dgst2

  • ...\Destinataire> openssl dgst -md5 -binary -out dgst2 message.crypt

La destination compare les deux condensats: (la commande FC fait un File Compare, /B fait une comparaison Binaire)

  • ...\Destinataire> fc /B dgst1 dgst2

Comparaison des fichiers dgst1 et dgst2: aucune différence trouvée ==> donc l'intégrité du "message.crypt" est confirmée. ==> aussi l'authentification de la source est aussi verifiée.

Déchifferement du message "message.crypt"

Déchifferement de la "clé partagée" (secret)

  • ...\Destinataire> openssl rsautl -decrypt -in secret.crypt -out secret.txt -inkey dest_rsa.pem

Déchiffrement du "message.crypt" à l'aide de secret qui se trouve dans "secret.txt"

  • ...\Destinataire> openssl enc -in message.crypt -out message.txt -pass file:secret.txt -d -des-cbc

Lire le message! ! !

  • ...\Destinataire> type message.txt

Sevice confidentialté assuré

Atelier Pratique II : Sécuriser un serveur web ApacheIntroduction
Accueil Yacine Challal & Hatem Bettahar creativecommons : by-nc-ndRéalisé avec SCENARI