Anatomie d'une fonction de hachage
Les propriétés attendues
Une fonction de hachage transforme une donnée de taille quelconque en une empreinte de taille fixe. Mais toutes les fonctions qui font cela ne sont pas cryptographiques : ce statut se mérite en satisfaisant des propriétés précises.
Les propriétés de base
Trois propriétés sont attendues de n'importe quelle fonction de hachage utile :
- Déterministe : la même entrée donne toujours la même empreinte. Sans cela, impossible de vérifier quoi que ce soit.
- Sortie de taille fixe : que l'entrée fasse 3 octets ou 3 gigaoctets, l'empreinte a la même longueur (256 bits pour SHA-256).
- Rapide à calculer : hacher un fichier doit prendre un temps négligeable.
"a" -> 3f2c8b... (256 bits)
"Bonjour tout le monde" -> a91e7d... (256 bits)
un fichier de 4 Go -> 0c4f19... (256 bits)
entrée quelconque empreinte de taille fixe
Les trois résistances
C'est ici que le qualificatif cryptographique se joue. Une fonction de hachage cryptographique doit résister à trois types de recherche :
- Résistance à la préimage : étant donné une empreinte
h, il est impossible de retrouver un messagemtel queH(m) = h. C'est la propriété à sens unique. - Résistance à la seconde préimage : étant donné un message
m1, il est impossible de trouver un autre messagem2différent tel queH(m1) = H(m2). - Résistance aux collisions : il est impossible de trouver deux messages quelconques
m1etm2distincts ayant la même empreinte.
La nuance entre les deux dernières est subtile mais capitale : dans la seconde préimage, m1 est imposé ; dans la collision, l'attaquant a le droit de choisir les deux messages. Cette liberté rend la collision plus facile à obtenir, on le verra au chapitre suivant.
| Propriété | Ce qui est donné | Ce qu'on cherche | Usage protégé |
|---|---|---|---|
| Préimage | l'empreinte h |
un m tel que H(m)=h |
mots de passe stockés |
| Seconde préimage | un message m1 |
un m2 != m1, même empreinte |
intégrité d'un document précis |
| Collision | rien d'imposé | deux m de même empreinte |
signatures, certificats |
L'effet d'avalanche
Une bonne fonction de hachage possède l'effet d'avalanche : changer un seul bit de l'entrée doit modifier environ la moitié des bits de sortie, de façon imprévisible.
H("chat") = 1a3f...0b (empreinte A)
H("chats") = e7c2...94 (empreinte B, sans rapport visible)
Sans cet effet, des entrées proches donneraient des empreintes proches, et un attaquant pourrait reconstruire l'entrée par approximations successives. L'avalanche garantit qu'aucune information sur l'entrée ne « fuit » dans l'empreinte.
En résumé
Une fonction de hachage cryptographique est déterministe, de sortie fixe et rapide, mais surtout elle résiste à la préimage, à la seconde préimage et aux collisions, tout en présentant un fort effet d'avalanche. Ces résistances ne sont pas équivalentes : la collision, où l'attaquant choisit les deux messages, est la plus exigeante à garantir.

