Une empreinte numérique pour chaque donnée

Une fonction de hachage cryptographique transforme une donnée de taille quelconque en une chaîne de caractères de longueur fixe, appelée empreinte ou condensé. Cette empreinte agit comme une signature numérique de l’information : un identifiant compact qui change radicalement à la moindre modification du contenu d’origine. Les fonctions de hachage sont l’un des outils les plus discrets et les plus omniprésents de la sécurité informatique. Elles interviennent dès qu’il s’agit de vérifier qu’une donnée est authentique et intacte.

Cet article présente les propriétés fondamentales qui définissent une bonne fonction de hachage cryptographique, ce qui la distingue d’une fonction de hachage ordinaire, et les grands domaines où elle s’avère indispensable.

Les propriétés fondamentales

Toutes les fonctions de hachage ne se valent pas. Pour qu’une fonction mérite la qualification de cryptographique, elle doit réunir plusieurs propriétés strictes. Chacune répond à un besoin de sécurité précis.

Déterminisme

Une fonction de hachage est déterministe : une entrée donnée produit toujours la même empreinte. Si vous hachez le même fichier deux fois, sur deux ordinateurs différents et à des années d’intervalle, vous obtenez le même résultat. Sans cette propriété, il serait impossible de comparer une empreinte recalculée à une empreinte de référence.

Rapidité de calcul

Le calcul d’une empreinte doit être rapide. Hacher un fichier, même volumineux, ne prend qu’une fraction de seconde sur un ordinateur moderne. Cette efficacité rend le hachage utilisable à grande échelle, par exemple pour vérifier l’intégrité de milliers de fichiers ou pour soutenir des protocoles réseau qui hachent en continu.

Résistance à la préimage

À partir d’une empreinte seule, il doit être pratiquement impossible de retrouver l’entrée qui l’a produite. On appelle cela la résistance à la préimage. La fonction se calcule facilement dans un sens, mais l’inverser exigerait d’explorer un espace de possibilités si vaste qu’aucune machine ne peut le parcourir en un temps utile. C’est cette propriété qui permet, par exemple, de stocker l’empreinte d’un mot de passe plutôt que le mot de passe lui-même.

Résistance à la seconde préimage

Étant donné une entrée précise et son empreinte, il doit être infaisable de trouver une seconde entrée différente produisant la même empreinte. Cette propriété, appelée résistance à la seconde préimage, protège un document spécifique : personne ne doit pouvoir fabriquer un autre fichier qui se ferait passer pour lui aux yeux d’un système de vérification.

Résistance aux collisions

Il doit être infaisable de trouver deux entrées quelconques, choisies librement, qui partagent la même empreinte. C’est la résistance aux collisions. Elle est plus exigeante que la résistance à la seconde préimage, car l’attaquant n’a pas de cible imposée : il lui suffit de trouver n’importe quelle paire en collision. C’est précisément cette propriété qui a été mise en défaut pour SHA-1 en 2017, lorsque deux fichiers PDF distincts ont été forgés avec la même empreinte SHA-1.

Effet d’avalanche

Une bonne fonction de hachage présente un effet d’avalanche : modifier un seul bit de l’entrée bouleverse entièrement l’empreinte. Le résultat n’a alors plus aucune ressemblance avec l’empreinte initiale, et rien ne permet de deviner l’ampleur ou la nature de la modification à partir du changement observé. Cette sensibilité extrême est ce qui rend le hachage si efficace pour détecter la moindre altération.

La différence avec les fonctions de hachage non cryptographiques

Le mot hachage recouvre deux familles bien distinctes qu’il ne faut pas confondre.

Les fonctions de hachage non cryptographiques, comme celles employées dans les tables de hachage des langages de programmation, ont pour seul objectif de répartir efficacement des données et d’accélérer les recherches. Elles sont conçues pour être rapides et pour distribuer correctement les valeurs, mais pas pour résister à un adversaire. Trouver deux entrées partageant la même valeur y est souvent facile, et ce n’est pas un problème, car la sécurité n’est pas leur but. Ces fonctions optimisent la performance, pas la résistance aux attaques.

Les fonctions de hachage cryptographiques, à l’inverse, sont conçues pour résister à un adversaire actif qui cherche délibérément à provoquer des collisions ou à inverser le calcul. Elles offrent les garanties décrites plus haut, au prix d’une conception plus exigeante. Utiliser une fonction non cryptographique là où la sécurité est en jeu serait une erreur grave : la rapidité ne remplace jamais la résistance aux attaques.

La règle est simple : dès qu’un enjeu de sécurité ou d’intégrité existe, seule une fonction cryptographique convient.

Les grands cas d’usage

Les fonctions de hachage cryptographiques soutiennent un éventail d’applications dans lesquelles la confiance numérique est en jeu.

Stockage des mots de passe avec sel

Un système bien conçu ne conserve jamais les mots de passe en clair. Il stocke leur empreinte, de sorte qu’une fuite de la base de données ne révèle pas directement les mots de passe. Pour renforcer cette protection, on ajoute à chaque mot de passe une valeur aléatoire appelée sel avant de le hacher. Le sel garantit que deux utilisateurs ayant choisi le même mot de passe obtiennent des empreintes différentes, et il déjoue les attaques fondées sur des tables précalculées. En pratique, on emploie pour les mots de passe des fonctions spécialement conçues pour être lentes et coûteuses à calculer, ce qui ralentit fortement les tentatives par force brute.

Vérification d’intégrité

Lorsqu’un fichier est publié accompagné de son empreinte, n’importe qui peut vérifier qu’il n’a pas été modifié. Il suffit de recalculer l’empreinte du fichier reçu et de la comparer à la valeur annoncée. Une correspondance confirme l’intégrité ; une divergence signale une corruption ou une altération. Ce mécanisme protège les téléchargements de logiciels, les sauvegardes et les transferts de données.

Signatures numériques

Les signatures numériques reposent directement sur le hachage. Plutôt que de signer un message entier, on signe son empreinte, ce qui est plus efficace et tout aussi sûr tant que la fonction de hachage reste fiable. Cette dépendance explique pourquoi une collision compromet la sécurité des signatures : si deux documents partagent la même empreinte, une signature valable pour l’un l’est aussi pour l’autre.

Chaînes de blocs

Les technologies de chaîne de blocs s’appuient massivement sur le hachage. Chaque bloc contient l’empreinte du bloc précédent, ce qui crée une chaîne où toute modification d’un bloc ancien invaliderait tous les suivants. Cette construction rend l’historique pratiquement infalsifiable et constitue le fondement de l’intégrité de ces systèmes.

Choisir et utiliser une fonction de hachage

Le choix de la fonction compte autant que son usage correct. Aujourd’hui, les recommandations s’orientent vers les membres de la famille SHA-2, notamment SHA-256, et vers SHA-3 comme alternative. Les algorithmes plus anciens comme SHA-1 ou MD5 sont à proscrire dès qu’une garantie de sécurité est requise, leurs faiblesses ayant été démontrées en pratique.

L’histoire de SHA-1 rappelle une vérité durable : une fonction de hachage n’est sûre que jusqu’à preuve du contraire. Suivre les recommandations des organismes de normalisation, anticiper les migrations et comprendre les propriétés réellement offertes par la fonction choisie sont les conditions d’un usage solide du hachage cryptographique.