Se familiariser avec les opérations cryptographiques: chiffrement, déchiffrement, hashage, signature digitale.
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.
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.
Créer un fichier "message.txt" et y mettre un texte confidentiel
...\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.
...\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.
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
...\Source> openssl enc -des-cbc -in message.txt -out message.crypt -pass file:secret.txt
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
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.
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 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é