# 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.

<p class="callout danger">**Prérequis :** Les TP ci-dessous seront réalisés sur openSSL.</p>

Installation sur debian : `apt install openssl`

Installation sur windows : `winget install openssl`

---

### <span style="text-decoration: underline; color: rgb(52,73,94);">**TP1 - Hashage**</span>

#### **<span style="color: rgb(35,111,161);">Objectif :</span>**

- Comprendre le fonctionnement des fonctions de hachage.
- Voir les différences entre les algorithmes.
- Observer un effet "avalanche"

#### **<span style="color: rgb(35,111,161);">Exercice 1 : Génération des empreintes et tests de hash</span>**

Créer un fichier texte qui contiendra un message simple :

```
echo "Bonjour les BTS SIO/CIEL !" > message.txt
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/ERiimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/ERiimage-png.png)

Calculer un premier hash :

```
openssl dgst -sha1 message.txt
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/PwOimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/PwOimage-png.png)

copier / coller le fichier en message1.txt et calculer également son hash.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Shtimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Shtimage-png.png)

<p class="callout info">**info** : On constate bien que si même donnée d'entrée, même donnée de sortie.</p>

Tester ensuite avec des algorithmes plus complexe ayant une clé suppérieure.

```
openssl dgst -sha256 message.txt
openssl dgst -sha512 message.txt
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/yMvimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/yMvimage-png.png)

<p class="callout info">**Info** : On constate bien la différence de complexité d'un algo à l'autre.</p>

Tester maintenant l'effet "Boule de neige".

Modifier un caractère dans le fichier, en changeant par exemple le '!' en '?'. Recalculer le hash.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/MQwimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/MQwimage-png.png)

<p class="callout info">**Info** : On constate bien que toute modification, aussi infime soit-elle, entraîne une modification conséquente du hash.</p>

#### **<span style="color: rgb(35,111,161);">Exercice 2 : Limitation du hash sur les mots de passe faibles.</span>**

Chiffrer un mot de passe avec un algorithme volontairement vulnérable dans un fichier texte :

```
echo -n "azerty" | md5sum
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/ev8image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/ev8image-png.png)

Copier la chaîne de caractères sans le ' -' dans un fichier texte appelé par exemple 'password.txt'

Installer '<span style="color: rgb(132,63,161);">***hashcat***</span>'.

Récupérer ou éditer un dictionnaire simple ( il y en a un fourni en pièce jointe de cette page).

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/nmIimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/nmIimage-png.png)

Pour casser le hash, il suffit d'exécuter la commande suivante :

```
hashcat -m 0 password.txt dictionnaire.txt
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/aC4image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/aC4image-png.png)

<p class="callout info">**Info** : On voit ici que le mot de passe a été correctement deviné et que cela à pris moins d'une seconde.</p>

Nous pouvons en conclure que l'utilisation de mots de passe simple et d'algorithmes obsolètes est à proscrire.

---

### <span style="text-decoration: underline; color: rgb(52,73,94);">**TP2 - Chiffrement symétrique**</span>

#### **<span style="color: rgb(35,111,161);">Objectif :</span>**

- Comprendre AES et les modes de chiffrement.
- Manipuler une clé symétrique.
- Observer les différences entre ECB et CBC.

#### **<span style="color: rgb(35,111,161);">Exercice 1 : chiffrer et déchiffrer un fichier</span>**

<p class="callout success">**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.</p>

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
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/F2Vimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/F2Vimage-png.png)

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/KBsimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/KBsimage-png.png)

Déchiffrer le message :

```
openssl enc -aes-256-cbc -d -salt -in message.enc -out message.dec
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/5Wnimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/5Wnimage-png.png)

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/016image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/016image-png.png)

#### **<span style="color: rgb(35,111,161);">Exercice 2 : ECB vs CBC</span>**

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.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/YiQimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/YiQimage-png.png)

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/ZGyimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/ZGyimage-png.png)

---

### <span style="text-decoration: underline; color: rgb(52,73,94);">**TP3 - Chiffrement asymétrique**</span>

#### **<span style="color: rgb(35,111,161);">Objectif :</span>**

- Générer une paire de clés RSA.
- Chiffrer/déchiffrer.
- Signer/vérifier.

<p class="callout success">**Conseil** : Proposer aux étudiants d'échanger les clés publiques avec un binôme, puis de se faire passer un message chiffré.</p>

#### **<span style="color: rgb(35,111,161);">Exercice 1 : Générer un couple de clé privée/publique</span>**

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
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/tnximage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/tnximage-png.png)

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
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/gMUimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/gMUimage-png.png)

#### **<span style="color: rgb(35,111,161);">Exercice 2 : Signature numérique de document</span>**

Signer un document avec la clé privée :

```
openssl dgst -sha256 -sign private.key -out signature.bin message.txt
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/UvBimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/UvBimage-png.png)

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/r2Ximage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/r2Ximage-png.png)

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
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/7oGimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/7oGimage-png.png)

<p class="callout info">**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é.</p>

En effet, faire une modification sur le message.txt et relancer la commande :

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/g5Simage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/g5Simage-png.png)