Fiche TP - Hash, chiffrement, utilisation et limitations.
Cette fiche TP Vise à accompagner le cour sur le hachage et le chiffrement. Le contenu sera déroulé en parallèle du cour pour illustrer le propos.
Prérequis : Les TP ci-dessous seront réalisés sur openSSL.
Installation sur debian : apt install openssl
Installation sur windows : winget install openssl
TP1 - Hashage
Objectif :
- Comprendre le fonctionnement des fonctions de hachage.
- Voir les différences entre les algorithmes.
- Observer un effet "avalanche"
Exercice 1 : Génération des empreintes et tests de hash
Créer un fichier texte qui contiendra un message simple :
echo "Bonjour les BTS SIO/CIEL !" > message.txt
Calculer un premier hash :
openssl dgst -sha1 message.txt
copier / coller le fichier en message1.txt et calculer également son hash.
info : On constate bien que si même donnée d'entrée, même donnée de sortie.
Tester ensuite avec des algorithmes plus complexe ayant une clé suppérieure.
openssl dgst -sha256 message.txt
openssl dgst -sha512 message.txt
Info : On constate bien la différence de complexité d'un algo à l'autre.
Tester maintenant l'effet "Boule de neige".
Modifier un caractère dans le fichier, en changeant par exemple le '!' en '?'. Recalculer le hash.
Info : On constate bien que toute modification, aussi infime soit-elle, entraîne une modification conséquente du hash.
Exercice 2 : Limitation du hash sur les mots de passe faibles.
Chiffrer un mot de passe avec un algorithme volontairement vulnérable dans un fichier texte :
echo -n "azerty" | md5sum
Copier la chaîne de caractères sans le ' -' dans un fichier texte appelé par exemple 'password.txt'
Installer 'hashcat'.
Récupérer ou éditer un dictionnaire simple ( il y en a un fourni en pièce jointe de cette page).
Pour casser le hash, il suffit d'exécuter la commande suivante :
hashcat -m 0 password.txt dictionnaire.txt
Info : On voit ici que le mot de passe a été correctement deviné et que cela à pris moins d'une seconde.
Nous pouvons en conclure que l'utilisation de mots de passe simple et d'algorithmes obsolètes est à proscrire.
TP2 - Chiffrement symétrique
Objectif :
- Comprendre AES et les modes de chiffrement.
- Manipuler une clé symétrique.
- Observer les différences entre ECB et CBC.
Exercice 1 : chiffrer et déchiffrer un fichier
Conseil : Proposer aux étudiants de chiffrer un message, puis d'échanger leurs messages et se donner la clé sur un support à part ou à l'oral.
Chiffrer le fichier 'message.txt'. Il va demander un mot de passe qui fera office de clé de chiffrement.
openssl enc -aes-256-cbc -salt -in message.txt -out message.enc
Déchiffrer le message :
openssl enc -aes-256-cbc -d -salt -in message.enc -out message.dec
Exercice 2 : ECB vs CBC
Selon les cas, certaines méthodes de chiffrements sont plus efficaces que d'autres.
Récupérer l'image fournie dans le TP ou la télécharger. Puis créer deux version chiffrées de cette image.
openssl enc -aes-256-ecb -in Tux-PNG-Pic.png -out image1.enc
openssl enc -aes-256-cbc -in Tux-PNG-Pic.png -out image2.enc
Le résultat est qu'il est facile avec le SCB, d'isoler des paterns avec un editeur hexadécimal ou avec un visualiseur d'images chiffrées.
TP3 - Chiffrement asymétrique
Objectif :
- Générer une paire de clés RSA.
- Chiffrer/déchiffrer.
- Signer/vérifier.
Conseil : Proposer aux étudiants d'échanger les clés publiques avec un binôme, puis de se faire passer un message chiffré.
Exercice 1 : Générer un couple de clé privée/publique
Générer le couple de clé avec les commandes suivantes :
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
Échanger les clé ou procéder soi-même au chiffrement / déchiffrement.
Chiffrer le message avec la clé publique :
openssl pkeyutl -encrypt -inkey public.key -pubin -in message.txt -out message.enc
Déchiffrer ou faire déchiffrer par son binôme avec la clé privée :
openssl pkeyutl -decrypt -inkey private.key -in message.enc -out message_decrypt.txt
Exercice 2 : Signature numérique de document
Signer un document avec la clé privée :
openssl dgst -sha256 -sign private.key -out signature.bin message.txt
La signature (.bin) et le message (.txt) sont transmis au binôme ou vérifié par soi-même avec la clé publique.
openssl dgst -sha256 -verify public.key -signature signature.bin message.txt
Info : Le message 'verified OK' signifie que l'identité de l'émeteur du fichier est vérifié. Mais également que le message en question n'a pas été altéré.
En effet, faire une modification sur le message.txt et relancer la commande :