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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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é.
Worked example
<?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.
Practical exercise
Modifiez un octet d’un fichier puis comparez son empreinte. Remplacez ensuite simultanément fichier et référence sur un stockage fictif.
View a suggested solution
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é.
Verification checklist
- Propriété attendue explicite.
- Référence protégée.
- Octets et représentation distingués.
Knowledge check
Related lesson: 01. Empreintes et propriétés recherchées ↗Module validation
101 questions, local practice target of 75%. Suggested duration of 150 minutes, with no enforced deadline. Questions and choices are shuffled; corrections appear after submission. The quick lesson check and the final course exam remain separate exercises.
Start or resume the 101 questions →This records your own progress and does not certify mastery. Complete the exercise before moving on.
