Vous êtes sur la page 1sur 9

Dune Manire plus Dtailler

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 de fonction de hachage applique sur 3 entres distinctes.


Principe gnral

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.

f est dite minimale si elle est parfaite et S et N sont de mme cardinal.

Dans le cas S=N, f est dite prservant une relation donne de S si

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.

Conception d'une fonction de hachage


La conception d'une fonction de hachage est en gnral heuristique. Pour des cas d'optimisation le
concepteur cherchera trouver un compromis entre la taille des empreintes et le nombre de collisions
pour des chantillons de donnes traits reprsentatifs de cas d'utilisation rels.

La question du hachage uniforme, ou encore de l'quirpartition de l'ensemble de dpart vis--vis de la


fonction de hachage est un lment essentiel conditionnant l'efficacit de la fonction de hachage: si par
exemple, dans une table de hachage de taille 10, nous devons ranger des lments numrots de 10 en 10,
ou de 20 en 20, il est totalement inopportun d'utiliser la fonction modulo 10, car alors tous les lments se
retrouveraient groups dans la premire case. La difficult de trouver une "bonne" fonction de hachage
consiste donc trouver une fonction h qui "catgorise" notre ensemble de dpart S en classes
d'quivalence de proportions gales, pour la relation d'quivalence . De faon probabiliste, une fonction de
hachage uniforme dans l'ensemble d'arrive est une fonction telle que . On parlera dans ce cas
d'uniformit de la sortie.

Exemple pdagogique simple


Un exemple courant de fonction de hachage passable peut par exemple tre la fonction qui renvoie la taille
d'un fichier informatique.

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.

Exemples d'applications typiques


Tables de hachage et structures de donnes
On utilise frquemment les fonctions de hachage dans des structures de donnes : les tables de hachage.
Le principe est d'utiliser les empreintes des cls comme index des cases de la table. Ces empreintes sont
des nombres entiers obtenus en hachant la cl des objets stocker, souvent une chane de caractres.
On peut ensuite retrouver un objet partir de sa cl: il suffit de lire dans le tableau la case dont l'index est
l'empreinte de cette cl. Toutefois, des collisions existent car il existe moins d'empreintes possibles que de
valeurs possibles pour la cl. Des techniques destines lever ces conflits sont ncessaires, par exemple le
principe de chanage : chaque case de la table constitue le dbut d'une liste chane. Si deux cls
fournissent le mme condens et donc accdent la mme portion de la table, on doit alors parcourir la
liste chane pour l'lment qui correspond bien la cl donne (la cl est en gnral stocke avec
l'lment dans un nud de la liste).

On utilise aussi des fonctions de hachage dans le filtre de Bloom, une structure de donnes probabiliste.

Fonction de hachage perceptuelle


La plupart des fonctions de hachage produisent des empreintes radicalement diffrentes si l'entre est
lgrement modifie. Ce phnomne est particulirement visible avec les fonctions de hachage
cryptographiques qui se comportent de manire imprvisible grce l'effet avalanche. Toutefois, il existe
des fonctions de hachage qui tolrent une certaine marge d'erreur. Elles sont particulirement utiles pour
hacher des donnes qui peuvent subir des perturbations comme les sons ou encore les images. Par
exemple, un fichier audio original et sa version en MP3 seront totalement diffrents si la comparaison se
fait au niveau binaire. Toutefois, le rsultat est plus ou moins identique pour un auditeur. Un systme
dvelopp par Philips3 consiste subdiviser le signal en plusieurs bandes de frquences et les hacher
sparment. La fonction de hachage est conue pour ne modifier que quelques bits si le signal change. En
calculant la distance de Hamming entre deux signatures, il est possible de savoir si deux chantillons
correspondent la mme squence sonore.

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.

Exemples d'applications typiques


Contrle d'accs
Un mot de passe ne doit pas tre stock en clair sur une machine pour des raisons de scurit. Seul le
rsultat du hachage du mot de passe est donc stock. Pour identifier un utilisateur, l'ordinateur compare
l'empreinte du mot de passe d'origine (stock) avec l'empreinte du mot de passe demand. Toutefois, cette
manire de faire n'est pas compltement satisfaisante. Si deux utilisateurs dcident d'utiliser le mme mot
de passe alors le condens obtenu sera identique. Cette faille est potentiellement utilisable par trois
mthodes :

attaque par dictionnaire


attaque par force brute
attaque par table arc-en-ciel

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).

Proprits des fonctions de hachage :


1. La longueur de la signature doit tre toujours la mme (quelque soit la longueur des donnes en
entre. Nous verrons plus loin quelles sont les longueurs des empreintes suivants les fonctions de
hachage.)
2. Il nest pas possible de trouver les donnes originales partir des empreintes : Les fonctions de
hachage ne fonctionnent que dans un seul sens.
3. Il ne doit pas tre possible de prdire une signature. (Il nest pas possible dessayer dimaginer ce
que pourrait tre la signature en examinant les donnes)
4. Et enfin, videmment pour des donnes diffrentes : les signatures doivent tre diffrentes.

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)

Donnes en entre Signature


123 202cb962ac59075b964b07152d234b70
124 c8ffe9a587b126f152ed3d89a146b445
1234 81dc9bdb52d04dc20036dbd8313ed055
123456789012345678901234567890 a46857f0ecc21f0a06ea434b94d9cf1d
Abcde ab56b4d92b40713acc5af89985d4b786
Abcdef e80b5017098950fc58aad83c8c14978e

A quoi a sert le hachage ?


Ce qui est intressant dans le hachage, ce nest pas les donnes elles-mmes mais leurs signatures. Puisque
chaque donne sa propre signature, on peut se dire quesi les signatures sont identiques alors les
donnes sont identiques.
Et linverse, si les signatures sont diffrentes alors les donnes sont forcment diffrentes.

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 quoi les collisions ?


Oui, la lecture des dfinitions du dessus, une question ou remarque doit vous forcment vous venir
lesprit : Que se passe-t-il lorsque des donnes produisent la mme empreinte ?

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.

Quelques fonctions de hachage clbres


Quelques fonctions clbres et quelques sites qui permettent de calculer avec ces fonctions.
MD5
Vous en avez forcment entendu parl. Cette fonction de hachage est toujours trs utilise bien quau
niveau de la scurit, il est recommand de passer des versions plus robustes car des suites de collisions
ont t trouves.

Cette fonction renvoie une empreinte de 128 bits.

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.

Vous aimerez peut-être aussi