Académique Documents
Professionnel Documents
Culture Documents
Fonction de hachage
On nomme fonction de hachage, de l'anglais hash function (hash : pagaille, dsordre, recouper et
mlanger) par analogie avec la cuisine, une fonction particulire qui, partir d'une donne fournie en
entre, calcule une empreinte servant identifier rapidement, bien qu'incompltement, la donne initiale.
Les fonctions de hachage sont utilises en informatique et en cryptographie.
Exemple pdagogique du principe des fonctions de hachage appliqu des images: on considre ici une
fonction de hachage consistant convertir une image haute rsolution en une empreinte trs basse
rsolution. L'empreinte est beaucoup plus lgre en mmoire. Elle perd une grande partie de l'information
mais elle reste suffisante pour distinguer rapidement deux images.
Une fonction de hachage est typiquement une fonction qui, pour un ensemble de trs grande taille
(thoriquement infini) et de nature trs diversifie, va renvoyer des rsultats aux spcifications prcises (en
gnral des chanes de caractre de taille limite ou fixe) optimises pour des applications particulires. Les
chanes permettent d'tablir des relations (galit, galit probable, non-galit, ordre...) entre les objets
de dpart sans accder directement ces derniers, en gnral soit pour des questions d'optimisation (la
taille des objets de dpart nuit aux performances), soit pour des questions de confidentialit.
En terme trs concret, on peut voir une fonction de hachage (non cryptographique) comme un moyen de
replier l'espace de donnes que l'on suppose potentiellement trs grand et trs peu rempli pour le faire
entrer dans la mmoire de l'ordinateur. En revanche, une fonction de hachage cryptographique est ce que
l'on appelle une fonction sens unique, ce qui veut dire que le calcul de la fonction de hachage est facile et
rapide tandis que le calcul de sa fonction inverse est infaisable par calcul et donc non calculable en
pratique. Grce la valeur de hachage, on peut discriminer deux objets apparemment proches, ce qui peut
tre utilis pour garantir l'intgrit des objets, autrement dit leur non modification par une erreur ou un
acteur malveillant.
Terminologie
Le rsultat d'une fonction de hachage peut tre appel selon le contexte somme de contrle, empreinte,
empreinte numrique1, hash, rsum de message, condens, condensat, signature ou encore empreinte
cryptographique lorsque l'on utilise une fonction de hachage cryptographique.
Collision
Article dtaill : Collision (informatique).
Est appel collision d'une fonction de hachage, un couple de donnes de son ensemble de dpart
distinctes, qui sont telles que leur somme de contrle est identique. Les collisions sont en gnral
considres comme indsirables mais sont gnralement impossibles viter du fait de la diffrence de
taille entre les espaces de dpart et d'arrive de la fonction.
Considrations mathmatiques
Dfinitions
Soit une fonction de hachage f d'un ensemble S dans un ensemble N.
f est dite parfaite pour l'ensemble S si elle est une injection de S dans N.
Consquences
Une fonction de hachage parfaite ne possde aucune collision.
Lorsque l'ensemble d'arrive est de cardinal infrieur l'ensemble de dpart, il existe ncessairement des
collisions. Le nombre de collisions2 est alors suprieur ou gal card(S)-card(N).
Applications en optimisation
Principes gnraux
Les fonctions de hachage ont plusieurs objectifs.
1. Elles servent rendre plus rapide l'identification des donnes : calculer l'empreinte d'une donne
ne doit coter qu'un temps ngligeable.
2. Elles permettent de stocker un espace virtuel trs grand, mais peu rempli, de donnes dans un
espace physique forcment limit o l'accs aux donnes est direct, comme s'il s'agissait d'un
tableau. En ce sens, le hachage s'oppose aux listes chanes et aux arbres de recherche.
Une fonction de hachage doit par ailleurs viter autant que possible les collisions (tats dans lesquels des
donnes diffrentes ont une empreinte identique) : dans le cas des tables de hachage, ou de traitements
automatiss, les collisions empchent la diffrenciation des donnes ou, au mieux, ralentissent le
processus.
Hors cryptographie, les fonctions de hachage ne sont en gnral pas injectives, car on souhaite conserver
des empreintes plus petites que les donnes traites pour des considrations de stockage en mmoire : il
faut donc concevoir une fonction de hachage homogne, donnant une empreinte de taille raisonnable tout
en minimisant le nombre de collisions. Par exemple on peut associer une empreinte de 16, 32 ou 64 bits
chaque document d'une bibliothque de plusieurs millions de fichiers. Si deux fichiers ont des empreintes
diffrentes, ils sont coup sr diffrents. Si leurs empreintes sont identiques en revanche, un mcanisme
de gestion des collisions doit tre activ.
Pour un bon emploi de la fonction de hachage, il est souhaitable qu'un infime changement de la donne en
entre (inversion d'un seul bit, par exemple) entrane une perturbation importante de l'empreinte
correspondante. S'il s'agit de cryptographie, cela rend une recherche inverse par approximations
successives impossible : on parle d'effet avalanche. S'il s'agit de stockage efficace, cela minimisera le risque
d'une collision, deux cls de noms proches donneront accs des endroits loigns dans la mmoire
physique.
Nous voulons comparer deux fichiers informatiques afin de dterminer s'ils sont identiques (par exemple
dterminer si un document a t modifi). La solution vidente consiste vrifier la correspondance
caractre par caractre mais cette mthode peut s'avrer fastidieuse. Une solution souvent plus rapide
consiste comparer la taille des fichiers dans la mmoire (en gnral disponible immdiatement dans l'OS,
employe ici comme empreinte ou hachage) : si cette taille diffre nous avons obtenu trs rapidement la
preuve que les deux fichiers taient diffrents. A contrario, si les deux tailles de fichiers concident, il n'est
pas possible de conclure formellement que les deux fichiers sont identiques.
On utilise aussi des fonctions de hachage dans le filtre de Bloom, une structure de donnes probabiliste.
Ces techniques, allies au tatouage numrique, sont principalement destines lutter contre la
contrefaon. Elles sont galement intressantes pour grer des bases de donnes et trouver rapidement
des chantillons prsentant de fortes similitudes.
Somme de contrle
Article dtaill : Somme de contrle.
Table de hachage
Article dtaill : Table de hachage.
Applications en cryptographie
Article dtaill : Fonction de hachage cryptographique.
Principes gnraux
En cryptographie les contraintes sont plus exigeantes et la taille des empreintes est gnralement bien plus
longue que celle des donnes initiales ; un mot de passe dpasse rarement une longueur de 8 caractres,
mais son empreinte peut atteindre une longueur de plus de 100 caractres. La priorit principale est de
protger l'empreinte contre une attaque par force brute, le temps de calcul de l'empreinte passant au
second plan.
Une fonction de hachage cryptographique est utilise entre autres pour la signature lectronique, et rend
galement possibles des mcanismes d'authentification par mot de passe sans stockage de ce dernier. Elle
doit tre rsistante aux collisions, cest--dire que deux messages distincts doivent avoir trs peu de
chances de produire la mme signature. De par sa nature, tout algorithme de hachage possde des
collisions, mais on considre le hachage comme cryptographique si les conditions suivantes sont remplies :
il est trs difficile de trouver le contenu du message partir de la signature (attaque sur la premire
primage) ;
partir d'un message donn, de sa signature et du code source de la fonction de hachage, il est trs
difficile de gnrer un autre message qui donne la mme signature (attaque sur la seconde
primage) ;
il est trs difficile de trouver deux messages alatoires qui donnent la mme signature (rsistance
aux collisions).
Par trs difficile, on entend techniquement impossible en pratique , par toutes techniques
algorithmiques et matrielles, en un temps raisonnable. Le MD5 par exemple n'est plus considr comme
sr car on a trouv deux messages qui gnrent la mme empreinte. Toutefois, la mise en uvre de ces
techniques n'est pas aise et dans le cas du MD5, les chercheurs ont trouv une collision sur deux messages
au contenu alatoire. On peut cependant construire partir d'une collision des attaques relles4.
Lors d'une attaque par dictionnaire, on pourrait raisonnablement dduire que le mot de passe choisi par les
deux utilisateurs est relativement facile mmoriser.
Pour contrer ce type d'attaque, on ajoute une composante alatoire lors de la gnration initiale de
l'empreinte. Cette composante, aussi appele sel , est souvent stocke en clair. On peut simplement
utiliser l'heure de l'attribution du mot de passe ou un compteur qui varie selon l'utilisateur. Le mot de
passe est ensuite mlang avec le sel, cette tape varie selon le systme employ. Une mthode simple est
de concatner le mot de passe avec le sel. Le sel n'tant pas identique pour deux utilisateurs, on obtiendra
deux signatures diffrentes avec le mme mot de passe. Cela rduit fortement la marge d'une attaque via
un dictionnaire.
Les algorithmes SHA-1 (Secure Hash Algorithm 1 : 160 bits) et MD5 (Message-Digest algorithm 5, 128 bits,
plus ancien et moins sr) sont des fonctions de hachage utilises frquemment. Le SHA-2 (SHA-256, SHA-
384 ou SHA-512 bits au choix) est d'ores et dj prt s'il faut abandonner aussi le SHA-1.
Salage
Article dtaill : Salage_(cryptographie).
Le salage (salting en anglais) consiste ajouter une chane de caractres (un nonce) l'information avant le
hachage. Par exemple, dans un cadre cryptographique, au lieu de pratiquer le hachage sur le mot de passe
seul, on peut le faire sur le rsultat de la concatnation du mot de passe avec une autre chane de
caractres pseudo-alatoire, obtenue par un hachage de l'identifiant (login) concatn avec le mot de
passe. Les deux fonctions de hachage (celle qu'on utilise pour gnrer la chane pseudo-alatoire et celle
qu'on applique au rsultat) peuvent tre diffrentes (par exemple SHA-1 et MD5).
Cela permet de renforcer la scurit de cette fonction.
En effet, en l'absence de salage, il est possible de cracker le systme l'aide de tables de hachage
correspondant des valeurs (telles que des mots de passe) souvent utilises, par exemple les tables arc-en-
ciel.
Le simple ajout d'un sel (ou nonce) avant hachage rend l'utilisation de ces tables caduque, et le craquage
doit faire appel des mthodes telles que l'attaque par force brute (cette mthode, consistant tester
toutes les valeurs possibles, prend tellement de temps avec un bon mot de passe que l'on ne peut plus
qualifier cela de crackage).
Signature, empreinte ?
Depuis le dbut, je parle la fois de signature ou dempreinte. Vous trouverez mme parfois le terme de
condens (voire mme hashcode). Tous ces termes ont le mme sens, vous pouvez utiliser lun ou
lautre sans problme.
Quelques exemples
Voici quelques exemples de donnes et leurs signatures. Vous pouvez constater le respect des proprits
nonces au-dessus :
(les signatures ont t gnres avec la fonction MD5, nous verrons MD5 plus loin)
Donc le hachage est utilis pour comparer les donnes (en comparant les signatures).
Quelques utilisations concrtes des fonctions de hachage.
La liste ci-dessous est loin dtre exhaustive, car il existe bien dautres utilisations des fonctions de hachage,
mais ceux-ci sont faciles comprendre :
Comparaison des mots de passe. Nous lavons vu sur le schma du dessus. Attention : Ce schma
nest pas complet, car idalement, lors lenregistrement des mots de passes doit utiliser en plus une
chane complmentaire appele sel : mais ce nest pas lobjet de cet article.
Vrification des donnes tlcharges.
Par exemple, dans certains cas, lorsque vous tlchargez un fichier sur Internet la signature du
fichier original est disponible (soit dans un fichier part, soit directement affiche sur le site). Pour
tre sr que le fichier a t correctement tlcharg, il vous suffit de vrifier que la signature du
fichier tlcharg est bien identique celle fournie . (Je pense que je vais faire vite un petit article
pour montrer comment faire et je mettrai le lien ici).
La signature lectronique (ou signature numrique) des documents. Les documents envoys sont
passs dans une fonction de hachage, et lempreinte est envoye chiffre (avec le mcanisme de
cls asymtriques) en mme temps que les documents. Il suffit au destinataire de dchiffrer
lempreinte reue et vrifier que celle-ci correspond bien au calcul de lempreinte des donnes
reues.
Pour lutilisation de tables de hachage, utilises en dveloppement des logiciels.
Pour le stockage des donnes : si la signature dun fichier est prsente, alors on peut dire que le
fichier est prsent : il nest pas ncessaire de lenregistrer nouveau. Cela peut tre intressant car
si le fichier est trs gros, il faudra beaucoup moins de temps pour calculer sa signature que de
lenregistrer nouveau.
Cest ce quon appelle une collision. Dans la plupart des cas, ce nest pas bien grave car il ne sagit que de
contrles : on contrle que lempreinte des donnes reues est la mme que lempreinte des donnes
envoyes.
Cela peut tre un peu plus gnant, pour les mots de passe car deux mots de passe diffrents produisant la
mme empreinte permettront de sidentifier ! (cest une des raisons pour laquelle on ajoute du sel au
mot de passe, mais ce nest pas la seule raison).
Cest carrment trs gnant pour les tables de hachage ou pour les stockages de donnes. Cest pourquoi, il
est conseill dutiliser des fonctions de hachage avec de faibles taux de collisions.
SHA1
tait la fonction remplaante de MD5 car elle produisait des empreintes 160 bits et avec impossibilit de
trouver des collisions jusquen 2004-2005, date laquelle des attaques ont prouv des possibilits de
gnrer des collisions. Depuis, cette date il nest plus conseill dutiliser la fonction SHA1. Mais, elle est
encore trs utilise.
Les certificats numriques utilisant SHA1 ne sont plus plus valides au 31 dcembre 2016.
SHA2
SHA256 et SHA512 sont 2 des grands standards utiliss actuellement, car il ny a pas ce jour dattaques
ayant trouv des failles de scurit sur ces fonctions de hachage. Elles produisent comme vous pouvez vous
en douter des signatures de respectivement 256 et 512 bits.