Fonctions de hachage
Une fonction de hachage calcule le résumé d'un texte, ce résumé est très sensible au texte initial
(une petite modification du texte provoque une grande modification du résumé).
MD5 (Message Digest 5) est une fonction de hachage cryptographique qui calcule, à partir
d'un fichier numérique, son empreinte numérique (en l'occurrence une séquence de
128 bits ou 32 caractères en notation hexadécimale) avec une probabilité très forte que
deux fichiers différents donnent deux empreintes différentes.
En 1991, Ronald Rivest améliore l'architecture de MD4 pour contrer des attaques
potentielles qui seront confirmées plus tard par les travaux de Hans Dobbertin.
En 1996, une faille qualifiée de grave est découverte et indique que MD5 devrait être mis de
côté au profit de fonctions plus robustes comme SHA-1.
La fonction de hachage MD4
mêmes principes.
Il fut publié dans un « Federal Register » en 1992, adopté comme standard en 1993
corrigé en 1994 suite à la mise en évidence d’une faiblesse technique maintenue secrète.
D’après Rivest, les objectifs de conception de « MD4 » étaient les suivants :
Sécurité :
il est impossible de trouver par le calcul deux textes qui aient la même
empreinte ; aucune attaque n’est plus efficace que l’attaque exhaustive
Sécurité directe :
la sécurité de « MD4 » n’est basée sur aucune hypothèse telle que la difficulté de
factorisation
Vitesse :
« MD4 » est adapté pour des réalisations logicielles rapides
Simplicité :
« MD4 » est aussi simple que possible sans grandes structures de données ni
programme compliqué
Architecture matérielle :
« MD4 » est optimisé pour les architectures à microprocesseurs (telles qu’INTEL)
Mise en place du processus
T[0] T[1] T[2] … T[N-1] tels que chaque T[i] soit d’une longueur de 32 bits et N º 0 mod 16.
La chaîne résultante aura une longueur multiple de 512, chaîne que nous pourrons découper
en un tableau T.
Algorithme
On complète le message par un 1, et suffisamment de 0 pour que le message étendu ait une
longueur congruente à 448, modulo 512
(on a donc b qui peut valoir jusque 264... ce qui est énorme !)
Etape 2 : Initialisation
On définit 4 buffers de 32 bits A, B, C et D, initialisés (chiffres hexadécimaux, ie a=10, b=11...) :
A=01234567
B=89abcdef
C=fedcba98
D=76543210
On définit aussi 4 fonctions F, G, H et I, qui prennent des arguments codés sur 32 bits, et renvoie une valeur
sur 32 bits, les opérations se faisant bit à bit.
Ce qu'il y a d'important avec ces 4 fonctions est que si les bits de leurs arguments X, Y et Z sont
indépendants, les bits du résultat le sont aussi.
Pour chaque bloc de 512 bits du texte, on fait les opérations suivantes :
1. on sauvegarde les valeurs des registres dans AA, BB, CC, DD.
2. on calcule de nouvelles valeurs pour A, B, C, D à partir de leurs anciennes valeurs, à
partir des bits du bloc qu'on étudie, et à partir des 4 fonctions F, G, H, I.
3. on fait A=AA+A, B=BB+B, C=CC+C, D=DD+D.
Etape 4 : Ecriture du résumé
Le résumé sur 128 bits est obtenu en mettant bout à bout les 4 buffers A, B, C, D de 32
bits.
Un programme JavaScript qui permet de calculer le résumé MD5 d'un texte se trouve à l’adresse
suivante : http://www.bibmath.net/crypto/moderne/md5.php3
Exemple :