Aller au contenu

Hachage

Cryptographie

Calcul qui transforme une donnée de taille quelconque en une empreinte de longueur fixe, sans clé, de façon qu'il soit pratiquement impossible de retrouver l'entrée ou d'en trouver une autre produisant la même empreinte. Contrairement au chiffrement, l'opération est à sens unique.

Schéma de séquence entre quatre acteurs : Utilisateur, Serveur, Base et Fonction de hachage. 1, l'utilisateur envoie au serveur le mot de passe saisi. 2, le serveur demande à la base le sel et l'empreinte du compte. 3, la base lui renvoie le sel et l'empreinte stockée du compte. 4, le serveur transmet à la fonction de hachage le mot de passe saisi et le sel. 5, la fonction lui renvoie l'empreinte calculée. 6, si l'empreinte est identique à celle stockée, le serveur accorde l'accès à l'utilisateur. Si elle est différente, il le refuse.

Sens unique, taille fixe : Une fonction donnée rend toujours une empreinte de la même longueur, 256 bits pour SHA-256, qu'on lui soumette un mot de passe, un contrat ou une image disque entière. Modifier un seul bit de l'entrée bouleverse tout le résultat, et aucune clé ne permet de revenir en arrière : il n'existe pas d'opération inverse, seulement l'essai d'entrées jusqu'à retomber sur l'empreinte.

Trois résistances attendues : Une fonction de hachage cryptographique doit résister à la préimage (retrouver l'entrée), à la seconde préimage (trouver une autre entrée pour une empreinte donnée) et aux collisions (trouver deux entrées quelconques de même empreinte). MD5 a perdu la troisième en 2004, SHA-1 en 2017 avec la collision SHAttered : ni l'un ni l'autre n'a plus sa place dans une signature, ce qui ne les empêche pas de survivre dans des scripts que plus personne n'ose ouvrir.

Mots de passe : lent exprès : La rapidité est une qualité partout, sauf ici : plus la fonction va vite, plus l'attaquant essaie de mots de passe par seconde. Pour en stocker, on emploie donc Argon2id, scrypt ou bcrypt, lents exprès, au coût réglable, avec un sel unique par compte. Un SHA-256 nu, lui, a toutes les apparences du sérieux jusqu'au jour où la base fuit et où « azerty » ressort en quelques millisecondes.

Intégrité sans authenticité : Une empreinte prouve qu'un fichier n'a pas changé, pas qui l'a écrit : celui qui modifie le fichier recalcule l'empreinte dans la foulée et la publie à côté avec le même aplomb. Pour authentifier, il faut une clé, donc un HMAC ou une signature.

Ce qui arrive si on s'en passe

Sans hachage, il n'existe aucune empreinte de référence pour vérifier qu'un fichier, un paquet ou un message n'a pas été modifié : une altération en transit ou sur disque, accidentelle ou volontaire, passe inaperçue, faute de valeur à comparer. Les signatures numériques perdent leur base, puisqu'elles portent sur l'empreinte et non sur la donnée entière. Les mots de passe conservés en clair, ou chiffrés avec une clé rangée à côté, se lisent directement dès que la base est copiée, là où une empreinte ne permettrait pas de remonter à l'original. Les journaux chaînés par empreinte ne détectent plus la suppression ni la réécriture d'une entrée, et la traçabilité ne vaut plus rien. Avec un hachage mal choisi, le risque se déplace sans disparaître : rapide et sans sel pour des mots de passe, dépassé comme MD5 ou SHA-1 pour une signature, il produit une vérification qui rassure sans rien garantir.

Explication de la marmotte

Imagine un hachoir à viande. Tu mets un morceau de viande, il en sort de la viande hachée. Impossible de reconstituer le morceau d'origine à partir du haché. Le hachage fait pareil avec des informations : il les broie pour fabriquer une sorte d'empreinte digitale, toujours de la même taille. Si tu mets exactement la même chose, tu obtiens toujours la même empreinte ; si tu changes une seule lettre, l'empreinte devient complètement différente. C'est pour ça qu'un site sérieux ne garde pas ton mot de passe : il garde seulement son empreinte. Quand tu te connectes, il hache ce que tu tapes et compare les deux empreintes.

Où ce terme est utilisé

← Tout le glossaire