Académique Documents
Professionnel Documents
Culture Documents
Spécialité : ELECTRONIQUE
MESSAGE DIGEST 5
Le 21 Mars 2007
Spécialité : ELECTRONIQUE
Devant le jury :
i
REMERCIEMENTS
Tantely
ii
Résumé
Les fonctions de hachage jouent un rôle très important aussi bien en informatique
qu’en cryptographie.
En informatique, ces fonctions sont très utilisées pour accéder à des données. C’est
le cas des tables de hachage et des bases de données. Pour le cas des tables de hachage,
nous avons développé 2 fonctions de hachage fréquemment utilisées à savoir la méthode
du modulo et celle de la multiplication. Pour l’accès aux données dans une base de
données, les méthodes d’hachage dynamique, linéaire et extensible ont été étudiées.
Sur le plan cryptographique, pour mieux comprendre comment appliquer les
fonctions de hachage, nous avons commencé par traiter quelques notions de cryptographie
à savoir les clés, les différents types de cryptage et de décryptage et sur la cryptanalyse.
Parmi les fonctions de hachage existant actuellement, notre choix s’est porté sur le
Message Digest 5 car il est le plus utilisé. Le détail de son algorithme a été fait pour une
meilleure compréhension d’une fonction de hachage. Ses propriétés ont été également
traitées. Ensuit pour illustrer le rôle que peut jouer MD5 en cryptographie, nous avons
associé un algorithme de chiffrement avec MD5 pour obtenir une signature digitale qui
permet de vérifier l’authenticité des données. Nous avons également montré le mécanisme
sur la vérification d’intégrité d’un message avec MD5. Enfin, nous avons mis en exergue
les différents algorithmes de chiffrement pouvant être associés à MD5.
Abstract
Hash functions have many applications in the domain of data processing (e.g. data
bases, hash table) as well as in cryptography such as checking data integrity, e-cash and
many other cryptographic protocols.
For accessing to data bases, linear hash method and extensible hash method are
investigated. Whereas, for hash table two frequently used hash functions are looked upon:
modulo method and multiplication method.
Generalities about data encryption are covered, in order to fully understand
application of hash functions in that area: different methods of data encryption and de-
encryption and encryption analysis.
In this work, Message Digest 5 which is the most widely used hash function is
chosen, and developed in details to illustrate application of hash function in data
encryption like digital signature to guarantee data authenticity. The mechanism of
verification data integrity with MD5 is also shown. The use of hash functions in these
applications not only ensures the security, but also greatly improves their efficiency.
iii
________________________________________________Tables des matières
Introduction générale............................................................................................ 1
1.1. Historique.................................................................................... 2
1.2. Cryptage et décryptage................................................................ 3
1.3. La cryptographie à clé symétrique……………………………. 5
1.4. La cryptographie à clé asymétrique…………………………... 5
1.5. La Cryptographie Hybride……………………………………. 6
1.6. Clés……………………………………………………………… 7
1.7. Implémentation de la cryptographie dans le modèle OSI…… 7
1.8. La cryptanalyse………………………………………………. 9
1.9. Attaques des fonctions de chiffrement………………………... 10
2.1. Généralités………………………………………………………….. 13
2.2. Définitions……………………………………………………........... 13
2.3. Propriétés d’une fonction de hachage.............................................. 14
2.4. Tables de hachage.............................................................................. 15
2.5. Les tables de hachage dans les bases de données………………… 23
2.6. Fonction de hachage cryptographique……………………………. 28
3.1. Introduction……………………………............................................ 31
3.2. Principe et utilité d'une fonction de hachage …...……………….. 31
3.3. Terminologie et notations …………………………………………. 31
3.4. Description de l'algorithme MD5 …...……………………………. 32
3.5. Sécurité ……………………............................................................... 34
Conclusion......................................................................................................................... 44
v
INTRODUCTION GENERALE
1
Chapitre I. Notion générale sur la cryptographie
Le mot «cryptographie» vient des mots grecs «kruptos», qui signifie caché, et
«graphein», qui signifie écrire. Il désigne l’ensemble des procédés permettant de transformer
un message écrit, dit clair, en un autre message, dit chiffré ou crypté, par le moyen de
certains codages convenus d’avance; le texte reçu n’est donc compréhensible que pour celui
qui en connaît la clé.
Lorsque Jules César envoyait des messages à ses généraux, il ne faisait pas confiance
à ses messagers. Il remplaçait tous les A contenus dans ses messages par des D, les B par des
E, et ainsi de suite pour tout l'alphabet. Seule la personne connaissant la règle du « décalage
par trois » pouvait déchiffrer ses messages.
Il substitue une information par une autre. Cette opération s'effectue généralement en
décalant les lettres de l'alphabet. Le code secret de Jules César est à la base de la
cryptographie conventionnelle. Dans ce cas, l'algorithme constitue à décaler les lettres de
l'alphabet et la clé correspond au nombre de caractères de décalage.
Par exemple, si on code le mot « SECRET » à l'aide de la valeur 3 de la clé de César,
l'alphabet est décalé de manière à commencer à la lettre D. Ainsi, l'alphabet
ABCDEFGHIJKLMNOPQRSTUVWXYZ devient
DEFGHIJKLMNOPQRSTUVWXYZABC
Où D = A, E = B, F = C, etc.
Avec ce procédé, le mot « SECRET » est crypté en « VHFUHW ». Pour autoriser un
autre utilisateur à lire le texte chiffré, on lui indique que la valeur de la clé est égale à 3.
Au début des années 70 est apparue une technique plus standardisée et plus efficace
appelée cryptographie à clé symétrique. Ce procédé utilise des algorithmes standardisés pour
chiffrer les messages, le message étant protégé par une clé numérique, chaîne de caractères
de longueur variable permettant d’inverser le processus de chiffrement et de restituer le
message original. L’avantage de cette méthode est que les interlocuteurs n’ont plus qu’à se
transmettre une clé et non toute la méthode de chiffrement. Le danger d’interception de la clé
subsiste.
2
La recherche d’une solution encore plus sécurisée a abouti à l’invention de la
cryptographie à clé asymétrique par Whitfield Diffie et Martin Hellman en 1976. Cette
solution ne requiert pas d’échange de clé, et offre donc un niveau de sécurité maximal.
a. Définition
3
fonctions mathématiques, appelés algorithmes cryptographiques, qui dépendent d’un
paramètre appelé clé.
• La cryptanalyse, à l’inverse, est l’étude des procédés cryptographiques dans le but
de retrouver des faiblesses et, en particulier, de pouvoir décrypter des textes chiffrés. Elle
consiste surtout à retrouver le texte en clair sans connaître la clé de déchiffrement.
b. La cryptographie invulnérable
c. Mécanismes de la cryptographie
4
La cryptographie à clé symétrique (ou cryptographie à clé privée) repose sur une clé
unique qui servira aussi bien à crypter qu’à décrypter les messages. Le créateur et le
destinataire doivent posséder tous les deux une copie de cette clé, qu’ils doivent garder
secrète afin d’avoir la certitude d’être les seuls à pouvoir décrypter les messages. On parle
de clé privée. Le danger de cette méthode réside dans la transmission de la clé entre les deux
interlocuteurs. En effet, celle-ci doit être transmise de façon sécurisée, de préférence lors
d’une rencontre entre les deux interlocuteurs. Si cette clé est divulguée, le cryptage perd toute
son efficacité. Le temps qu’un pirate mettra à casser le cryptage est fonction de la longueur
de la clé. On a intérêt à utiliser des clés les plus longues possibles selon la Fig.1-2.
5
Le principe d’échange d’un document crypté est le suivant : on utilise la clé publique
du destinataire, qui sera le seul à pouvoir décrypter à l’aide de sa clé privée. Le gros avantage
de la cryptographie à clé asymétrique est que l’on peut communiquer avec un nombre infini
d’interlocuteurs sans avoir à procéder à un échange préalable de clé secrète. Les clés
publiques sont mises à la disposition de tous dans un annuaire interrogeable sur le web. Le
temps qu’un pirate mettra à casser le cryptage est fonction de la longueur de la clé.
Les algorithmes à clés asymétriques sont plus complexes et donc beaucoup moins
rapides que ceux à clés symétriques. Ainsi, dans la pratique, ils sont utilisés pour échanger
une clé symétrique qui sera utilisée pour la suite des transactions entre les interlocuteurs.
1.6. Clés
Une clé est une valeur utilisée dans un algorithme de cryptographie, afin de générer
un texte chiffré. Les clés sont en réalité des nombres extrêmement importants. La taille d'une
clé se mesure en bits. Dans la cryptographie à clé publique, plus la clé est longue, plus la
sécurité du texte chiffré est élevée.
Même si les clés publiques et privées sont liées par une relation mathématique, il est
très difficile de deviner la clé privée uniquement à partir de la clé publique.
Plus la clé est longue, plus sa durée de sécurisation est élevée. Si les informations que
l’on souhaite crypter doivent rester confidentielles pendant plusieurs années, on peut utiliser
une clé correspondant à un nombre de bits extrêmement élevé.
7
7 Application
Couches hautes 6 Présentation
5 Session
4 Transport
Couches basses 3 Réseau
2 Liaison
1 Physique
Emetteur A Récepteur B
Application Application
Présentation Présentation
Session Session
Transport Transport
Sous -réseaux
8
L’implémentation de la cryptographie dans le modèle OSI, peut s’effectuer en deux
types : dans les couches basses et dans les couches hautes
• Si le chiffrement a eu lieu dans les couches basses, on parle de chiffrement lien par
lien, les données qui passent par le lien seront chiffrées.
• Si le chiffrement a eu lieu dans les couches hautes, on parle de chiffrement de bout
en bout. Les données restent chiffrées jusqu’à ce que le destinataire le déchiffre.
1.8. La cryptanalyse
9
1.9. Attaques des fonctions de chiffrement
On distingue plusieurs types d’attaques suivant les informations que peut obtenir le
cryptanalyste :
• L’attaque la plus simple sur le plan conceptuel est l’attaque exhaustive ou attaque en
force brute, ce qui consiste à essayer toutes les clés possibles. Le nombre de test à effectuer
est dépendant de la longueur de la clé.
10
• L’attaque par dictionnaire est la méthode par laquelle le cryptanalyste se constitue
un dictionnaire de mots à tester. Ce type d’attaque est beaucoup plus rapide qu’une attaque
exhaustive.
• Elle utilise une attaque à texte en clair choisi et basé sur l’observation de l’évolution
des différences entre deux textes lorsqu’ils sont chiffrés avec la même clé. A force d’analyser
des paires de textes, on finit par trouver la clé recherchée en réduisant suffisamment le
nombre de clés possibles pour pouvoir mener une attaque exhaustive rapide.
• Elle peut également être utilisée pour attaquer d’autres types d’algorithmes comme
les fonctions de hachage.
Avec les algorithmes asymétriques, le problème n’est pas de trouver la bonne clé par
attaque exhaustive, mais de dériver la clé secrète à partir de la clé publique. La plupart des
algorithmes asymétriques reposent sur des problèmes mathématiques difficiles à résoudre.
C’est pourquoi les paramètres qui influencent la difficulté de résolution du problème
déterminent la sécurité. Généralement, cela se traduit par la nécessité d’utiliser de grands
nombres, la taille de ces nombres ayant une répercussion sur la longueur des clés. Cela
explique que les clés utilisées par la cryptographie à clé publique soient généralement bien
plus longues que celles utilisées par la cryptographie à clé secrète.
11
b.2. L’attaque à texte clair deviné
Un point faible des algorithmes à clé publique est le caractère publique de la clé de
chiffrement : le cryptanalyste ayant connaissance de cette clé peut mener une attaque à texte
en clair deviné, qui consiste à tenter de deviner le texte en clair et à le chiffrer pour vérifier
son exactitude. En effet, un attaquant pourrait se constituer une liste exhaustive des textes
en clairs possibles et des textes chiffrés correspondants. Il n’aurait alors aucun mal à
retrouver le texte en clair correspondant à un cryptogramme donné.
La plupart des algorithmes asymétriques sont sensibles aux attaques à texte chiffré
choisi. Il convient donc, si on utilise le même algorithme pour le chiffrement et pour la
signature, de s’assurer que les protocoles employés, ne permettent pas à un adversaire de
faire signer n’importe quel texte. Mieux, on peut avoir recours à des couples distincts pour
ces deux opérations.
Ce type d’attaque utilise la mesure du temps pris par des opérations cryptographiques
pour retrouver les clés privées utilisées. Une recherche s’est intéressée à l’introduction
délibérée d’erreurs dans les processeurs cryptographiques pour tenter d’obtenir des
informations sur la clé.
12
CHAPITRE II : HACHAGE DE DONNEES
2.1. Introduction
Depuis sa naissance jusqu’à sa mort, toute personne doit avoir un nom et un prénom.
De ce fait, aucun homme sur terre ne doit avoir le même état civil, sinon, il y aura confusion.
Une pièce est alors indispensable pour reconnaître chaque citoyen et pour qu’il ne puisse nier
son identité. Donc à chaque pièce correspond un et un seul individu. Ainsi, on lui demandera
sa pièce d’identité à chaque fois besoin se fera sentir. Cette pièce représente alors en quelque
sorte l’empreinte de l’individu puisqu’il laissera une trace de son identité.
Cette notion d’empreinte tient une place aussi importante dans le domaine de
l’informatique que dans celui de la cryptographie. Ceci nous introduit dans le cadre de notre
travail qui porte sur les hachages de données.
2.2. Définitions
Une fonction de hachage est une fonction qui associe à un grand ensemble de données
un ensemble beaucoup plus petit de taille fixe (de l’ordre de quelques centaines de bits) qui
est caractéristique de l’ensemble de départ. Ainsi toute modification de l’entrée changera
radicalement la sortie.
b. Empreinte
Le résultat d’une fonction de hachage sur une donnée quelconque est appelé
empreinte. Il est aussi appelé condensé, haché ou résumé.
c. Collision
C’est un effet qui apparaît lorsque deux données quelconque distincts produisent le
même haché après leurs avoir appliquer une fonction de hachage.
13
d. Structures de données [4]
Une structure de données est une structure logique destinée à contenir des données,
afin de leur donner une organisation permettant de simplifier leur traitement.
f. Base de données
a. Compression
b. Irréversibilité
Cette propriété se traduit par le fait que, à partir d’un haché, il est pratiquement
impossible de trouver les données originales. C’est-à-dire que la fonction de hachage est à
sens unique. En d’autres termes, pour un haché H(x) connu il est difficile de trouver x.
14
c. Absence de collision
d. Rapidité
e. Grande dispersion
La première application pratique d’un algorithme de hachage est son utilisation dans
une table de hachage. Lorsqu’on cherche un élément dans une telle table, on calcule
l’empreinte de l’élément et on le cherche grâce à ce dernier.
Le fait de créer une empreinte à partir d'une clé peut engendrer un problème de
collision, c'est à dire qu'à partir de deux clés différentes, la fonction de hachage pourrait
renvoyer la même valeur de condensé, et donc par conséquent donner accès à la même
position dans le "tableau". Pour minimiser les risques de collisions, il faut donc choisir
soigneusement sa fonction de hachage.
a. But
15
b. Structure de la table
L’accès à chaque élément de la table se fait via sa clé. Il s’agit d’un tableau ne
comportant pas d’ordre (un tableau est indexé par des entiers). L’accès à un élément se
fait en transformant la clé en un condensé par l’intermédiaire d’une fonction de hachage.
Le condensé est un nombre qui permet la localisation dans le tableau, typiquement le
hachage est l’index de l’élément dans le tableau.
c. Définition
Une bonne fonction de hachage est cruciale pour les performances. Les collisions
étant en général résolues par des méthodes de recherche linéaire, une mauvaise fonction
de hachage, c’est-à-dire produisant beaucoup de collisions, va fortement dégrader la
rapidité de la recherche. D’autre part, il est préférable que la fonction de hachage ne soit
pas de complexité élevée.
Le calcul du hachage se fait parfois en deux temps :
1. Une fonction de hachage particulière à l’application est utilisée pour
produire un
16
nombre entier à partir de la donnée d’origine.
2. Ce nombre entier est converti en une position possible de la table, en
général en
calculant le reste modulo la taille de la table. En effet la plupart des fonctions de hachage
supposent que U ⊆ IN. Donc si les clés ne sont pas des entiers naturels, on doit trouver un
moyen de les interpréter comme des entiers naturels.
Exemple :
L’identificateur pt peut être interprété comme la paire d’entiers décimaux
(112, 116), puisque p = 112 et t = 116 dans l’ensemble des caractères ASCII.
En l’exprimant en base128, pt devient (112*128) + 128 = 14452.
H(k) = k mod M
• Puissance de 10
Si les clés utilisées par l’application sont des nombres décimaux.
Mais les nombres premiers assez éloignés des puissances exactes de 2 sont de
bonnes valeurs pour M.
Par exemple, on veut stocker n = 2000 chaînes de caractères, avec des caractères
sur 8 bits.
17
Longueur de liste en moyenne 3 n’est pas catastrophique.
Prenons m = 701 parce qu’il est premier et proche de 2000/3, sans être proche
d’une puissance de 2.
Les tailles des tables de hachage sont souvent des nombres premiers, afin d’éviter
les problèmes de diviseurs communs, qui créeraient un nombre important de collisions.
Une alternative est d’utiliser une puissance de deux, ce qui permet de réaliser l’opération
modulo par de simples décalages, et donc de gagner en rapidité.
18
fonction de hachage au début de l’algorithme. L’adversaire n’aura pas alors le moyen de
connaître le type de données qui produira des collisions.
Collision entre x = <x0, x1,…, xr> et y = < y0, y1,…, yr> : ∑ai(xi – yi) ≡ 0 (mod m)
Lorsque deux clés ont la même valeur de hachage, ces clés ne peuvent être
stockées à la même position, on doit alors employer une stratégie de résolution des
collisions.
19
p = 1(1 – 1/M)(1 – 2/M)…(1-(N – 1)/M)
< ∏e-i/M = exp(-(N – 1)N/2M)
Pour donner une idée de l’importance d’une bonne méthode de résolutions des
collisions, considérons le résultat issu du paradoxe des anniversaires. Même si nous
sommes dans le cas le plus favorable où la fonction de hachage a une distribution
uniforme, il y a 95% de chances d’avoir une collision dans une table de taille 1 million
avant qu’elle ne contienne 2500 éléments.
De nombreuses stratégies de résolution des collisions existent mais les plus
connues et utilisées sont le chaînage et l’adressage ouvert.
(i) Chaînage
Cette méthode est la plus simple. Chaque case de la table est en fait une liste
chaînée des clés qui ont le même hachage. Une fois la case trouvée, la recherche est alors
linéaire en la taille de la liste chaînée. Dans le pire des cas où la fonction de hachage
renvoie toujours la même valeur de hachage quelle que soit la clé, la table de hachage
devient alors une liste chaînée, et le temps de recherche est en O(n). L’avantage du
chaînage est que la suppression d’une clé est facile, et que l’agrandissement de la table
peut être plus longtemps que dans l’adressage ouvert c’est-à-dire permet α > 1, les
performances se dégradant moins vite.
20
Figure 2-2 : Résolution des collisions par chaînage
L’adressage ouvert consiste dans le cas d’une collision, à stocker les valeurs de
hachage dans des cases contiguës. La position de ces cases est déterminée par une
méthode de sondage.
Lors d’une recherche, si la case obtenue par hachage direct ne permet d’obtenir la
bonne clé, une recherche sur les cases obtenues par une méthode de sondage est effectuée
jusqu’à trouver la clé, ou non, ce qui indique qu’aucune clé de ce type n’appartient à la
table. Cependant il ne permet pas une valeur de α > 1. La suppression avec adressage
ouvert est très difficile.
Le principe de la méthode de sondage est le suivant :
On essaie les cases h0(k), h1(k),… avec une fonction f : hi(k) = h(k) + f(i, k) mod M
appelée stratégie de résolution de collision.
- sondage linéaire
f(i, k) = i
L’intervalle entre les cases est fixe, souvent 1.
Le nombre moyen de sondages lors de recherche fructueuse est :
21
≈ (½)(1 + 1/(1 - α ))
Le nombre de sondages lors de recherche infructueuse ou insertion est :
≈ (½)(1 + 1/(1 - α )2)
Ce sondage peut être utilisé jusqu’à α < 0.75
- sondage quadratique
f(i, k) = i2
L’intervalle entre les cases augmente linéairement, les indices des cases
augmentent donc quadratiquement.
- double hachage
f(i, k) = ih’(k) avec une
L’adresse de la case est donnée par une fonction de hachage auxiliaire h’. Ce
type de sondage est la généralisation du sondage linéaire et est très proche d’une
résolution idéale.
Le nombre moyen de sondages lors d’insertion ou recherche infructueuse est :
≈ 1 + α + α 2 + … ≈ 1/(1 – α)
Une indication critique des performances d’une table de hachage est le facteur de
charge qui est la proportion de cases utilisées dans la table. Plus le facteur de charge est
proche de 100%, plus le nombre de sondages à effectuer devient important. Lorsque la
table est pleine, les algorithmes de sondage peuvent même échouer. Le facteur de charge
22
est en général limité à 80%, même en disposant d’une bonne fonction de hachage. Des
facteurs de charge faibles ne sont pas pour autant significatifs de bonnes performances, en
particulier si la fonction de hachage est mauvaise et génère du clustering.
Figure 2-3 : Résolution des collisions par adressage ouvert et sondage linéaire
D’après ce qui suit, les fonctions de hachage sont utilisées pour accéder à des
données. Elles sont aussi utiles pour l’accès de données dans les bases de données. Ceci
constitue le prochain paragraphe du travail.
La technique générale d’accès aux données par une clé est représentée par la Fig.
suivante :
Figure 2-4 : Accès à une adresse par l’intermédiaire d’une fonction de hachage
23
a. L’hachage statique
b. L’hachage dynamique
Le principe de ce hachage est le doublement d’adressage (page) en cas de
saturation. Il utilise progressivement les bits de clé en fonction des besoins.
24
b.1. L’hachage extensible
25
b.2. L’hachage linéaire
Avantages :
- Saturation d’une page : duplication d’une page courante.
- Pointeur cyclique sur page courante + niveau d’éclatement.
- Page de débordement : mise en attente d’éclatement du paquet concerné.
26
Figure 2-12 : Insertion de T12
Le hachage de données représente de plus en plus une alternative aux autres moyens
d’accès à des données comme dans les bases de données. Mais il est devenu un outil
incontournable dans la vérification de l’intégrité de données, de l’authentification et de la
protection des mots de passe dans la cryptographie.
27
2.6. Fonction de hachage cryptographique [9]
a. Définition
Une fonction de hachage cryptographique sert à réduire (hacher) toute donnée binaire
(un fichier ou un message) de taille quelconque en une autre de taille fixe. En d’autres
termes, on obtient un résumé du texte initial. Elle associe des caractères différents et plus
court pour effectuer cela.
Cette fonction ne doit pouvoir associer une seule suite de caractère pour un même texte
et un seul. Ainsi il est possible de transmettre le message original avec son haché et le
destinataire pourra alors vérifier que celui-ci est identique et qu'il n'a en aucun cas été utilisé.
Elle sert à crypter des données comme les mots de passe ou autre texte important pour
éviter qu'il transite en clair au sein du réseau Internet ou Ethernet non sécurisé.
28
Une telle fonction, dont la description est entièrement publique, transforme une
chaîne binaire de longueur quelconque en une chaîne binaire de longueur fixe. Deux raisons
motivent l'utilisation de ces fonctions : la première, est la lenteur des systèmes à clé
publique : les messages à signer étant relativement longs, il serait trop coûteux de les signer
directement, ainsi une fonction de hachage leur est d’abord appliquée, ensuite le haché du
message est signé, et non le message lui-même.
La deuxième raison, liée à la sécurité, est d'empêcher certains types d'attaques sur les
schémas de signature. Par exemple dans le cas du RSA, la signature du produit de deux
messages est le produit des signatures de chacun d'eux. Cette particularité du RSA le rend
vulnérable à la forge de messages (certes le plus souvent inintelligibles), mais pouvant
néanmoins représenter une menace, surtout lorsque le mécanisme de signature est utilisé à
des fins d'identification. Le hachage du message avant signature permet de pallier cette
faiblesse.
Pour pouvoir être utilisée dans des applications cryptographiques, une fonction de
hachage doit satisfaire la contrainte suivante : il doit être impossible en pratique de trouver
deux messages qui aient le même haché.
• Collision resistance
• Preimage resistance
* Un algorithme est dit « collision resistant » s'il est difficile de trouver 2 messages
distincts M1 et M2 produisant une même empreinte h. Dans ce cas, il n'y a aucune contrainte
sur les valeurs de M1, M2 et h. N'importe quel triplet (M1, M2, h) est accepté. Ce type de
29
faiblesse permet à un escroc de monter une arnaque : Il promet une belle valeur M1, mais
donne en définitive une valeur M2 (moins belle) et on ne peut pas protester car M1 et M2 ont
la même empreinte. Il s'agit donc d'une forme d'attaque contre la signature électronique.
* Un algorithme est dit « preimage resistant » s'il est difficile de trouver un message
M2 produisant la même empreinte h que le message M1, en connaissant h, mais sans
connaître M1. Ce type de faiblesse correspond typiquement à l'attaque de mots de passe
stockés sous forme d'empreinte : M1 est le mot de passe secret, et M2 sera le mot de passe
trouvé par "crackage" de l'empreinte h.
* Un algorithme est dit « second preimage resistant » s'il est difficile de trouver un
message M2 produisant la même empreinte h que le message M1, en connaissant h et M1.
Ce type de faiblesse correspond typiquement à l'attaque de l'intégrité des données, quelqu'un
produit un message M2, dérivé de M1 et qui produira la même empreinte que M1.
30
CHAPITRE III : MESSAGE DIGEST 5
3.1. Introduction
Le MD5 est un algorithme développé par Ron Rivest en 1991 au sein de la NSA qui
crée une clé de 128 bits. Il permet de vérifier l’intégrité d’un document mais d’une manière
plus sécurisée qu’un banal contrôle de parité. Le MD5 génère sa clé lors de l’envoi d’un
message et la transmet avec le message afin que le récepteur puisse recalculer la clé du
message et la comparer à celle envoyé. Le MD5 peut être retrouvé dans divers langages de
programmation tel le C, C++, Java, PHP,…ce qui fait de lui un algorithme assez utilisé pour
crypter les données.
Le MD5 a été développé de sorte qu’il soit relativement rapide sur des machines
fonctionnant en 32 bits ce qui fait qu’il ne nécessite pas de grande plage mémoire de création
ou analyse de l’algorithme. Le MD5 est capable de générer une clé quelque soit la taille en
entrée du message.
•Terminologie
Tout au long de cette description, un mot a une taille de 32 bits et un byte vaut 8 bits
(1 octet). Une séquence de bits peut être interprétée d'une manière naturelle telle une
31
séquence de bytes, où chaque groupe consécutif de 8 bits peut être interprété comme un byte
avec le bit de poids fort de chaque byte apparaissant en premier. De même, une séquence de
bytes peut être interprétée telle une séquence de mots de 32 bits, où chaque groupe de 4 bytes
consécutifs est interprété comme un mot où le bit de poids faible apparaît en premier.
•Notations
: Complément de bit de X.
X + Y : Opération OR entre X et Y.
Le message est étendu de sorte que sa taille (en bits) soit égale à 448 modulo 512.
Cette étape est toujours opérée même si la longueur du message vaut déjà 448 modulo 512.
Le rembourrage se fait ainsi: un seul bit mis à "1" est ajouté au message et ensuite une
succession de bits mis à "0" afin que le message rembourré fasse 448 modulo 512.
Finalement, au minimum 1 bit et au maximum 512 bits sont ajoutés au message.
32
Etape 2. Taille ajoutée
A ce point, le message résultant a une taille qui est un multiple exact de 512 bits. De
même, le message a une taille qui est un multiple exact de 16 mots. Le message final sera
alors de la forme M [0 ... N-1] où M[i] est un mot et N est un multiple de 16.
En hexadécimal, les mots de 32 bits ont leur bit de poids faible positionné à gauche :
mot A: 01 23 45 67
mot B: 89 ab cd ef
mot C: fe dc ba 98
mot D: 76 54 32 10
Soient les quatre fonctions auxiliaires suivantes qui chacune prendra trois mots de 32
bits à l’entrée et produira à la sortie un seul mot de 32 bits.
F(X, Y, Z) = (X.Y) + ( . Z) = F1
G(X, Y, Z) = (X.Z) + (Y. ) = G1
H(X, Y, Z) = X ⊕ Y ⊕ Z = H1
I(X, Y, Z) = Y ⊕ (X+ ) = I1
Cette étape utilise une table de 64 éléments T [1…64] construite depuis la fonction
sinus. T[i] est le « i-ème » élément de la table, lequel est égal à la partie entière de 2 32*(abs
(sin (i))) où i est en radians.
33
Etape 5. Sortie
3.5. Sécurité
Le niveau de sécurité discuté dans ce document est considéré comme suffisant pour
implémenter une très haute sécurité pour la signature digitale basée sur le MD5 et un système
de cryptage à clé publique.
34
CHAPITRE IV : LES ALGORITHMES ASSOCIES A MD5
Début
Introduction du
texte clair
Bloc de texte
de 64 bits
Division en 4 sous
blocs de 16 bits
A, B, C, D
(16bits/sous-bloc)
blocsbbloc)bloc
j=1
i=1
A,B,C,D
i=i+6 Round j
Etape1 = A * K[i]
j=j+1 Etape2 = B +K [i+1]
Etape3 = C +K [i+2]
O
Etape 4= D* K [i+3]
Etape5 = Etape1 ⊕ Etape3
j<9 ? Etape6 = Etape2 ⊕ Etape4
N Etape7 = Etape2 * K [i+4]
Etape8 = Etape6 + Etape7
C1 = A * K [49]
Etape9 = Etape8 * K [i+5]
C2 = B + K [50]
Etape10 = Etape7 + Etape9
C3 = C + K [51]
Etape11 = Etape1 ⊕ Etape9 /A de la ronde suivante
C4 = D * K [52]
Etape12 = Etape3 ⊕ Etape9 /C de la ronde suivante
Etape13 = Etape2 ⊕ Etape10 /B de la ronde suivante
Texte chiffré (C1, C2, C3, C4) Etape14 = Etape4 ⊕ Etape10 /D de la ronde suivante
Fin
35
4.2. Algorithme de déchiffrement IDEA
Début
Introduction du
texte à
déchiffrer
C1 = C1 * K49-1
C2 = C2 - K50
C3 = C3 - K51
C4 = C4 * K52-1
j=1
i=48
Round j
Etape1 = C1 ⊕ C3
Etape2 = C2 ⊕ C4
Etape3 = Etape 1+K [i-1]
Etape 4 = Etape 2+Etape3
Etape5 = Etape1 * K [i]
Etape6 = Etape3 + Etape5
Etape7 = C1 ⊕ Etape5
Etape8 = C 3+ Etape5
C1, C2, C3, C4 Etape9 = C2 ⊕ Etape 6
Etape10 = C4 ⊕ Etape 6
Etape11 = Etape7 * K [i-5]-1 / C1 de la ronde suivante
Etape12 = Etape8 - K [i-3] / C3 de la ronde suivante
Etape13 = Etape9 – K [i-4] / C2 de la ronde suivante
Etape14 = Etape 10 * K [i-2]-1 / C4 de la ronde suivante
Texte en clair
Fin
36
4.3. Algorithme de chiffrement asymétrique RSA
Calculer
n=p*q
Introduction du texte en clair M
Prendre le code
Calcul ASCII
de phi (n)= de chaque caractère
(p-1)*(q-1)
C=Texte chiffré
Fin
37
Début
Protagoniste A O Protagoniste B
B envoie Y à A
(La clé publique créée Y)
A envoie X à B
(La clé publique créée X)
Calculer : k= Yx * mod
Utilisation d’un algorithme symétrique (IDEA)
n
k =k’ =g xy * mod n
38
Fin
Début
Fin
Choisir h avec 1<h<p-1 / g= hz * mod p>1
m’= 16 ( mots ) * n, n є N/
1 mot=32 bits
i = 140
j= 0
k=0
X [k] =M [ j*16 + k ]
k=k+1
k>15 ?
N
O
β
II
β II
AA=A
BB=B
CC=C
DD=D
Round 1
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] 41[CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
Round 2
Round 3
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
Round 4
III
α III
A = A + AA
j =j + 1 B = B + BB
C = C + CC
D = D + DD
42
j>n–1?
Message haché :
ABCD
Fin
CONCLUSION GENERALE
43
menace exercée par les moyens de piratage et de cryptanalyse de pointe qu’ont certaines
organisations voire des particuliers.
44
___________________________________________________________________Annexe I
1. La couche physique
3. La couche réseau :
4. La couche transport
5. La couche session
6. La couche présentation
7. La couche application
b. Congruence dans Z
Définition : Les entiers relatifs a et b sont congru modulo n s’ils ont le même reste par la
division par n.
Il revient au même de dire que b-a est multiple de n. On note :
Le but est ici de calculer l’expression : ae *mod n avec a =2,3,… Quand on calcule, on
constate que les résultats apparaissent de façon très aléatoire dans l’ensemble des entiers
modulo n. Pour calculer de grandes puissances modulo n, on procède comme suit.
Calculer n = pq = 29 * 37 = 1073
Choisir e au hasard tel que e n'ait aucun facteur en commun avec (p-1) (q-1):
Prendre e = 71
On trouve d = 1079
Pour encrypter le message 'HELLO'. Prendre le code ASCII de chaque caractère et on les
met bout à bout:
m = 7269767679
Ensuite, il faut découper le message en blocs qui comportent moins de chiffres que n. n
comporte 4 chiffres, on va donc découper notre message en blocs de 3 chiffres:
DH Diffie-Hellman
ID Identity
Complément de bit de X.
[1] http://www.laurent.flaum.free.fr
[3] http://fr.wikipedia.org/wiki/Fonction_de_hachage
[5] http://www.lrde.epita.fr/˜didier
[6] www.math.univ-lyon1.fr/~roblot/resources/masterpro_chapitre_5.pdf
[7] http://fr.wikipedia.org/wiki/Table_de_hachage
[8] http://math.univ-lyon1.fr/~roblot/resources/masterpro_chapitre_5.pdf
[9] http://fr.wikipedia.org/wiki/Fonction_de_hachage
[10] www.faqs.org/ftp/rfc/pdf/rfc1321.txt.pdf
Auteur : RAZAFINDRAIBE Andrianjakarivo Tantely
Nombre de pages : 59
Nombre de figures : 20
RESUME
Les fonctions de hachage jouent un rôle très important aussi bien en informatique
qu’en cryptographie.
En informatique, ces fonctions sont très utilisées pour accéder à des données. C’est
le cas des tables de hachage et des bases de données. Pour le cas des tables de hachage,
nous avons développé 2 fonctions de hachage fréquemment utilisées à savoir la méthode
de la division et celle de la multiplication. Pour l’accès aux données dans une base de
données, les méthodes d’hachage dynamique, linéaire et extensible ont été étudiées.
Sur le plan cryptographique, pour mieux comprendre comment appliquer les
fonctions de hachage, nous avons commencé par traiter quelques notions de cryptographie
à savoir les clés, les différents types de cryptage et de décryptage et sur la cryptanalyse.
Parmi les fonctions de hachage existant actuellement, notre choix s’est porté sur le
Message Digest 5 car il est le plus utilisé. Le détail de son algorithme a été fait pour une
meilleure compréhension d’une fonction de hachage. Ses propriétés ont été également
traitées. Ensuite pour illustrer le rôle que peut jouer MD5 en cryptographie, nous avons
associé un algorithme de chiffrement avec MD5 pour obtenir une signature digitale qui
permet de vérifier l’authenticité des données. Nous avons également montré le mécanisme
sur la vérification d’intégrité d’un message avec MD5. Enfin, nous avons mis en exergue
les différents algorithmes de chiffrement pouvant être associés à MD5.