Aller au contenu

TP – Chiffrer un fichier, vérifier une empreinte et constater les limites d'un mauvais mode

BTS SIO SISR 1re année – Bloc 3 – S10

Note

But. Situation : Comment garder un fichier secret, et comment être sûr qu'il n'a pas été modifié ?

Comment ce TP fonctionne. Avant de manipuler, tu écris ce que tu anticipes (« J'anticipe »). Puis tu testes et tu notes ce que tu constates. Tu comprends ce que fait chaque commande (« Je comprends »). Un bilan de compétences clôt la séance. Les manipulations se font sur des machines virtuelles de laboratoire, isolées du réseau de l'établissement. Les identifiants communs d'un TP sont des identifiants de laboratoire : ils ne se réutilisent jamais ailleurs.

Objectif

Calculer et vérifier des empreintes, chiffrer et déchiffrer un fichier avec OpenSSL et GnuPG, constater pourquoi le mode ECB est à proscrire, puis montrer qu'un chiffrement sans contrôle d'intégrité n'empêche pas la falsification.

Contraintes

  • Binôme, durée : 3 h 20.
  • Travaille dans la VM Debian de laboratoire, dans un dossier dédié : mkdir -p ~/crypto && cd ~/crypto.
  • Les mots de passe de ce TP (LabPass-2026) sont des identifiants de laboratoire : ils ne se réutilisent jamais ailleurs.

Partie A. Empreintes et intégrité (40 min)

Crée un fichier et calcule son empreinte :

cd ~/crypto
echo "Rapport confidentiel : budget 2027" > rapport.txt
sha256sum rapport.txt
openssl dgst -sha256 rapport.txt
md5sum rapport.txt

J'anticipe. Si tu remplaces « 2027 » par « 2028 », l'empreinte sera-t-elle presque la même ou totalement différente ? ______________________

Éléments de réponse

Totalement différente : c'est l'effet d'avalanche. Un seul caractère modifié change l'empreinte en entier.

echo "Rapport confidentiel : budget 2028" | sha256sum
sha256sum rapport.txt > SHA256SUMS
cat SHA256SUMS
sha256sum -c SHA256SUMS
echo "ajout" >> rapport.txt
sha256sum -c SHA256SUMS

Je comprends.

Commande Rôle
sha256sum fichier Calcule l'empreinte SHA-256
sha256sum fichier > SHA256SUMS Enregistre l'empreinte dans un fichier de référence
sha256sum -c SHA256SUMS Vérifie que chaque fichier de la liste a toujours la même empreinte
md5sum Même principe avec MD5 (à ne plus utiliser pour la sécurité)

Questions.

  1. Combien de caractères hexadécimaux fait une empreinte SHA-256 ? MD5 ? Combien de bits cela représente-t-il ? ______________________
  2. Que dit sha256sum -c avant et après l'ajout d'une ligne ? ______________________
  3. Un attaquant qui remplace rapport.txt et SHA256SUMS sera-t-il détecté ? Que faut-il changer pour que la vérification ait une valeur ? ______________________
  4. Où trouve-t-on l'empreinte d'une image d'installation (ISO) pour la vérifier ? Pourquoi est-ce important qu'elle vienne d'un site sûr ? ______________________

Partie B. Chiffrer un fichier avec OpenSSL et GnuPG (50 min)

B1. OpenSSL

cd ~/crypto
openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt -in rapport.txt -out rapport.enc -pass pass:LabPass-2026
file rapport.enc
head -c 16 rapport.enc | od -c
openssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 -in rapport.enc -pass pass:LabPass-2026
openssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 -in rapport.enc -pass pass:mauvais

Je comprends.

Élément Rôle
enc -aes-256-cbc Chiffrement AES avec une clé de 256 bits, mode CBC
-pbkdf2 -iter 600000 Dérive la clé du mot de passe avec PBKDF2, 600 000 itérations (lent exprès)
-salt Ajoute un sel aléatoire (la sortie commence par Salted__)
-pass pass:… Mot de passe donné en ligne (à éviter hors laboratoire : il reste dans l'historique et la liste des processus)
-d Déchiffre

Questions.

  1. Que contiennent les 16 premiers octets du fichier chiffré ? Pourquoi le sel n'est-il pas secret ? ______________________
  2. Que se passe-t-il avec un mauvais mot de passe ? ______________________
  3. Chiffre deux fois le même fichier avec le même mot de passe et compare les deux fichiers (cmp, sha256sum). Sont-ils identiques ? Pourquoi ? ______________________
  4. Pourquoi ne faut-il pas écrire un mot de passe réel avec -pass pass: ? Quelle option utiliser à la place ? ______________________

B2. GnuPG

gpg --batch --yes --pinentry-mode loopback --passphrase 'LabPass-2026' --symmetric --cipher-algo AES256 -o rapport.gpg rapport.txt
gpg --batch --list-packets rapport.gpg
gpg --batch --pinentry-mode loopback --passphrase 'LabPass-2026' -d rapport.gpg

Note

Un message d'erreur de l'agent peut apparaître avec --list-packets : il est sans importance, tu lis seulement la description des paquets (algorithme, dérivation de clé).

  1. Quel algorithme GnuPG a-t-il utilisé ? Quel mode de dérivation de clé ? (indice : --list-packets) ______________________
  2. Compare OpenSSL et GnuPG : quel format est le plus répandu pour échanger un fichier chiffré avec un tiers ? ______________________

Partie C. Pourquoi le mode ECB est à proscrire (40 min)

On chiffre un texte fait de blocs identiques avec les modes ECB et CBC (clé et IV de laboratoire).

cd ~/crypto
python3 -c "print('A'*16*4 + 'B'*16*2, end='')" > blocs.txt
wc -c blocs.txt
K=00112233445566778899aabbccddeeff
IV=000102030405060708090a0b0c0d0e0f
openssl enc -aes-128-ecb -K $K -in blocs.txt -out ecb.bin
openssl enc -aes-128-cbc -K $K -iv $IV -in blocs.txt -out cbc.bin
od -v -An -tx1 -w16 ecb.bin
echo
od -v -An -tx1 -w16 cbc.bin

J'anticipe. Le fichier contient 4 blocs de « A » puis 2 blocs de « B » (16 octets chacun). Que verras-tu dans les sorties ECB et CBC ? ______________________

Éléments de réponse

En ECB, les quatre premiers blocs chiffrés sont identiques et les deux suivants aussi : la structure du clair est visible. En CBC, chaque bloc chiffré est différent, car il dépend du précédent.

Je comprends.

Élément Rôle
-K Clé en hexadécimal (ici 128 bits) ; on la donne directement, sans dérivation
-iv Vecteur d'initialisation de 128 bits (CBC)
od -v -An -tx1 -w16 Affiche les octets en hexadécimal, 16 par ligne (un bloc par ligne), sans abréger les lignes répétées

Questions.

  1. Combien de blocs identiques observes-tu en ECB ? En CBC ? ______________________
  2. Pourquoi cette fuite d'information est-elle grave pour un fichier réel (une image, une base de données) ? ______________________
  3. Pourquoi le IV doit-il être différent à chaque chiffrement alors qu'il n'est pas secret ? ______________________

Partie D. Falsifier un fichier chiffré, puis le protéger (50 min)

D1. Un attaquant modifie le fichier chiffré

On modifie un seul bit du fichier rapport.enc (octet 20, dans le premier bloc) :

cd ~/crypto
cp rapport.enc falsifie.enc
python3 - <<'PY'
b = bytearray(open('falsifie.enc', 'rb').read())
b[20] ^= 1
open('falsifie.enc', 'wb').write(b)
PY
openssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 -in falsifie.enc -pass pass:LabPass-2026 | od -c

J'anticipe. OpenSSL va-t-il signaler une erreur ? Le texte déchiffré sera-t-il identique, illisible, ou en partie modifié ? ______________________

Éléments de réponse

Pas d'erreur (le remplissage final reste valide). Le premier bloc est devenu illisible, et le bloc suivant est identique au clair sauf un bit : un caractère est changé de façon prévisible. Le déchiffrement ne détecte rien : CBC ne contrôle pas l'intégrité.

  1. Quel caractère du texte a changé dans le deuxième bloc ? Quel est le danger si le fichier est un virement ou un fichier de configuration ? ______________________

D2. Ajouter un HMAC

On calcule un HMAC du fichier chiffré avec une clé secrète différente de celle du chiffrement :

cd ~/crypto
CLE_HMAC=LabHmac-2026
openssl dgst -sha256 -hmac "$CLE_HMAC" rapport.enc | tee rapport.hmac
openssl dgst -sha256 -hmac "$CLE_HMAC" rapport.enc
openssl dgst -sha256 -hmac "$CLE_HMAC" falsifie.enc
openssl dgst -sha256 rapport.enc
  1. Les HMAC de rapport.enc et de falsifie.enc sont-ils identiques ? Que conclut le destinataire ? ______________________
  2. Un attaquant qui modifie le fichier peut-il recalculer un HMAC valide ? Pourquoi ? ______________________
  3. Pourquoi utilise-t-on deux clés différentes (chiffrement et HMAC) ? ______________________
  4. Quel mode d'AES réalise le chiffrement et l'authentification en une seule opération ? Où est-il utilisé ? ______________________

Synthèse

Complète le tableau :

Besoin Outil du TP Limite constatée
Confidentialité
Intégrité simple
Intégrité + authenticité (clé partagée)

Retour en entreprise

Si ta situation le permet : observe comment ton entreprise traite ce sujet, note en quelques lignes l'écart avec le TP, et, avec l'accord de ton tuteur, réalise une partie sur une situation réelle. Anonymise tes captures. Voir Transfert en entreprise.

Bilan de la séance

Remplis ce bilan seul, honnêtement : il sert à décider ce qu'il faut reprendre. Niveau : Non maîtrisé, Maîtrise partielle, Bonne maîtrise ou Excellente maîtrise (le vocabulaire des grilles nationales d'évaluation) ; Non évalué si tu n'as pas travaillé la compétence aujourd'hui.

Compétence du référentiel Ce que j'ai fait dans cette séance Niveau
B3.2 – Préserver l'identité numérique de l'organisation
B3.4 – Garantir la disponibilité, l'intégrité et la confidentialité des services informatiques et des données de l'organisation face à des cyberattaques
B3.5A – Assurer la cybersécurité d'une infrastructure réseau, d'un système, d'un service

Note

Les codes sont ceux du référentiel (l'arrêté numérote des activités : les codes « B… » sont un usage courant).

Je sais faire, sans aide :

  • Calculer et comparer des empreintes SHA-256 ;
  • Chiffrer et déchiffrer un fichier avec OpenSSL et GnuPG ;
  • Expliquer pourquoi le mode ECB est à proscrire ;
  • Expliquer pourquoi un chiffrement seul ne garantit pas l'intégrité ;
  • Calculer un HMAC et dire ce qu'il apporte.

Ce que je dois reprendre : ______________________

Ma question à poser à l'enseignant : ______________________