La différence fondamentale entre hachage et cryptage est la suivante :
Le hachage va retourner une « empreinte » ou « signature »
des données fournies en entrée alors que la fonction de
cryptage va retournée un texte différent de celui fourni en entrée, texte qui pourra être reconstitué par celui
qui possède la clé de cryptage.
Un cryptage peut donc permettre de retrouver le texte original alors qu'un hachage, ne permet pas de
reconstituer le texte d’origine.
Les deux fonctions ont leur utilité mais le but de leur utilisation est totalement différent.
Le hachage ou fonction de hachage en anglais hash function, est une fonction
Qu’est-ce qu’une fonction
Exemple d’une fonction :
Lorsque vous additionnez 2 nombres, par exemple 5 + 2 et vous retournez 7.
Vous venez d’utiliser une fonction qui à partir de 2 nombres fournis en entrée retourne
la somme de ces 2 nombres. Addition (a, b) => a + b
qui, à partir d'une donnée fournie en entrée, calcule une empreinte numérique.
L’empreinte numérique est une suite de caractères de taille limitée et souvent fixe qui dépend de la fonction
mais est totalement indépendante du texte fourni en entrée.
Ainsi, si on fait le hachage d’un fichier texte de 300 pages, la fonction de hachage pourra retourner
une suite de 32 caractères par exemple. De même si on hache un seul caractère, on obtiendra également
une suite de 32 caractères. La longueur des données passées en entrée et qui vont être hachées
n’influence en rien la longueur de la valeur retournée par la fonction de hachage. En fait la longueur de la
valeur retournée par la fonction de hachage dépend de la fonction elle-même.
Par contre la valeur retournée sera totalement différente même si un seul caractère d’un fichier de 10 000 000 de caractères est modifié. On comprend alors l’utilité de cette fonction qui permet de retourner une signature ou une empreinte unique d’un fichier.
Comme le hachage permet de retourner une chaine unique de caractères pour un fichier ou un texte fourni en entrée,
cette fonction peut être utilisée pour signer des documents et ainsi vérifier qu’ils n’ont pas été modifiés.
C'est pour cela que l'on parle d'empreinte ou signature qui est propre à une personne.
L'utilisation principale de la fonction de hachage est donc la comparaison.
C'est pourquoi elle est souvent utilisée pour chiffrer des mots de passe d’où la confusion entre hachage et
cryptage, certains imaginent à tord que le mot de passe est crypté et que l’on peut récupérer le mot de passe
en le décryptant et ainsi vérifier sa validité. Dans les faits, une fois le mot de passe saisi, on le hache
et on compare le résultat avec celui se trouvant dans la base de données et si les deux signatures sont
identiques, c'est que le mot de passe est valide.
Il faut savoir quand même que certaines fonctions de hachage retournent la même empreinte pour des
données différentes, c'est ce qu'on appelle la collision. C'est le cas pour le MD5 et ces fonctions
ne doivent pas être utilisées pour hacher des mots de passe, elles restent par contre valables pour
signer des documents. En effet, si on veut modifier discrètement un document par exemple, on n'a aucune
chance d'obtenir la même signature, seul un texte totalement aléatoire et ne voulant rien dire,
pourrait éventuellement retourner la même signature.
En théorie, NON. En théorie, car il n'existe pas de fonction qui à partir du texte
haché, retourne le texte original. Une fois haché, il est impossible de créer
une fonction permettant de récupérer le texte original. Si on parle d'empreinte, c'est parce qu'on
peut comparer le résultat du hachage à l'empreinte d'un être humain. Si vous
récupérez une empreinte sur une scène de crime, vous ne pouvez retrouver celui qui a
laissé l'empreinte que si son empreinte est stockée dans la base de données. Pour un texte
haché c'est exactement la même chose. En effet en admettant que l'on connaisse la fonction ayant
servie à hacher un mot de passe, on créé une table qui d'un côté stocke un
texte et de l'autre côté stocke son hachage. On stocke ainsi plusieurs millions voir plusieurs
milliards de possibilités. Il suffit ensuite de rechercher dans la table, le hachage d'un mot de passe
pour vérifier s'il se trouve dans la table et s'il existe une correspondance, alors on
récupère le texte associé et on a ainsi trouvé le mot de passe.
D'où l'importance de choisir un mot de passe sécurisé car si votre mot de passe est 1234 ou
admin ou Michel ou azerty ou password, ce mot de passe sera récupéré en moins de un
dixième de seconde car vous pouvez être sûr qu'il se trouve dans la table.
Pour contrer ce genre d'attaque il existe ce qu'on appelle le salage. Le salage consiste à ajouter un
texte au mot de passe avant de le hacher
(Voir explication sur Wikipedia)
et rend ce genre d'attaque plus difficile à opérer.
Malheureusement pour vous, c'est le site qui ajoute ou pas un sel au mot de passe, voire qui hache ou pas, le mot
de passe. Il existe encore des sites qui stockent les mots de passe en clair d'où l'importance de ne pas
saisir le même login et le même mot de passe pour tous les sites. Car si c'est le cas et qu'un site
peu sécurisé se fait pirater sa base, le pirate aura à la fois votre login et votre
mot de passe et il pourra aller sur Amazon et tenter de se connecter avec ces données puis sur les sites
de banque et ainsi de suite, vous risquez alors de voir votre compte en banque vidé en moins de 24h00. Et
ne pensez pas que les sites de banque sont sécurisés, la Banque de France utilisait le mot de
passe 123456 pour un de ses systèmes informatiques (
Voir information sur le journal Les Echos), ça laisse rêveur.
Le cryptage ou chiffrement est totalement différent du hachage car son but est de rendre incompréhensible
un texte aux yeux de tous sauf bien sûr aux yeux de ceux auxquels il est destiné.
Contrairement au hachage, le chiffrement d'un texte nécessite de pouvoir être déchiffrer.
La fonction de cryptage est donc une fonction réversible
Qu’est-ce qu’une fonction réversible
Exemple d’une fonction réversible :
Soit la fonction Carré(a, a) qui retourne a x a soit a².
Connaissant a², il est facile de connaitre a en utilisant la fonction Racine(a²) qui retourne a.
La fonction Racine est donc la fonction inverse de la fonction Carré
.
Le chiffrement n’est pas une science nouvelle, Jules César l’utilisait déjà
pour adresser ses messages secrets. Le cryptage a surtout été utilisé par les armées
pour adresser des messages qui ne devaient pas être compris par les ennemis.
Le cryptage s’est perfectionné au fil du temps et les Allemands avaient créé la fameuse machine
Enigma servant à chiffrer et déchiffrer les messages.
Aujourd’hui il existe beaucoup d’application de messageries cryptées, l’informatique permettant de crypter
très facilement. De même, lorsque vous êtes sur un site Internet en https les données que
vous faites transiter sur le web, sont cryptées et en cas d’interception, elles ne pourront pas être lues.
La science du chiffrement, s'appelle la cryptographie. A l'opposé, la science qui consiste
à casser le chiffrement s'appelle la cryptanalyse.
On est aujourd’hui bien loin du chiffrement utilisé par César qui consistait simplement à remplacer chaque caractère d’un texte par un caractère décalé de 3 caractères, ce qui donne ceci :
Par la suite, la méthode à été utilisé avec un décalage arbitraire.
Si on connait la valeur du décalage il est facile de décoder le texte.
Ce genre de chiffrement est appelé chiffrement mono alphabétique car une lettre est
toujours remplacée par la même lettre. Ainsi la lettre codée F par César,
représentait toujours la lettre C en clair.
La méthode de chiffrement mono alphabétique est simple et aussi facilement déchiffrable par
l'attaque dite d'analyse fréquentielle. Pour un texte long en français, par exemple on sait que la lettre
la plus utilisée est le E, on recherche donc la lettre la plus utilisée dans le texte et si c’est le H,
il est fort probable que la valeur du décalage est 3. Si ce n'est pas la bonne valeur, c'est-à-dire
que le texte décodée ne donne rien, on choisi le A, lettre la plus utilisée ensuite
et on trouve alors la valeur 6 et ainsi de suite.
Pour contrer cette attaque, Blaise de Vigenère a créé au XVIe siècle, le
chiffrement poly alphabétique. Ce genre de chiffrement reste toujours un chiffrement par substitution
(une lettre en clair est remplacée par une lettre codée) mais une même lettre du message
clair est remplacée par une lettre qui dépend de la position de cette lettre dans le texte et
n'est donc généralement pas identique. Une même lettre codée n'ayant plus
nécessairement la même valeur, l'attaque par analyse fréquentielle ne fonctionne plus.
Le chiffre de Vigenère n'a été percé qu'au XIXe siècle.
Au XXe siècle, l'utilisation de machines électromécaniques comme la machine Enigma
utilisée par les Allemands pendant la seconde guerre mondiale a permis de chiffrer de façon
beaucoup plus complexe. Aujourd'hui les ordinateurs permettent de chiffrer à des niveaux
extrêmement complexes.
Retour à la page sur l'outil de contrôle MD5.