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