Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 513 minIntermédiaire

Fonction de hachage : SHA-256, empreinte et intégrité

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • citer les propriétés d'une fonction de hachage cryptographique ;
  • reconnaître MD5, SHA-1, SHA-256 et SHA-512 à la longueur de l'empreinte ;
  • vérifier l'intégrité d'un fichier sous Linux et Windows ;
  • expliquer ce qu'un hachage seul ne garantit pas.

5 exercices corrigés

Une fonction de hachage cryptographique transforme une donnée de n'importe quelle taille (un mot, un fichier de 4 Go) en une empreinte de taille fixe, par exemple 256 bits pour SHA-256, de telle sorte qu'on ne puisse ni retrouver la donnée à partir de l'empreinte, ni fabriquer deux données qui ont la même empreinte. Elle sert à vérifier l'intégrité d'un fichier, à signer, à indexer, et, dans une version lente et salée, à stocker les mots de passe. Ce chapitre présente ses propriétés, les algorithmes à utiliser et à bannir, et la vérification d'un fichier sous Linux et Windows.

Les propriétés d'une fonction de hachage cryptographique

L'empreinte (on dit aussi condensé, hash ou digest) est comme l'empreinte digitale d'une donnée : courte, propre à cette donnée, et impossible à utiliser pour reconstituer la personne. Voici les empreintes SHA-256 de trois mots presque identiques :

text
Bonjour   9172e8eec99f144f72eca9a568759580edadb2cfd154857f07e657569493bc44
bonjour   2cb4b1431b84ec15d35ed83bb927e27e8967d75f4bcd9cc4b25c8d879ae23e18
Bonjour!  083de31ac1fa14f95671a6e39cc6c72d8fed1590b2a51759bc3f54a76b4169c4

Une seule lettre change, et l'empreinte n'a plus rien à voir. Une bonne fonction de hachage cryptographique a ces propriétés :

PropriétéCe qu'elle veut direPourquoi c'est utile
DéterministeLa même entrée donne toujours la même empreinteOn peut recalculer et comparer
Taille fixeUn mot ou un film donnent une empreinte de même longueur (256 bits pour SHA-256)L'empreinte est facile à stocker, afficher, comparer
Rapide à calculerDes centaines de mégaoctets par secondeVérifier un gros fichier prend quelques secondes (mais c'est un défaut pour les mots de passe : chapitre 6)
Résistance à la préimage (sens unique)À partir d'une empreinte, impossible de retrouver une entrée qui la produitL'empreinte ne révèle pas la donnée
Résistance à la seconde préimageÀ partir d'un fichier donné, impossible d'en fabriquer un autre de même empreinteUn attaquant ne peut pas remplacer un fichier vérifié
Résistance aux collisionsImpossible de trouver deux entrées quelconques de même empreinteUne signature sur l'empreinte vaut pour un seul document
Effet avalancheChanger un bit de l'entrée change environ la moitié des bits de l'empreinteLa moindre modification se voit

Des collisions existent forcément : il y a une infinité d'entrées possibles et « seulement » 2²⁵⁶ empreintes. La propriété exige seulement qu'on ne sache pas en trouver.

MD5, SHA-1, SHA-2, SHA-3 : lesquelles utiliser en 2026

AlgorithmeAnnéeEmpreinteEn hexadécimalStatut en 2026
MD51991128 bits32 caractèresCassé : collisions trouvées en 2004, exploitées en 2012 par le logiciel espion Flame pour forger un faux certificat Microsoft
SHA-11995160 bits40 caractèresCassé : première collision publique en 2017 (SHAttered, Google et CWI), collisions à préfixe choisi en 2020 ; non conforme selon l'ANSSI
SHA-256 (famille SHA-2)2001256 bits64 caractèresRecommandé ; c'est le standard actuel
SHA-384, SHA-512 (SHA-2)2001384, 512 bits96, 128 caractèresRecommandés ; SHA-384 et plus pour une sécurité post-quantique
SHA3-256, SHA3-512 (SHA-3)2015256, 512 bits64, 128 caractèresRecommandés ; conçus sur un principe différent (Keccak), en réserve si SHA-2 faiblissait

Le guide de l'ANSSI de 2026 pose la règle : l'empreinte d'une fonction de hachage cryptographique fait au moins 256 bits, et il recommande 384 bits quand une sécurité post-quantique est visée. SHA2-256 et SHA3-256 sont conformes, SHA-1 ne l'est pas.

MD5 et SHA-1 survivent dans des usages non sécuritaires (détecter une corruption accidentelle, dédoublonner des fichiers). Git identifie encore ses objets en SHA-1 par défaut, avec une détection des collisions connues, et sait créer des dépôts en SHA-256 (git init --object-format=sha256). Pour tout usage où un attaquant pourrait chercher une collision (signature, certificat, vérification d'un téléchargement), seuls SHA-2 et SHA-3 conviennent.

Le paradoxe des anniversaires : pourquoi 256 bits

Dans une classe de 23 élèves, la probabilité que deux d'entre eux soient nés le même jour dépasse 50 % (50,7 % exactement). C'est contre-intuitif, car il y a 365 jours, mais on ne cherche pas quelqu'un né un jour précis : n'importe quelle paire convient, et 23 élèves forment 253 paires.

Pour les empreintes, c'est pareil : avec une empreinte de n bits, il faut environ 2ⁿ essais pour trouver une entrée qui donne une empreinte précise (préimage), mais seulement environ 2ⁿ/² essais pour trouver deux entrées quelconques de même empreinte (collision). Une empreinte de 128 bits (MD5) n'offre donc que 64 bits de sécurité contre les collisions, à portée de calcul. Une empreinte de 256 bits en offre 128 : c'est l'équivalent d'une clé AES-128, et c'est ce que vise la règle de l'ANSSI.

Vérifier l'intégrité d'un fichier

L'usage le plus courant pour un technicien : vérifier qu'un fichier téléchargé, une image ISO ou une sauvegarde est intact. On calcule l'empreinte et on la compare à la valeur de référence.

Sous Linux et macOS :

bash
sha256sum debian-13-amd64-netinst.iso        # Linux
shasum -a 256 debian-13-amd64-netinst.iso    # macOS
openssl dgst -sha256 compte-rendu.pdf        # partout où OpenSSL est installé
# SHA2-256(compte-rendu.pdf)= 06db7183311ae2e026a608da5b25c184b66c832d37c2eab84d9f25267c3c4fac

# Vérifier d'un coup tous les fichiers listés dans un fichier d'empreintes
sha256sum -c SHA256SUMS --ignore-missing

Sous Windows (PowerShell) :

powershell
Get-FileHash .\debian-13-amd64-netinst.iso -Algorithm SHA256
# Ou, dans l'invite de commandes classique :
certutil -hashfile debian-13-amd64-netinst.iso SHA256

Ce que le hachage ne garantit pas

Une empreinte prouve que deux données sont identiques ; elle ne prouve pas qui a produit la donnée. Si l'empreinte voyage ou est stockée avec le fichier, un attaquant qui modifie le fichier recalcule l'empreinte et la remplace. Pour garantir l'intégrité face à un attaquant, il faut :

  • soit conserver l'empreinte de référence ailleurs, dans un endroit que l'attaquant ne peut pas modifier (un coffre, un support hors ligne, un registre en écriture seule) ;
  • soit lier l'empreinte à un secret : un HMAC avec une clé partagée, ou une signature avec une clé privée (chapitre 7).

Et le hachage ne protège pas la confidentialité d'une donnée prévisible : l'empreinte SHA-256 d'un numéro de téléphone se retrouve en calculant celles du milliard de numéros possibles, quelques secondes de calcul. Hacher un identifiant n'est donc pas une anonymisation, tout au plus une pseudonymisation faible.

Les autres usages du hachage

UsageComment le hachage sert
Signature numériqueOn signe l'empreinte du document, pas le document entier (chapitre 7)
Preuve numériqueAvant d'analyser un disque saisi, on en fait une copie bit à bit et on calcule l'empreinte des deux : elle prouve plus tard que la copie analysée est fidèle
GitChaque commit est identifié par l'empreinte de son contenu et de son parent : modifier l'histoire change tous les identifiants suivants
Chaînes de blocsChaque bloc contient l'empreinte du précédent, ce qui rend toute modification ancienne détectable
Antivirus, renseignement sur les menacesLes fichiers malveillants connus sont repérés par leur empreinte SHA-256 (un indicateur de compromission)
Mots de passe compromisLe service Have I Been Pwned permet de vérifier si un mot de passe figure dans une fuite en n'envoyant que les 5 premiers caractères de son empreinte SHA-1
Tables de hachageLes dictionnaires des langages de programmation rangent une clé dans une case calculée par une fonction de hachage non cryptographique, très rapide (et le modulo du cours d'arithmétique)

À l'E7 : comment la notion est demandée

  • Intégrité d'une archive. Le sujet SLAM 2024 (cas Gsic) décrit des journaux archivés chaque mois, « compression avec chiffrement, mais sans vérification des sommes de contrôles (empreinte numérique) », et demande si la confidentialité et l'intégrité sont garanties. Réponse attendue : la confidentialité oui, grâce au chiffrement ; l'intégrité non, faute d'empreinte (ou de signature) calculée à l'archivage et vérifiée à la lecture. Proposition : calculer une empreinte SHA-256 de chaque archive, la stocker à part ou la signer, et la vérifier.
  • Identifier un algorithme faible. Le sujet SLAM 2026 (cas NDV) fait « identifier l'algorithme de hachage utilisé dans le processus de création des comptes clients et indiquer pourquoi il n'est pas efficace » : le code appelle SHA1(). Réponse : SHA-1 est cassé (collisions) et surtout beaucoup trop rapide pour des mots de passe ; c'est une défaillance cryptographique (A02 du Top 10 OWASP 2021, A04 dans l'édition 2025). La suite est au chapitre 6.

En SISR, le hachage sert à contrôler les images d'installation, les sauvegardes et les preuves après un incident. En SLAM, à vérifier l'intégrité d'un fichier déposé, d'une mise à jour, d'une dépendance (le package-lock.json de npm contient l'empreinte SHA-512 de chaque paquet dans son champ integrity).

Exercices

Exercice 1 sur 5 Reconnaître l'algorithme Réussi À revoir

Quel algorithme a probablement produit chaque empreinte (en hexadécimal) ?

  1. ebc58ab2cb4848d04ec23d83f7ddf985 (32 caractères)
  2. f30ecbf5b1cb85c631fdec0b39678550973cfcbc (40 caractères)
  3. une empreinte de 64 caractères
  4. une empreinte de 128 caractères
Voir la réponseMasquer la réponse de l'exercice 1
  1. 32 caractères hexadécimaux = 128 bits : MD5 (c'est l'empreinte MD5 de « Bonjour »).
  2. 40 caractères = 160 bits : SHA-1 (l'empreinte SHA-1 de « Bonjour »).
  3. 64 caractères = 256 bits : SHA-256 (ou SHA3-256).
  4. 128 caractères = 512 bits : SHA-512 (ou SHA3-512).

Chaque caractère hexadécimal code 4 bits : le nombre de bits est la longueur multipliée par 4.

Tu avais trouvé ?

Exercice 2 sur 5 Quelle propriété ? Réussi À revoir

Nomme la propriété de la fonction de hachage sur laquelle repose chaque situation.

  1. On stocke l'empreinte d'un code d'accès ; un voleur de la base ne doit pas pouvoir retrouver le code à partir de l'empreinte.
  2. Un éditeur signe l'empreinte de son installeur ; un attaquant ne doit pas pouvoir fabriquer un logiciel malveillant qui ait la même empreinte que cet installeur précis.
  3. On compare l'empreinte d'une sauvegarde aujourd'hui à celle de la semaine dernière, et une seule différence de bit doit se voir.
Voir la réponseMasquer la réponse de l'exercice 2
  1. La résistance à la préimage (sens unique). Attention : si le code est court (4 chiffres), elle ne suffit pas, l'attaquant hache les 10 000 codes possibles.
  2. La résistance à la seconde préimage.
  3. L'effet avalanche, avec le déterminisme : sans modification, l'empreinte est identique ; avec un bit modifié, elle change complètement.

Tu avais trouvé ?

Exercice 3 sur 5 L'archive des journaux Réussi À revoir

Chaque mois, un service compresse et chiffre ses journaux de connexion en AES-256, puis les copie sur un stockage externe. Rien d'autre n'est calculé.

  1. La confidentialité des journaux est-elle garantie ? Leur intégrité ?
  2. Propose une mesure pour l'intégrité, et dis où ranger ce qu'elle produit.
Voir la réponseMasquer la réponse de l'exercice 3
  1. La confidentialité est garantie tant que la clé est protégée : sans elle, l'archive est illisible. L'intégrité ne l'est pas : rien ne permet de détecter qu'une archive a été altérée ou remplacée. (Un mode authentifié comme GCM détecterait une modification du chiffré, mais pas le remplacement complet d'une archive par une autre chiffrée avec la même clé.)
  2. Calculer l'empreinte SHA-256 de chaque archive à sa création, l'enregistrer dans un registre conservé ailleurs (un autre serveur, un support en écriture seule) ou la signer avec la clé privée du service, puis vérifier l'empreinte avant toute restauration ou exploitation. Pour des journaux qui servent de preuve, la signature avec horodatage est la meilleure solution.

Tu avais trouvé ?

Exercice 4 sur 5 Combien d'essais pour une collision ? Réussi À revoir

Un développeur raccourcit les empreintes SHA-256 à leurs 8 premiers caractères hexadécimaux (32 bits) pour obtenir des identifiants de documents plus courts.

  1. Combien d'essais faut-il environ pour trouver une préimage d'un identifiant donné ? Pour une collision quelconque ?
  2. Est-ce acceptable pour des liens de partage de comptes rendus ?
Voir la réponseMasquer la réponse de l'exercice 4
  1. Préimage : environ 2³² ≈ 4,3 milliards d'essais, quelques secondes sur une carte graphique. Collision : environ 2¹⁶ = 65 536 essais, une fraction de seconde (paradoxe des anniversaires).
  2. Non. Un attaquant pourrait deviner des identifiants valides et accéder aux comptes rendus d'autres patients. Un lien de partage doit contenir un jeton aléatoire d'au moins 128 bits (random_bytes(16), soit 32 caractères hexadécimaux), à durée de vie limitée, vérifié avec les droits de l'utilisateur.

Tu avais trouvé ?

Exercice 5 sur 5 Vérifier une image ISO Réussi À revoir

Tu télécharges l'image d'installation de Debian sur un poste Windows, ainsi que le fichier SHA256SUMS qui l'accompagne sur le même site miroir.

  1. Quelle commande lances-tu pour calculer l'empreinte ?
  2. L'empreinte correspond. Es-tu certain que l'image est authentique ?
  3. Que faut-il faire de plus ?
Voir la réponseMasquer la réponse de l'exercice 5
  1. Get-FileHash .\debian-13-amd64-netinst.iso -Algorithm SHA256 (ou certutil -hashfile … SHA256), puis comparer à la ligne correspondante de SHA256SUMS.
  2. Non : tu sais seulement que le téléchargement n'a pas été corrompu. Si le miroir a été piraté, l'attaquant a pu remplacer à la fois l'image et le fichier d'empreintes.
  3. Vérifier la signature du fichier SHA256SUMS (fichier SHA256SUMS.sign) avec la clé publique officielle du projet Debian, obtenue par un canal de confiance. Si la signature est valide, les empreintes sont authentiques, et l'image l'est aussi.

Tu avais trouvé ?

Chapitre terminé !

Fais les 5 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Stocker un mot de passe : sel, bcrypt et Argon2Revoir le sommaire du cours