Vous êtes sur la page 1sur 64

UNIVERSITE D’ANTANANARIVO

ECOLE SUPERIEURE POLYTECHNIQUE


D’ANTANANARIVO
***************************
DEPARTEMENT ELECTRONIQUE
*********************************************************

MEMOIRE DE FIN D’ETUDES EN VUE DE L’OBTENTION


DU DIPLOME D’INGENIEUR

Spécialité : ELECTRONIQUE

Option : Electronique Automatique

HACHAGE DE DONNEES APPLIQUE A LA CRYPTOGRAPHIE :

MESSAGE DIGEST 5

Présenté par : RAZAFINDRAIBE Andrianjakarivo Tantely

Le 21 Mars 2007

Numéro d’ordre : 005/EN/EA/2006 Année Universitaire : 2005-2006


HACHAGE DE DONNEES APPLIQUE A LA CRYPTOGRAPHIE : MESSAGE DIGEST 5

Spécialité : ELECTRONIQUE

Option : Electronique Automatique

Présenté par : RAZAFINDRAIBE Andrianjakarivo Tantely

Devant le jury :

- Monsieur RAKOTOMIRAHO Soloniaina, Président


- Madame RABEHERIMANANA Lyliane Irène : Examinateur
- Monsieur RABESANDRATANA ANDRIAMIHAJA Mamisoa : Examinateur
- Monsieur RATSIMBA Mamy Nirina : Examinateur

Rapporteur : Monsieur ANDRIAMANANTSOA Guy Danielson


«Ny soa atao levenam-bola fa ny ratsy atao loza mihantona. »

i
REMERCIEMENTS

Mes premières pensées vont à la louange de Dieu Tout-puissant pour sa gratitude


et sa bénédiction. Sans lui, nous n’aurions pas pu finir ce travail.
Je tiens aussi à présenter mes reconnaissances et remerciements pour les
personnes suivantes :
 A notre Chef de Département, M. RASTEFANO Elisée, qui m’ a prodigué ses
précieux conseils durant les cinq années d’études que j’ai passé à l’Ecole
Supérieure Polytechnique d’Antananarivo, plus précisément au Département
Electronique.
 A M. RAKOTOMIRAHO Soloniaina qui a bien voulu présider cette
soutenance de mémoire.
 A M. ANDRIAMANANTSOA Guy Danielson, mon rapporteur, qui malgré ses
maintes occupations, m’ a partagé ses connaissances et son précieux temps
pour l’élaboration à terme et à bien de ce manuscrit.

 A Mme RABEHERIMANANA Lyliane Irène et


 A Messieurs : RABESANDRATANA ANDRIAMIHAJA Mamisoa et
RATSIMBA Mamy Nirina qui ont accepté d’apprécier mon
travail.

 A tous les Enseignants de l’Ecole et du Département Electronique, qui m’a


partagé leur savoir-faire.
 A tous les membres de ma famille, pour leurs soutiens moraux, affectifs et
financiers.
 A tous mes collègues, amis et à tous ceux qui ont contribué, de près ou de
loin, à l’élaboration de ce manuscrit.

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

Chapitre I : Notion générale sur la cryptographie

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

Chapitre II : Hachage de données

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

Chapitre III : Message Digest 5

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

Chapitre IV : Algorithmes associés à MD5

4.1. Algorithme de chiffrement symétrique IDEA …………………… 35


4.2. Algorithme de déchiffrement IDEA................................................. 36
4.3. Algorithme de chiffrement asymétrique RSA ……………............ 37
4.4. Algorithme asymétrique de Diffie-Hellman…………………......... 38
4.5. Algorithme de génération d’une clé avec le DSA ……………....... 39
4.6. Algorithme de hachage MD5 ............................................................ 40

Conclusion......................................................................................................................... 44

Annexe I : Rôle et Utilité de chaque couche du modèle OSI…………………. 45


Annexe II : Eléments mathématiques pour la cryptographie…………………. 47
Annexe III : Procédure de cryptage et de décryptage avec le RSA……………. 49

Répertoire des sigles et abréviations


Liste des figures
Références bibliographiques

v
INTRODUCTION GENERALE

Actuellement, grâce à l’évolution de la technologie, le système de communication,


basé sur l’utilisation d’équipements informatiques et de télécommunications, prend de plus
en plus de place dans le monde. Un tel système présente incontestablement d’énormes
avantages dans la vie quotidienne de l’homme et surtout dans le fonctionnement des
différentes organisations. En particulier, un message renfermé dans un fichier informatique,
aussi long soit-il, peut être transmis puis reçu presque instantanément par le destinataire.
Mais il se trouve que la confidentialité de l’information est menacée. En effet, une personne
autre que le destinataire réel peut acquérir plus ou moins facilement le fichier, et donc son
contenu. La sécurisation de la confidentialité de l’information s’avère donc très utile. Par
conséquent, il est nécessaire de trouver des méthodes de protection des informations à la
hauteur de l’enjeu. Le cryptage basé sur l’utilisation d’une fonction de hachage en est une.

Tout au long de cette étude, on va expliquer le fonctionnement d’une fonction de


hachage et ses différentes applications. En particulier nous verrons en détail une fonction de
hachage cryptographique qu’est le Message Digest 5 qui est un outil indispensable à la
validité et à l’authentification des données qui transitent au sein d’un réseau.

Le premier chapitre de ce manuscrit porte sur une vue générale de la cryptographie.


Le second décrit les domaines d’utilisation d’une fonction de hachage. Le troisième concerne
la fonction de hachage cryptographique MD5, et le dernier chapitre détaille les différents
algorithmes associés à cette dernière.

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

1.1. Historique [1]

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.

1.2. Cryptage et décryptage

Les données lisibles et compréhensibles sans intervention spécifique sont considérées


comme du texte en clair. La méthode permettant de dissimuler un texte en clair en masquant
son contenu est appelée le cryptage. Le cryptage consiste à transformer un texte normal en
charabia inintelligible appelé texte chiffré. Cette opération permet de s'assurer que seules les
personnes auxquelles les informations sont destinées pourront y accéder. Le processus
inverse de transformation du texte chiffré vers le texte d'origine est appelé le décryptage. La
figure 1-1 illustre ce processus.

Figure 1-1 : Cryptage et décryptage

a. Définition

• La cryptographie est la science qui utilise les mathématiques pour le cryptage et le


décryptage de données. Elle permet ainsi de stocker des informations confidentielles ou de
les transmettre sur des réseaux non sécurisés (tels que l'Internet), afin qu'aucune personne
autre que le destinataire ne puisse les lire.
• La cryptologie est une science mathématique qui comporte deux branches : la
cryptographie et la cryptanalyse.
• La cryptographie traditionnelle est l’étude des méthodes permettant de
transmettre des données de manière confidentielle. Afin de protéger un message, on lui
applique une transformation qui le rend incompréhensible, qui, à partir d’un texte en clair,
donne un texte chiffré. Dans la cryptographie moderne, les transformations sont des

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

La cryptographie peut être invulnérable ou vulnérable. Cette vulnérabilité se mesure


en termes de temps et de ressources nécessaires pour récupérer le texte en clair. Une
cryptographie invulnérable pourrait être définie comme un texte crypté, particulièrement
difficile à déchiffrer sans l'aide d'un outil de décodage approprié.
Si le but traditionnel de la cryptographie est d’élaborer des méthodes permettant de
transmettre des donnés de manière confidentielle, la cryptographie moderne s’attaque en fait
plus généralement aux problèmes de sécurité des communications. Le but est d’offrir
un certain nombre de services de sécurité comme la confidentialité, l’intégrité,
l’authentification des données transmises et l’authentification d’un tiers. Pour cela, on utilise
des mécanismes basés sur des algorithmes cryptographiques.

c. Mécanismes de la cryptographie

• Un algorithme de cryptographie ou un chiffrement est une fonction mathématique


utilisée lors du processus de cryptage et de décryptage. Cet algorithme est associé à une clé
(un mot, un nombre ou une phrase), afin de crypter le texte en clair.
Avec des clés différentes, le résultat du cryptage variera également. La sécurité des données
cryptées repose entièrement sur deux éléments, l’invulnérabilité de l'algorithme de
cryptographie et la confidentialité de la clé.

• Un système de cryptographie est constitué d'un algorithme de cryptographie, ainsi


que de toutes les clés et tous les protocoles nécessaires à son fonctionnement.

1.3. La cryptographie à clé symétrique (ou cryptographie conventionnelle)

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.

Clé unique « secrète » (la plus longue possible)

Figure 1-2 : Cryptage conventionnel

1.4. La cryptographie à clé asymétrique

La cryptographie à clé asymétrique (ou cryptographie à clé publique) a été inventée


pour éviter l’échange de clé secrète préalable à toute transaction sécurisée. C’est une
méthode de chiffrement qui repose sur deux clés : la clé publique et la clé privée. Chaque
interlocuteur possède un couple de clés composé d’une clé privée qu’il doit garder secrète, et
d’une clé publique qu’il diffuse à tout le monde, ces deux clés sont complémentaires. En
effet, il n’existe qu’une clé publique correspondant à une clé privée donnée et vice versa. Un
document crypté avec la clé publique ne peut être relu qu’à l’aide de la clé privée et vice
versa. Ce principe d’unicité permet de s’assurer que seul son destinataire pourra déchiffrer le
message qu’on lui envoie selon la Fig.1-3.

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

Avec l’algorithme de Diffie-Hellman, la taille est généralement comprise entre 1024


et 4096 bits, avec le RSA, elle est comprise entre 1024 et 2048 bits.

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.

Figure 1-3 : Cryptage à clé publique

1.5. La cryptographie Hybride

C’est une combinaison des meilleures fonctionnalités de la cryptographie à clé


publique et de la cryptographie à clé secrète.

Lorsqu'on souhaite assurer la confidentialité des messages échangés, on ne devrait


pas avoir recours qu’à un seul type de chiffrement. La complexité des opérations en jeu dans
les systèmes à clé publique rend le chiffrement extrêmement lent par rapport à un
chiffrement à clé symétrique. D’un autre côté, seul un schéma à clé publique permet un
échange sécurisé d’une donnée secrète sans à avoir la même clé privée. Ainsi, on utilisera de
préférence un algorithme à clé publique pour échanger une clé secrète, clé qui servira ensuite
à chiffrer les échanges à l'aide d'un algorithme symétrique.
6
Cette combinaison de deux techniques permet à la fois d'obtenir la rapidité des
chiffrements à clé secrète et de résoudre le problème de l'échange de la clé secrète entre les
deux 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.

La taille de la clé publique et de la clé secrète de cryptographie conventionnelle est


complètement indépendante. Une clé conventionnelle de 80 bits est aussi puissante qu'une clé
publique de 1024 bits.

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

1.7. Implémentation de la cryptographie dans le modèle OSI

a. Le système OSI [2]

L’ISO a spécifié un modèle d’architecture des logiciels pour les réseaux de


télécommunications où les fonctionnalités réseaux sont réparties dans sept couches
logicielles. Ce modèle s’appelle OSI comme l’illustre la Fig.1-4. Chaque couche possède son
rôle et remplie des fonctions bien définies et limitées (Cf. annexe I). Les relations et
communications entre eux sont détaillées à la Fig.1-5.

7
7 Application
Couches hautes 6 Présentation
5 Session
4 Transport
Couches basses 3 Réseau
2 Liaison
1 Physique

Figure 1-4 : Les sept couches du modèle OSI

Emetteur A Récepteur B

Application Application

Présentation Présentation

Session Session

Transport Transport
Sous -réseaux

Réseau Réseau Réseau Réseau

Liaison Liaison Liaison Liaison

Physique Physique Physique Physique

Support physique Support physique

Figure 1-5 : Communication entre les couches

b. La cryptographie dans le modèle OSI

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.

b.1. Chiffrement lien par lien

L’endroit le plus simple pour effectuer le chiffrement se trouve dans la couche


physique. Le dispositif de chiffrement est placé à cet endroit. Il chiffre toutes les
informations qui passent entre lui et l’autre dispositif reverse.
La sécurité de cette méthode réside sur le fait que les données qui circulent dans le
réseau sont cryptées. Comme toutes les informations sont cryptées, l’interception des
données ne corrompt personne (on ne connaît ni le contenu ni sa destination).

b.2. Chiffrement de bout en bout

Dans ce cas, on place le dispositif de chiffrement entre la couche réseau et la couche


transport. Les données chiffrées sont les unités de transport.

1.8. La cryptanalyse

Si le but de la cryptographie est d’élaborer des méthodes de protection, le but de la


cryptanalyse est au contraire de casser ces protections. Une tentative de cryptanalyse d’un
système est appelée une attaque, et elle peut conduire à différents résultats :
• Cassage complet : Le cryptanalyste retrouve la clé de chiffrement.
• Obtention globale : Il retrouve un algorithme de déchiffrement, mais qui ne nécessite pas la
connaissance de la clé de déchiffrement.
• Obtention locale : Il retrouve le texte en clair correspondant à un message chiffré.
• Obtention d’information : Il obtient quelques indications sur le texte en clair ou la clé
(certains bits de la clé, un renseignement sur la forme du texte en clair,…).

9
1.9. Attaques des fonctions de chiffrement

Les fonctions de chiffrement sont supposées rendre impossible le déchiffrement par


un cryptanalyste, c’est-à-dire la récupération d’un message clair sans clé. A fortiori, elles
doivent protéger le secret des clés.

On distingue plusieurs types d’attaques suivant les informations que peut obtenir le
cryptanalyste :

• L’attaque à texte chiffré seulement, où le cryptanalyste ne connaît qu’un ensemble


de textes chiffrés. Il peut soit retrouver seulement les textes en clair, soit retrouver la clé. En
pratique, il est très souvent possible de deviner certaines propriétés du texte en clair, ce qui
permet de valider ou non le déchiffrement d’un cryptanalyste.
• L’attaque à texte en clair connu, où le cryptanalyste connaît non seulement les
textes chiffrés, mais aussi les textes en clair correspondants , son but est alors de retrouver la
clé. Du fait de la présence, dans la plupart des textes chiffrés, de parties connues, ce type
d’attaque est très courant.
• L’attaque à texte en clair choisi, où le cryptanalyste peut choisir des textes en clair à
chiffrer et donc utiliser des textes apportant plus d’informations sur la clé. Si il peut de plus
adapter ses choix en fonction des textes chiffrés précédents, on parle aussi d’attaque
adaptive.
• L’attaque à texte chiffré choisi, qui est l’inverse de la précédente: le cryptanalyste
peut choisir des textes chiffrés pour lesquels il connaîtra le texte en clair correspondant, sa
tâche est alors de retrouver la clé. Ce type d’attaque est principalement utilisé contre les
systèmes à clé publique, pour retrouver la clé privée.

a. Attaques sur les algorithmes symétriques

a.1. Attaques au niveau des clés

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

a.2. La cryptanalyse différentielle

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

a.3. La cryptanalyse linéaire

La cryptanalyse linéaire utilise une attaque à texte en clair connu et consiste à


spécifier l’algorithme de chiffrement par blocs par une approximation linéaire. Avec un
nombre suffisant de paires (texte en clair, texte chiffré), on peut deviner certains bits de la
clé.

b. Attaques sur les algorithmes asymétriques

b.1. Attaques au niveau des clés

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

b.3. Attaque à texte chiffré choisi

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.

b.4. Attaque temporelle

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

a. Fonction de hachage [3]

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.

e. Table de hachage [5]

Les tables de hachages sont des structures de données composées de tableaux


statiques et possédant des algorithmes de recherche très performant. Il transforme des noms
de fichiers en index de tableau à l’aide d’une fonction de hachage.

f. Base de données

Une base de données est un ensemble structuré et organisé permettant le stockage de


grandes quantités d'informations afin d'en faciliter l'exploitation (ajout, mise à jour, recherche
de données).

2.3. Propriétés d’une fonction de hachage [6]

Une fonction de hachage H doit vérifier les cinq propriétés suivantes :

a. Compression

H associe à un message de longueur arbitraire, une empreinte de longueur fixe.

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

Du point de vue informatique, Il doit être impossible de générer deux documents


ayant la même empreinte sinon il y a collision. Cela pourrait compromettre la fiabilité du
document.

Pour deux éléments distincts x et y, H(x) ≠ H(y). Dans le cas contraire, il y a


collision. Cette propriété est très importante dans la cryptographie.

d. Rapidité

H doit avoir un coût minimal en temps de calcul.

e. Grande dispersion

Un petit changement du document initial modifie complètement son empreinte.

2.4. Les Tables de hachage [7]

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

Ranger les N éléments dans un tableau de taille M afin d’optimiser la recherche


d’un élément donné.

Facteur de remplissage α = N/M.

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.

Figure 2-1 : Un annuaire représenté comme une table de hachage

c. Définition

Soit H la fonction de hachage suivante : H : K → {0,1,…,M-1} où K est


l’ensemble des clés possibles.
Soit T[0…M-1] la table de hachage.

d. Choix d’une bonne fonction de hachage

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.

Voici deux méthodes permettant de produire un entier :

d.1. Méthode de la division

H(k) = k mod M

H(k) est le reste de la division de k par M. Comme il ne demande qu’une seule


opération de division, le hachage par division est très rapide.
On évite en général certaines valeurs de M :
• Puissance de 2
Si m = 2t, alors h(k) sera constituée des t bits d’ordre inférieur à k.

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

Fonction de hachage H(k) = k mod 701

d.2. Méthode de la multiplication

H(k) = M . (k . A mod 1), 0<A<1

où kA mod 1 représente la partie fractionnaire de kA, c’est-à-dire kA - kA.

On choisit en général m = 2p (p bits de l’ordre supérieur de la moitié inférieure de


Ak) ce qui permet d’implémenter facilement la fonction h sur la plupart des ordinateurs
en supposant que supposons que la taille d’un mot-machine soit w bits et que k tienne
dans un seul mot.
A doit être prime relatif à 2w et Ak devrait être distribué « uniformément ».
A ≈ [(√5 – 1)/2]2w est un bon choix (le prime relatif le plus proche).

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

Un problème fréquent et surprenant est le phénomène de clustering qui désigne le


fait que des valeurs de hachage se retrouvent côte à côte dans la table, formant des
clusters. Ceci est très pénalisant pour les techniques de résolution des collisions par
adressage ouvert. Les fonctions de hachage réalisant une distribution uniforme des
hachages sont donc les meilleures, mais sont en pratique difficile à trouver.

Dans les environnements où un adversaire essaye d’attaquer les performances de la


recherche en soumettant des entrées générant un grand nombre de collision afin de ralentir
la recherche, une solution est le hachage universel, qui sélectionne aléatoirement une

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.

Le principe de l’hachage universel est le suivant :

Choisir une fonction de hachage aléatoire. Ecrire la clé de (r + 1) « caractères »


comme :

x = <x0, x1, x2,…, xr>


et calculer :

H(x) = (∑Hi(xi)) mod M

où Hi sont aléatoires et m est un prime.

Par exemple, Hi = aix mod m, ai ∈ {0, 1,…, m – 1} aléatoire uniforme

Collision entre x = <x0, x1,…, xr> et y = < y0, y1,…, yr> : ∑ai(xi – yi) ≡ 0 (mod m)

Il existe mr solutions pour <a0, a1,…, ar>

De ce fait, la probabilité de collision est mr/ mr+1 = 1/m (indépendamment


de x, y).

Résolution des collisions

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.

La probabilité p pour qu’il n’y ait aucune collision est : [5]

19
p = 1(1 – 1/M)(1 – 2/M)…(1-(N – 1)/M)
< ∏e-i/M = exp(-(N – 1)N/2M)

N > √(M2ln2) ≈ 1.18√M : au moins une collision avec probabilité ≥ ½.

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

(ii) Adressage ouvert

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.

Voici les valeurs de f(i, k) selon le sondage utilisé :

- 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 – α)

Et les sondages lors de recherche fructueuse sont :

≈ (1/N)∑(1/(1 – i/M)) ≈ (1/ α)ln(1/(1 – α))

Le sondage linéaire possède la meilleure performance en terme de cache mais est


sensible à l’effet de clustering décrit plus haut. Le double hachage ne permet pas d’utiliser
le cache efficacement mais permet de réduire presque complètement les problèmes de
clustering, en contrepartie d’une complexité plus élevée. Le sondage quadratique se situe
entre le linéaire et le double hashing au niveau des performances.

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.

2.5. Les fonctions de hachage dans les bases de données [8]

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

Figure 2-5 : Hachage statique

Cette technique offre d’excellentes performances tant qu’il n’y a pas de


débordement. Mais elle est inadaptée aux données en nombre variable.

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.

Figure 2-6 : Hachage dynamique

Il y a deux méthodes : l’hachage extensible et l’hachage linéaire.

24
b.1. L’hachage extensible

Figure 2-7 : Hachage extensible

L’hachage extensible permet :


- la duplication d’une page dès sa saturation.
- répertoire adressant ces pages en fonction des M premiers de la clé.
- le doublement du répertoire si utilisation d’un bit de clé supplémentaire.
Problème : comment insérer T7 (110101) et T8 (010000) ?

Figure 2-8 : Insertion par doublement du répertoire

Figure 2-9 : Insertion sans doublement

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

Figure 2-10 : Hachage linéaire

Problème : comment insérer T11 (110100) ?

Figure 2-11 : Insertion de T11

Comment insérer T12 (010011) ?

26
Figure 2-12 : Insertion de T12

Figure 2-13 : Insertion avec débordement

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.

Figure 2.14 : Principe d’hachage d’un message

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

Figure 2.15 : Vérification de l’intégrité d’un texte par son hachage

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

b. Evaluation de la résistance d’une fonction de hachage à une attaque cryptographique

La qualité d'un algorithme de calcul d'empreinte s'évalue suivant 3 critères. Ces


critères seront donnés en anglais car c'est leur dénomination usuelle :

• Collision resistance

• Preimage resistance

• Second 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.

3.2. Principe et utilité d'une fonction de hachage

Cet algorithme prend à l’entrée un message d'une longueur quelconque et produit à la


sortie une "empreinte" ou "message-digest" du message d’entrée.

Il est impossible de produire deux messages ayant la même empreinte, ou de produire


un quelconque message ayant pour cible une empreinte pré-établie. L'algorithme du MD5 est
destiné à l'utilisation d'une signature digitale, où un fichier important doit être
"compressé" d'une manière sûre avant d'être crypté avec une clé privée sous un système de
cryptage à clé publique.
L'algorithme MD5 est étudié pour être assez rapide sur des machines 32 bits. Ainsi, il
ne requiert pas de grandes tables de substitutions, l'algorithme peut être codé d'une manière
assez compacte.

3.3 Terminologie et notations

•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

rol X, s : Rotation circulaire de X par la gauche de s positions de bit.

: Complément de bit de X.

X + Y : Opération OR entre X et Y.

X ⊕ Y : Opération XOR entre X et Y.

X.Y : Opération AND entre X et Y.

3.4. Description de l'algorithme MD5 [10]

Soit un message m de longueur b (bits) à l’entrée. Ici b est un nombre quelconque


supérieur ou égal à 0 et n’étant pas forcément un multiple de 8 et de taille arbitraire. Le
message est représenté comme suit : m [0] m [1]…m [b-1].

Les 5 étapes suivantes permettent le calcul de l'empreinte du message.

Etape 1. Ajout des bits de rembourrage

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

Une représentation 64-bit de b (longueur du message avant rembourrage) est ajoutée


au résultat de l'étape précédente. Dans le cas où b est plus grand que 2^64, seul l'ordre
LittleEndian des 64 bits de b est utilisé (Ces bits sont ajouté comme deux mots de 32 bits et
ajouté dans le mot en LittleEndian d'abord en accord avec les conventions antérieures).

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.

Etape 3. Initialisation de quatre tampons de travail (quatre mots)

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

Etape 4. Traiter le message par des blocs de 16 mots

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

Les empreintes produites à la sortie sont A, B, C et D. Le haché commencera alors


par le byte de poids faible de A et se terminera par le byte de poids fort de D.

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

4.1. Algorithme de chiffrement symétrique IDEA

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

i=i-6 j=j+1 O j<9 ?


N

C1, C2, C3, C4

Texte en clair

Fin

36
4.3. Algorithme de chiffrement asymétrique RSA

Choisir un nombre e tel que


e soit premier avec phi (n) ;
Début(n)
e<phi

Création d’une clé publique


La clé publique créée est le couple (e, n)
Choisir
(Clé2 nombres premiers p et q
d’encryptage)

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)

Grouper le code ASCII en blocs m/ m=nombres de chiffres de n - 1

C=Texte chiffré

Fin

4.4. Algorithme asymétrique de Diffie-Hellman

Crypter chacun des blocs/C= me *mod (n)

37
Début

Création d’une paire de clé

Choisir deux grands entiers premiers entre eux n et g / n>g>1

512≤ taille de n≤1024


N

Protagoniste A O Protagoniste B

Choix d’un grand nombre


Choix d’un grand nombre entier aléatoire y
entier aléatoire x

B envoie Y à A
(La clé publique créée Y)

Calculer : k’= Xy * mod


n
Calculer : Calculer :
X= gx * mod n Y= gy * mod n

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

La clé secrète est le couple (x, y)

38
Fin

4.5. Algorithme de génération d’une clé avec le DSA

Début

Génération d’une paire de clé

Choisir un nombre premier p de taille L/


512 ≤ L (en bits) ≤ 1024
et L divisible par 64

Choisir un nombre premier q de taille 160 bits/


p-1 = q *z (z entier)

Fin
Choisir h avec 1<h<p-1 / g= hz * mod p>1

Générer aléatoirement un nombre x


avec 0<x<q

Calculer y =gx *mod p

4.6. Algorithme de hachage MD5

La clé publique est (p, q, g, y) Début La clé privée est x

Introduction du message M à hacher

Calcul de la longueur m (bits) du message M

Rembourrage de la longueur du message en


ajoutant un 1 et des 039à partir de la droite
de la séquence de bits constituant le
message pour obtenir m ≡ 448 [512]
Ajouter à m’= m ≡ 448 [512] la valeur
de la longueur du message initiale m codée
sur 64 bits. .

m’= 16 ( mots ) * n, n є N/
1 mot=32 bits

Prendre un bloc de 512 bits

Initialisation de 4 tampons de travail :


A=01234567
B=89abcdef
C=fedcba98
D=76543210

Définition de 4 fonctions non-linéaires :


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

i = 140

i=i+1 T[i]= E[4294967296*abs(sin(i))]


i>64 ?
N
O

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

[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]


[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

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

[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]


[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

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

Les opérations effectuées aux Round (1, 2, 3 et 4) sont :

Round 1: [abcd k s i] execute l’ operation: a = b + ( rol (a + F (b, c, d) + X[k] + T [i]), s)


Round 2: [abcd k s i] execute l’ operation: a = b + ( rol (a + G (b, c, d) + X[k] + T [i]), s)
Round 3: [abcd k s i] execute l’ operation: a = b + ( rol (a + H (b, c, d) + X[k] + T [i]), s)
Round 4: [abcd k s i] execute l’ operation: a = b + ( rol (a + I (b, c, d) + X[k] + T [i]), s)

CONCLUSION GENERALE

Le besoin de cacher, de sécurité, d’intimité et l’envie de garder certaines informations


secrètes ne sont ni un phénomène récent ni un caprice de l’humanité. C’est plutôt une partie
de sa vie, de son histoire. Et l’avènement de la télématique ne fait qu’accroître le recours à la
cryptographie, en ce sens que cette prouesse technologique se révèle être l’autoroute des
informations de tous genres : compromettants, vitaux sinon stratégiques. Ce problème est
commun à tous les systèmes informatiques existants, encore faut-il mettre en exergue la

43
menace exercée par les moyens de piratage et de cryptanalyse de pointe qu’ont certaines
organisations voire des particuliers.

La fonction de hachage MD5 est une extension de l’algorithme MD4. Il est


légèrement plus lent mais plus robuste que son prédécesseur. Le MD5 a été étudié car du fait
de la rapidité exceptionnelle du MD4, les risques d'attaques cryptanalitiques réussies étaient
devenues « limites ». Le MD5 permet un meilleur compromis entre la rapidité et la
probabilité d'une sécurité ultime.

L'algorithme du message-digest 5 fournit une empreinte d'un message de taille 128


bits. Il est démontré que la difficulté d'obtenir avec deux messages la même empreinte est de
l'ordre de 2^64 opérations, et que la difficulté d'obtenir avec n'importe quel message une
empreinte pré-établie est de l'ordre de 2^128 opérations.

Il est, toutefois, un algorithme relativement nouveau et davantage d'analyse sur sa


sécurité est bien évidemment justifiée, comme c'est le cas pour n'importe quelle nouvelle
proposition de la sorte.

44
___________________________________________________________________Annexe I

Rôle et Utilité de chaque couche du modèle OSI

A. Les couches basses

1. La couche physique

La couche physique fournit les moyens mécaniques, électriques, fonctionnels et


procéduraux nécessaires à l’activation, au maintien et à la désactivation des connexions
physiques destinées à la transmission de bits entre deux entités de liaison de données. Sa
fonction principale est le transport des informations.

2. La couche liaison de donnée

La couche liaison de donnée fournit les moyens fonctionnels et procéduraux


nécessaires à l’établissement, au maintient et à la libération des connexions de liaison de
données entre entités du réseau. Elle détecte et corrige, si possible, les erreurs dues au
support physique et signale à la couche réseau les erreurs irrécupérables. Elle supervise le
fonctionnement de la transmission et définit la structure syntaxique des messages, la manière
d’enchaîner les échanges selon un protocole normalisé ou non.

3. La couche réseau :

La couche réseau assure toutes les fonctionnalités de relais et d’amélioration de


services entre entité de réseau, à savoir : l’adressage, le routage, le contrôle de flux, la
détection et correction d’erreurs non réglées par la couche liaison de donnée

4. La couche transport

La couche transport assure un transfert de données transparents entre entités de


session et en les déchargeant des détails d’exécution. Elle a pour rôle d’optimiser l’utilisation
des services de réseau disponibles afin d’assurer au moindre coût les performances requises
par la couche session.

B. Les couches hautes

Les couches session, présentation et application constituent les couches hautes du


modèle OSI et offrent des services orientés vers les utilisateurs.

5. La couche session

La couche session fournit aux entités de la couche présentation les moyens


d’organiser et synchroniser les dialogues et les échanges de données.

6. La couche présentation

La couche présentation s’occupe de la syntaxe et de la sémantique des informations


transportées en changeant notamment de la représentation des données.

7. La couche application

La couche application donne au processus d’application le moyen d’accéder à


l’environnement OSI et fournit tous les services directement utilisables par l’application, à
savoir :
Le transfert d’informations.
L’allocation de ressources.
L’intégrité et la cohérence des données accédées.
La synchronisation des applications coopérantes.
_________________________________________________________________Annexe II

Eléments mathématiques pour la cryptographie

Le but de ce paragraphe est de donner les quelques notions de base d’arithmétique,


qui sont nécessaire quand on parle de cryptographie. Tout en bien précisant que ce ne sont
que des notions, mais à l’heure actuelle les prés requis mathématiques pour faire la
cryptographie sérieusement est d’un autre niveau.

a. Les nombres premiers

On ne considère que l’ensemble N entiers naturels.


Définition : Un nombre premier p est un nombre différent de 1 qui n’admet pas d’autres
diviseurs que 1 et lui-même. Un nombre qui n’est pas premier est appelé nombre composé.

Théorème 1 : Tout nombre admet au moins un facteur premier.


Théorème 2 : L’ensemble des nombres premiers est infini.
Théorème 3 : Tout entier peut se décomposer en produit de facteurs premiers.

Le deuxième théorème s’interprète sur le plan cryptographique comme l’existence de


grands nombres premiers. Ainsi en 1963, le plus grand nombre premier était 286243-1, soit un
nombre de 30 000 chiffres. Le record actuel est de un million de chiffres.

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 :

a ≡ b[n] ou a ≡ b * (mod n).

Théorème : Si x ≡ x’ [n] et y ≡ y’[n] alors x+y ≡ x’+y’[n] et xx’ ≡ yy ’[n].


c. Exponentiation modulo n.

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.

On a les identités suivantes


a2k ≡ (a2) k (mod n) et a2k+1 ≡ (a2) k* a * (mod n).
On peut choisir de remplacer a2 par son reste modulo n, chaque fois que cela permet de
simplifier le calcul.

Exemple : Calculons 21024 modulo 23, on a :

21024 = (22)512 = (42)256 = (162)128


Et donc :
21024 = 3 128 *(mod 23)
Puisque : 162 = 256 et 256 ≡ 3 * (mod 23).

On peut continuer le calcul en remarquant que :


312= (32)64 = (92)328,
Et puisque 81 ≡ 12 * (mod 23), on a maintenant :

21024 ≡ 1232 (mod 23).

Le reste du calcul donne :

21024 ≡ (122)16 (mod 23)


≡ (62)8 (mod 23)
≡ (132)4 (mod 23)
≡ (82)2 (mod 23)
≡ 182 (mod 23)
≡ 2 (mod 23)
________________________________________________________________Annexe III

Procédure de cryptage et de décryptage avec le RSA

Voici comment procéder :

Prendre 2 nombres premiers au hasard: p = 29, q = 37

Calculer n = pq = 29 * 37 = 1073

Choisir e au hasard tel que e n'ait aucun facteur en commun avec (p-1) (q-1):

(p-1)(q-1) = (29-1) (37-1) = 1008

Prendre e = 71

Choisir d tel que 71*d *mod 1008 = 1

On trouve d = 1079

On a maintenant les clés :

• La clé publique est (e, n) = (71,1073) (=clé d'encryptage)


• La clé privée est (d, n) = (1079,1073) (=clé de décryptage)

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:

726 976 767 900


(on complète avec des zéros)

Ensuite encrypter chacun de ces blocs:

726^71 * mod 1073 = 436


976^71 * mod 1073 = 822
767^71 * mod 1073 = 825
900^71 * mod 1073 = 552

Le message encrypté est 436 822 825 552.

Pour décrypter, on utilise d :

436^1079 * mod 1073 = 726


822^1079 * mod 1073 = 976
825^1079 * mod 1073 = 767
552^1079 *mod 1073 = 900

C'est à dire la suite de chiffre 726976767900.

On retrouve notre message en clair 72 69 76 76 79 : 'HELLO'.


_____________________________________________________Liste des abréviations

DH Diffie-Hellman

DSA Digital Signature Algorithm

DSS Digital Signature Standard

e-mail electronic mail

ID Identity

IDEA International Data Encryption Algorithm

ISO International Standardizing Organization

MD5 Message Digest 5

NIST National Institute of Standard and Technology

NSA National Security Agency

OSI Open System Interconnection

PHP Personal Home Page

RAM Random Access Memory

RSA Rivest Shamir Adelman

rol X, s Rotation circulaire de X par la gauche de s positions de bit.

SHA-1 Secure Hash Algorithm

TCP/IP Transmission Control Protocol / Internet Protocol

Complément de bit de X.

X+Y Opération OR entre X et Y.

X⊕Y Opération XOR entre X et Y.


_______________________________________________________Listes des Figures

Figure 1-1 : Cryptage et décryptage........................................................ 3


Figure 1-2 : Cryptage conventionnel…………………………………... 5
Figure 1-3 : Cryptage à clé publique…………………………………... 6
Figure 1-4 : Les sept couches du modèle OSI…………………………. 8
Figure 1-5 : Communication entre les couches 8

Figure 2-1 : Un annuaire représenté comme une table de hachage…. 16


Figure 2-2 : Résolution des collisions par chaînage………………....... 21
Figure 2-3 : Résolution des collisions par adressage ouvert et
sondage linéaire ……………………………………………. 23
Figure 2-4 : Accès à une adresse par l’intermédiaire d’une fonction
de hachage ………………………………………………….. 23
Figure 2-5 : Hachage statique …………………………………………. 24
Figure 2-6 : Hachage dynamique ……………………………………… 24
Figure 2-7 : Hachage extensible ……………………………………….. 25
Figure 2-8 : Insertion par doublement du répertoire............................ 25
Figure 2-9 : Insertion sans doublement ………………………………. 25
Figure 2-10 : Hachage linéaire ………………………………………….. 26
Figure 2-11 : Insertion de T11 ………………………………………….. 27
Figure 2-12 : Insertion de T12 ………………………………………….. 27
Figure 2-13 : Insertion avec débordement ……………………………... 28
Figure 2-14 : Principe d’hachage d’un message ……………………….. 28
Figure 2-15 : Vérification de l’intégrité d’un texte par son hachage … 29
_____________________________________________ Références bibliographiques

[1] http://www.laurent.flaum.free.fr

[2] Cours de « Téléinformatique », E551, 5ème Année, Département Electronique,


ESPA, 2005-2006.

[3] http://fr.wikipedia.org/wiki/Fonction_de_hachage

[4] Cours de « Structure de donnée », 4ème Année, Département Electronique, ESPA,


2003-2004.

[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

Titre : HACHAGE DE DONNEES APPLIQUE A LA CRYPTOGRAPHIE :


MESSAGE DIGEST 5

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.

Mots-clés : algorithme, bits, clé, cryptage, cryptographie, décryptage,


données, empreinte, hachage, information, MD5, réseau.

Rapporteur : M. ANDRIAMANANTSOA Guy Danielson

Adresse : Lot II C 70 Mandrosoa Ambohijatovo ANTANANARIVO 101

Vous aimerez peut-être aussi