En une phrase
Une fonction de hachage, c'est un hachoir à viande numérique qui transforme n'importe quelle donnée que vous lui donnez — un simple caractère, un film 4K, toute la Bibliothèque du Congrès — en une chaîne de charabia courte, unique et de longueur fixe.
Le problème que ça résout
Bien avant d'avoir l'internet à gigabits, on avait un problème simple et ancien : comment savoir si un message ou un objet est authentique et n'a pas été modifié ? Les rois utilisaient des chevalières pour presser un sceau unique dans la cire chaude. Si le sceau était intact, le parchemin était légitime. C'était un acte physique de « vérification d'intégrité ».
Dans le monde numérique, on ne peut pas utiliser de cire. Les premiers informaticiens utilisaient de simples « checksums » (sommes de contrôle) pour vérifier que les données envoyées sur une ligne bruitée n'avaient pas été corrompues par des gremlins électroniques. Un checksum est un simple résumé mathématique des données. Si l'expéditeur et le destinataire calculent tous les deux le même checksum pour un fichier, c'est probablement le même fichier. Mais ces checksums simples étaient faciles à tromper. Un attaquant pouvait modifier les données de manière à produire exactement le même checksum. Le sceau de cire numérique était fragile.
Il nous fallait quelque chose de plus solide. Il nous fallait une empreinte digitale numérique. Une fonction capable de créer un résumé des données qui soit non seulement déterministe (le même fichier produit toujours la même empreinte) mais aussi pratiquement impossible à inverser ou à contrefaire. Si vous modifiez ne serait-ce qu'un seul bit des données d'entrée, l'empreinte résultante doit changer complètement et de manière imprévisible.
C'est le travail d'une fonction de hachage cryptographique. Elle fournit un moyen robuste et sécurisé de vérifier l'intégrité des données, répondant à la question cruciale : « Est-ce que ce truc est exactement le truc que tu m'as envoyé ? »
Comment ça marche sous le capot
À la base, une fonction de hachage est un algorithme mathématique. Pas besoin d'un doctorat en cryptographie pour en utiliser une, mais comprendre ses propriétés clés est ce qui sépare un script kiddie d'un ingénieur chevronné.
### Les propriétés fondamentales
Une bonne fonction de hachage cryptographique, c'est comme un ami de confiance mais profondément bizarre. Elle a quelques traits de personnalité non négociables :
- Déterministe : Ce n'est pas aléatoire. Donnez-lui la même entrée un million de fois, et elle crachera le même hash à chaque fois. Sans exception.
- Résistance à la préimage (à sens unique) : C'est la propriété « on ne peut pas reconstituer l'œuf brouillé ». Étant donné un hash, il est pratiquement impossible de retrouver l'entrée originale qui l'a créé. C'est pourquoi nous pouvons stocker des hashs de mots de passe au lieu des mots de passe eux-mêmes.
- Résistance à la seconde préimage : Étant donné une entrée et son hash, il est pratiquement impossible de trouver une entrée différente qui produit le même hash. Cela empêche un attaquant de remplacer un fichier légitime (comme
install.exe) par un fichier malveillant qui aurait le même hash. - Résistance aux collisions : Il est pratiquement impossible de trouver deux entrées différentes qui produisent le même hash en sortie. C'est la propriété la plus forte. Trouver une collision par hasard dans un bon algorithme comme SHA-256 est moins probable que la Terre soit avalée par un trou noir dans les cinq prochaines secondes.
### L'effet d'avalanche
L'une des caractéristiques les plus incroyablement cool d'une fonction de hachage est l'effet d'avalanche. Un changement minuscule et insignifiant dans l'entrée entraîne un changement massif et imprévisible dans le hash de sortie. Ce n'est pas un changement progressif ; c'est un relancement complet des dés.
Voyons ça en action avec le populaire algorithme SHA-256 :
| Chaîne d'entrée | Hash de sortie SHA-256 |
|---|---|
Hello world |
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 |
hello world |
7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9 |
Hello world. |
f4bb2dd13b43a3509ba3a5a73b40d046f564f1f31d428a113d420f185c7a312f |
Remarquez comment le changement d'une seule majuscule ou l'ajout d'un point crée un hash qui ne ressemble absolument en rien à l'original. Cette propriété est cruciale. Elle signifie qu'un attaquant ne peut pas simplement modifier légèrement un fichier et espérer produire un hash d'apparence similaire.
### De MD5 à SHA : une brève histoire de famille
Toutes les fonctions de hachage ne se valent pas, et comme toute technologie, elles vieillissent.
MD5 (Message Digest 5) : Le vieux cheval de bataille. Pendant longtemps, MD5 était le roi de la montagne. Il produit un hash de 128 bits (32 caractères hexadécimaux). Il est rapide et était considéré comme sécurisé. Était. En 2004, des chercheurs ont démontré une méthode pratique pour trouver des collisions dans MD5. Aujourd'hui, MD5 est considéré comme cryptographiquement cassé et ne devrait jamais être utilisé à des fins de sécurité comme le stockage de mots de passe ou les signatures numériques. Il reste acceptable pour des checksums non liés à la sécurité, comme vérifier si un fichier a été téléchargé correctement.
SHA-1 (Secure Hash Algorithm 1) : Le successeur de MD5, produisant un hash de 160 bits. Il a été le standard pendant des années, utilisé dans tout, des certificats SSL à Git. Mais c'était couru d'avance. En 2017, Google a annoncé la première collision SHA-1 pratique. Comme MD5, il est maintenant considéré comme non sécurisé et déprécié pour un usage cryptographique.
SHA-2 (Secure Hash Algorithm 2) : Ce n'est pas un seul algorithme mais une famille, incluant les très utilisés SHA-256 et SHA-512. Ils produisent des hashs plus longs (256 bits et 512 bits, respectivement) et sont conçus de manière plus robuste. À ce jour, SHA-2 est le standard de l'industrie et est considéré comme sécurisé pour tous les usages courants.
SHA-3 : Une conception entièrement nouvelle, choisie lors d'un concours public organisé par le NIST. Il n'est pas destiné à remplacer SHA-2 (qui est toujours sécurisé), mais à être une alternative robuste et structurellement différente au cas où une faille serait un jour découverte dans la famille SHA-2.
Histoires vécues
### Le cas du téléchargement corrompu
Maria, une ingénieure DevOps, configure un nouveau serveur. Elle doit télécharger l'image de 8 Go de la dernière version Ubuntu LTS. Le site officiel fournit le fichier ISO et, juste à côté, un hash SHA-256. Le téléchargement se termine, mais lorsqu'elle essaie de démarrer depuis l'image, ça échoue avec une erreur cryptique. La frustration monte. Puis, elle se souvient du hash. Elle passe le fichier ISO téléchargé dans un générateur de hash sur sa machine. La sortie ne correspond pas au hash sur le site d'Ubuntu. Le fichier a été corrompu pendant le téléchargement — quelques bits inversés ici et là. Elle supprime le fichier corrompu, le télécharge à nouveau, et cette fois, la première chose qu'elle fait est de vérifier le hash. C'est une correspondance parfaite. L'installation se déroule sans accroc.
Leçon : Le hachage est votre première ligne de défense contre la corruption de données, vous faisant économiser des heures de débogage d'erreurs mystérieuses.
### Le commit fantôme dans la base de code
Une équipe de développement est en panique. Une vulnérabilité de sécurité critique a été découverte dans leur application en production. En examinant le code, une vérification de permission semble avoir été subtilement supprimée d'un fichier clé. Mais qui a fait ça, et quand ? Le chef d'équipe, David, se tourne vers l'historique Git. Git est, sous le capot, un gigantesque système de hashs. Chaque fichier, chaque structure de répertoire, et chaque commit est identifié par un hash SHA-1. David écrit un petit script pour recalculer le hash de ce fichier spécifique à chaque commit de l'historique du dépôt. Il trouve le commit exact où le hash du fichier a soudainement changé pour la version vulnérable. Le message de commit semblait innocent, mais le hash racontait la véritable histoire. Ils avaient leur coupable et leur chronologie.
Leçon : Le hachage fournit une piste d'audit immuable et vérifiable, constituant la pierre angulaire des systèmes de gestion de version modernes.
### Le mot de passe qui n'a pas été volé
La base de données des utilisateurs d'une startup est piratée. Les attaquants repartent avec toute la table users. Le PDG est horrifié, s'imaginant les gros titres sur des millions de mots de passe divulgués. Mais l'ingénieure en chef de la sécurité, Aisha, est calme. « Ils n'ont pas eu les mots de passe », dit-elle. « Ils ont eu les hashs. » Lorsque les utilisateurs s'inscrivaient, le système ne stockait pas leur mot de passe m0tdep@sse123. À la place, il passait le mot de passe dans un algorithme de hachage sécurisé (avec un sel, une étape supplémentaire cruciale) pour produire quelque chose comme ef92.... Quand l'utilisateur se connecte, le système hashe le mot de passe qu'il vient de taper et le compare au hash stocké. Grâce à la résistance à la préimage, les attaquants avec le dump de la base de données ne peuvent pas transformer ef92... en m0tdep@sse123. Les comptes des utilisateurs sont en sécurité.
Leçon : Ne stockez jamais, au grand jamais, les mots de passe en clair. Stockez des hashs sécurisés et salés de ceux-ci.
Erreurs et pièges courants
- Utiliser des algorithmes cassés pour la sécurité. Ce n'est pas parce qu'un outil génère des hashs MD5 ou SHA-1 que vous devriez les utiliser pour de nouveaux projets critiques en matière de sécurité. Ils sont bons pour les checksums, mais pour les mots de passe ou les signatures, tenez-vous-en à SHA-256 ou mieux.
- Confondre le hachage avec le chiffrement. Ce sont des outils différents pour des tâches différentes. Le hachage est une rue à sens unique pour vérifier l'intégrité. Le chiffrement est une rue à double sens pour protéger la confidentialité. On « déchiffre » un message chiffré, mais on ne peut pas « dé-hacher » un hash.
- Oublier d'utiliser un sel. Hacher un mot de passe directement ne suffit pas. Si deux utilisateurs ont le même mot de passe, ils auront le même hash. Les attaquants utilisent des « tables arc-en-ciel » pré-calculées pour rechercher les hashs de mots de passe courants. Un « sel » est une donnée aléatoire et unique ajoutée à chaque mot de passe avant le hachage, rendant ces attaques inutiles.
- Faire confiance à un hash provenant d'une source non fiable. Un hash prouve seulement que les données n'ont pas changé depuis qu'elles ont été hachées. Si vous téléchargez un fichier malveillant depuis
site-malveillant.com, et qu'ils fournissent également un hash pour celui-ci, le hash correspondra parfaitement à leur fichier malveillant. Le hash doit être obtenu d'une source distincte et fiable (comme le site web officiel du développeur via HTTPS).
Pourquoi ça devrait vous intéresser
En tant que développeur, le hachage est un concept fondamental que vous rencontrerez constamment. Vous devriez penser au hachage chaque fois que vous avez besoin de :
- Vérifier l'intégrité des fichiers : Lorsque vous fournissez ou consommez des téléchargements.
- Stocker les informations d'identification des utilisateurs : Le hachage est le fondement de la sécurité moderne des mots de passe.
- Travailler avec la gestion de version : Des systèmes comme Git sont construits sur un socle de hashs.
- Construire des API : Les en-têtes HTTP
ETagutilisent souvent un hash du contenu de la ressource pour permettre une mise en cache efficace. - Détecter les changements : Besoin de savoir si une grande quantité de données a changé sans en stocker deux copies ? Stockez les données et leur hash. Pour vérifier les changements, il suffit de re-hacher et de comparer.
- Comprendre la blockchain : Les cryptomonnaies et les blockchains utilisent des hashs pour enchaîner les blocs et former un registre immuable.
Le hachage n'est pas seulement un outil de crypto de niche ; c'est un élément de base polyvalent pour créer des logiciels fiables, sécurisés et efficaces.
Pour aller plus loin
- Wikipedia: Cryptographic hash function - La vue d'ensemble de haut niveau et définitive de ce que sont les fonctions de hachage et leurs propriétés.
- FIPS PUB 180-4: Secure Hash Standard (SHS) - La publication officielle du NIST qui spécifie la famille d'algorithmes SHA-1, SHA-2. C'est dense, mais c'est la source de vérité.
- The SHAppening: freestart collisions for SHA-1 - Le site de l'équipe de recherche de Google et du CWI qui a annoncé la première collision publique de SHA-1, avec des exemples à l'appui. Une excellente lecture sur la raison pour laquelle les anciens algorithmes meurent.
- Troy Hunt: Everything you ever wanted to know about building a secure password reset feature - Bien qu'il traite de la réinitialisation de mot de passe, cet article d'un expert en sécurité de premier plan explore en profondeur les aspects pratiques du pourquoi et du comment hacher correctement les mots de passe.
- MD5 Considered Harmful Today - Un compte rendu détaillé de l'un des projets de recherche qui a démontré une attaque par collision pratique contre MD5, en créant une Autorité de Certification (CA) frauduleuse.