Encodage, chiffrement ou hachage ? Différences et explications

PrimFX Boris ('PrimFX') Le 17 août 2020

Le hachage (hashing)

Principe

Le chiffrement, évoqué précédemment, est une technique bidirectionnelle. Cela signifie que l’on est capable de chiffrer puis déchiffrer des données.

Le hachage est, quant à lui, unidirectionnel : il permet de générer une chaîne de caractères unique (généralement de longueur fixe) sans possibilité de la “dé-hacher” ultérieurement. Cette technique est généralement utilisée :

  • Pour vérifier l’intégrité de données : si l’on hache deux fichiers avec le même algorithme et que le résultat est le même, cela indique que les deux fichiers sont identiques. Lorsque l’on télécharge des fichiers sur internet, il arrive parfois qu’un hash soit donné avec le fichier : cela vous permet de vérifier que le fichier n’a pas été modifié (e.g. par des hackers) sur le serveur depuis lequel vous l’avez téléchargé ! Ci-dessous se trouve une capture d'écran de la page de téléchargement du logiciel Audacity avec son hash de vérification (i.e. SHA256 Checksum).

Exemple de Checksum sha256 Audacity

  • Dans les systèmes d’authentification : de par son caractère unidirectionnel, le hachage est la principale technique utilisée pour sécuriser les mots de passes d’utilisateurs dans des bases de données en ligne. En effet, même si un hacker parvient à récupérer une base de données d’utilisateurs et de mots de passe, il n’aura que la forme hachée (et non claire) des mots de passes.
 

On parle de forme « claire » pour les données d’origine, avant qu’elles ne soient hachées.

Exemple

SHA256 est un algorithme de hachage répandu. Le principe est simple : si l’on donne un texte à hacher à cet algorithme, il produira un hash de 256 bits de long.

Par exemple, SHA256(“motdepasse”) donnera le hash suivant : “967520ae23e8ee14888bae72809031b98398ae4a636773e18fff917d77679334”.

Ainsi, dans le cas d’un système d’authentification, si le mot de passe d’un utilisateur est “motdepasse”, c’est sa forme hachée qui devra être stockée dans la base de données (et surtout pas la forme claire). Lorsque cet utilisateur tentera de se connecter, puisqu’une même entrée produira toujours la même sortie, il faudra donc hacher le mot de passe entré par l’utilisateur et comparer les deux hashs (i.e. celui généré et celui stocké en base de données) afin de voir s’ils correspondent ou non !

Vulnérabilités

Comme expliqué précédemment, un des principes de base du hachage et qu’une même entrée produira toujours le même résultat. Ainsi, bien qu’on ne puisse pas, en théorie, partir des données hachées pour obtenir le texte original, il est assez commun de trouver ce que l’on appelle des dictionnaires de correspondance capables de réaliser cette opération : il s’agit de la principale vulnérabilité des algorithmes de hachage.

Les dictionnaires fonctionnent de la façon suivante : des ordinateurs sont utilisés pour générer continuellement les hashs de nombreux mots (e.g. les mots du dictionnaire, les mots de passe contenant des chiffres et lettres jusqu’à un certain nombre de caractères, etc.). Chaque hash généré sera stocké dans une base de données avec son mot d’origine correspondant. Finalement, dès qu’un hash est recherché, le système n’aura qu’à regarder dans sa base de données si une entrée (i.e. mot d’origine) existe déjà pour ce hash ou non.

Plus concrètement, si vous vous rendez sur un site de hachage/déhachage comme celui-ci et que vous hachez puis dé-hachez le mot “hello”, il est extrêmement probable que le dé-hachage fonctionnera, puisque “hello” est un mot très banal (qui aura donc certainement déjà été haché et enregistré dans un dictionnaire de correspondance). Par contre, si vous refaites ce test avec une chaîne plus complexe (e.g. “aze943$`^_-tst830”), alors il est très probable que le dé-hachage ne trouve aucune correspondance d’origine.

 

Cela devrait également vous inciter, en tant qu’utilisateur, à toujours utiliser des mots de passes complexes 😉

Pour contrer ce problème de dictionnaires, une technique communément utilisée est celle du « grain de sel » (salt en anglais). Elle consiste à ajouter une chaîne complexe avant chaque hash généré. Ainsi, sans connaissance de ce salt, il n’est plus aussi élémentaire de dé-hacher un hash à l’aide d’un dictionnaire !

 

Par exemple, si un utilisateur souhaite s’inscrire avec le mot de passe “1234” dans notre système, on n’exécutera pas sha256(“1234”) mais sha256(salt + “1234”) où salt sera, par exemple, “HizNo*6?f(R,heN” (i.e. une chaîne complexe).

De plus, il est assez fréquent que les algorithmes de hachage évoluent et que de nouvelles tendances, plus sécurisées, émergent. Par exemple, l’algorithme md5 largement utilisé il y a quelques années est aujourd’hui totalement obsolète face à sha256, qui lui-même sera peut-être un jour dépassé.

 

A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 21 ans et je suis passionné d'informatique. Actuellement en MSc Computer Science à Trinity College Dublin, j'ai co-fondé en 2019 l'entreprise Single Quote et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles sur PrimFX.com 😃