Comprendre le mécanisme
Une fonction de hash calcule une empreinte déterministe d’octets. Elle ne chiffre pas une donnée et ne fournit pas une clé de déchiffrement. Préimage, seconde préimage et collision décrivent des objectifs adverses différents. Une empreinte publique peut aider à comparer deux fichiers, mais un adversaire capable de remplacer fichier et empreinte peut recalculer les deux. La provenance de la référence est donc une partie du problème.
Raisonner et vérifier
Choisissez l’outil selon la menace : hash moderne pour comparaison d’octets, MAC avec clé pour authenticité partagée, signature pour une distribution asymétrique, fonction de mot de passe pour vérification d’un secret humain. N’utilisez pas un nom d’algorithme moderne comme justification universelle. Définissez encodage, normalisation et limites avant de comparer des valeurs afin d’éviter de hasher des représentations différentes sans le vouloir.
Déterminisme
Un hash calcule une empreinte déterministe. Une empreinte n’est pas une donnée chiffrée réversible par clé. Le même fichier, octet pour octet, doit fournir la même sortie avec le même algorithme. Une fin de ligne ou un encodage différent change l’entrée même si le texte semble identique à l’écran.
Erreur fréquente à comprendre
Un hash utilise toujours une clé de déchiffrement.
Une empreinte n’est pas une donnée chiffrée réversible par clé.
Collision et préimage
Une collision relie deux entrées de même empreinte. Collision et préimage sont des objectifs différents. Une collision cherche deux messages distincts partageant une sortie ; une préimage cherche un message pour une sortie donnée. Une démonstration de la première propriété ne fournit pas automatiquement la seconde attaque.
Erreur fréquente à comprendre
Une collision signifie retrouver tout original depuis son hash.
Collision et préimage sont des objectifs différents.
Référence authentifiée
La provenance d’une empreinte de référence compte. Il peut recalculer une référence non protégée. Si le fichier et son checksum sont téléchargés depuis une source compromise unique, les deux peuvent être remplacés. Établissez la référence par un canal ou une signature dont la confiance est indépendante.
Erreur fréquente à comprendre
Un adversaire modifiant fichier et empreinte est forcément détecté.
Il peut recalculer une référence non protégée.
Empreinte et auteur
Un hash public ne prouve pas l’auteur. L’encodage ne crée pas de preuve d’origine. N’importe qui peut calculer SHA-256 sur un document. Pour attribuer sa provenance, vérifiez une signature et la confiance dans sa clé, ou une autre preuve adaptée au modèle de distribution.
Erreur fréquente à comprendre
Une sortie hexadécimale identifie cryptographiquement son producteur.
L’encodage ne crée pas de preuve d’origine.
Octets couverts
Les octets exacts influencent l’empreinte. La représentation doit être définie et comparée. Définissez si l’empreinte couvre le corps brut ou une représentation canonique. Convertir du JSON en objet puis le sérialiser peut modifier espaces et ordre des propriétés sans conserver les octets d’origine.
Erreur fréquente à comprendre
Des espaces différents donnent nécessairement le même hash.
La représentation doit être définie et comparée.
Authentification partagée
Un MAC ajoute une clé à une construction d’authenticité. Le secret partagé change le modèle de confiance. Un MAC ajoute une clé secrète connue des participants. Il permet de vérifier une authenticité dans ce groupe, mais chaque détenteur de la clé conserve la capacité de produire une preuve valide.
Erreur fréquente à comprendre
Un hash sans clé fournit les mêmes capacités qu’un MAC.
Le secret partagé change le modèle de confiance.
Signature asymétrique
Une signature sépare des capacités de clé publique et privée. Le calcul public d’empreinte n’est pas une signature. La clé privée signe et la clé publique permet la vérification selon l’algorithme. Distribuez cette clé publique par une référence fiable ; remplacer document et clé ensemble peut tromper une vérification isolée.
Erreur fréquente à comprendre
Un hash SHA-256 seul fournit une signature asymétrique.
Le calcul public d’empreinte n’est pas une signature.
Secrets humains
Un mot de passe humain demande une fonction dédiée. Un hash rapide ne règle pas le coût des essais hors ligne. Les mots de passe ont souvent une faible entropie. Utilisez une fonction adaptative dédiée qui ralentit les essais et gère le sel, plutôt qu’un hash rapide prévu pour d’autres usages.
Erreur fréquente à comprendre
SHA-256 direct est adaptatif par définition.
Un hash rapide ne règle pas le coût des essais hors ligne.
Représentation
L’encodage ne crée pas d’entropie. La même information reçoit une autre représentation. Hexadécimal et base64 changent la représentation des mêmes octets. Une sortie plus longue n’implique pas davantage de hasard ; mesurez l’entropie à partir de la génération du secret initial.
Erreur fréquente à comprendre
Passer une empreinte en base64 augmente son aléatoire.
La même information reçoit une autre représentation.
Choisir une propriété
Le choix de primitive dépend de la menace. Authenticité, confidentialité et vérification de mot de passe diffèrent. Pour détection d’erreur, provenance, confidentialité et stockage de mot de passe, les besoins diffèrent. Écrivez l’attaquant et la propriété attendue avant de sélectionner une primitive ou une API.
Erreur fréquente à comprendre
Tout besoin cryptographique se résout par le même hash.
Authenticité, confidentialité et vérification de mot de passe diffèrent.
Atelier guidé : lire, expliquer et vérifier le code
<?php
declare(strict_types=1);
$hash = hash('sha256', 'lab');
echo strlen($hash); SHA-256 fournit ici 32 octets affichés en hexadécimal, donc 64 caractères. Comparez sortie brute et sortie encodée pour distinguer taille mathématique et représentation. Modifiez ensuite un octet du message. Ce laboratoire vérifie le déterminisme et la sensibilité aux entrées, sans prouver l’auteur du message.
SHA-256 donne 32 octets, représentés ici par 64 caractères hexadécimaux. 32 serait la taille binaire, pas cette représentation par défaut. 256 est un nombre de bits, pas la longueur textuelle. Le hash a une longueur fixée par l’algorithme.
Travail pratique : Modifiez un octet d’un fichier puis comparez son empreinte. Remplacez ensuite simultanément fichier et référence sur un stockage fictif.
Critères de correction : La première comparaison détecte le changement par rapport à une référence conservée. La seconde démontre qu’une référence modifiable par le même adversaire ne fournit pas d’authenticité.
Exemple commenté
<?php
declare(strict_types=1);
$bytes = 'document de laboratoire';
$fingerprint = hash('sha256', $bytes);
echo $fingerprint, PHP_EOL;L’empreinte obtenue ne prouve pas qui a produit le document.
Exercice de mise en pratique
Modifiez un octet d’un fichier puis comparez son empreinte. Remplacez ensuite simultanément fichier et référence sur un stockage fictif.
Voir une proposition de correction
La première comparaison détecte le changement par rapport à une référence conservée. La seconde démontre qu’une référence modifiable par le même adversaire ne fournit pas d’authenticité.
Points de vérification
- Propriété attendue explicite.
- Référence protégée.
- Octets et représentation distingués.
Contrôle de connaissances
Cours associé : 01. Empreintes et propriétés recherchées ↗Validation du module
101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.
Commencer ou reprendre les 101 questions →Cette marque suit votre propre avancement ; elle ne certifie pas la maîtrise du sujet. Effectuez l’exercice avant de passer à la suite.
