Les merveilles du hachage !

Les fonctions de hachage cryptographiques sont un outil informatique omniprésent utilisé pour tout : de la vérification d’identité à la protection des fichiers en passant par la détection de malwares.

Un « hash » est un algorithme qui transforme n’importe quel bloc de données, en une ligne de nouveaux caractères d’une longueur déterminée. Peu importe la longueur des données rentrées, le même type de fonction de hachage créera toujours un hash de la même longueur.

D’après un générateur de hash SHA-1 en ligne  (SHA-1 est l’une des fonctions de hachage les plus utilisées en informatique, avec MD 5 et SHA-2), le hash pour mon nom, Brian, est : 75c450c3f963befb912ee79f0b63e563652780f0. Comme n’importe quel autre Brian pourra vous le confirmer, « brain » (« cerveau » en anglais) est une version erronée courante de ce nom. Tellement courante, que j’ai même eu le droit à un permis de conduire « Brain Donohue », mais c’est une toute autre histoire. Le hash SHA-1 pour « brain », selon mon générateur de SHA-1 en ligne est : 8b9248a4e0b64bbccf82e7723a3734279bf9bbc4.

Comme vous pouvez le voir, ces deux résultats sont complètement différents, malgré le fait que la différence entre le nom Brian et le mot faisant référence à l’organe central de notre système nerveux dépend uniquement de la combinaison de deux voyelles consécutives (« ia » versus « ai »). Pour aller encore plus loin, si je rentre mon nom sans la majuscule de la première lettre, le générateur SHA-1 produira un autre résultat complètement différent :

760e7dab2836853c63805033e514668301fa9c47.

Vous remarquerez que tous ces hashs contiennent 40 caractères, ce qui n’est pas surprenant étant donné qu’à chaque fois le mot rentré est de 5 lettres. Néanmoins, encore plus curieusement, si l’on rentre dans le générateur de hash tous les mots de cet article, on obtient le hash suivant :

db8471259c92193d6072c51ce61dacfdda0ac3d7. Ces 2387 caractères (espaces inclus) sont condensés (tous comme les mots de 5 caractères cités précédemment) en 40 caractères. Vous pourriez rentrer l’intégralité de l’œuvre de William Shakespeare dans le générateur de hash SHA-1 et de nouveau obtenir un résultat de 40 caractères. De plus, il est impossible d’obtenir le même hash avec des données différentes.

Voici une photo de Wikimedia Commons qui illustre le même concept pour ceux qui préfère avoir un aperçu visuel :

520px-Hash_function_fr.svg

À quoi servent les hashs ?

Très bonne question. Malheureusement, la réponse est que les hashs sont utilisés pour plein de choses.

Pour vous et moi, la forme de hash la plus courante est liée aux mots de passe. Par exemple, si vous oubliez le mot de passe d’un service en ligne, vous devrez certainement réaliser une réinitialisation du mot de passe. Quand vous réinitialisez ce dernier, normalement, vous ne recevrez pas ce dernier en texte clair. Le site en question stocke un hash pour ce mot de passe. D’ailleurs, ce service (sauf si vous utilisez un mot de passe super simple dont le hash est super connu) n’a aucune idée de ce qu’est votre vrai mot de passe.

Pour être clair, si vous recevez votre mot de passe en texte clair, cela signifie que le service en ligne que vous utilisez ne hache pas votre mot de passe et c’est inacceptable.

Vous pouvez réaliser le texte vous-même avec un générateur de hash en ligne inversé. Si vous créez le hash d’un mot de passe faible tel que « motdepasse » ou « 123456 » et que vous rentrez ce hash dans un générateur inversé, il y a de grandes chances pour que le générateur de hash reconnaisse le hash de ces mots de passe. Dans mon cas, le générateur de hash inversé a reconnu les hashs pour « brain » et « Brian » mais pas le hash du texte de cet article. L’intégrité d’un hash dépend donc complètement des données rentrées qui peuvent être littéralement n’importe quoi.

Sur ce point, selon un rapport de TechCrunch publié à la fin du mois dernier, le célèbre service de stockage dans le Cloud, Dropbox, a empêché un de ses utilisateurs de partager du contenu protégé par le Digital Millennium Copyright Act (DMCA). Cet utilisateur a twitté qu’il avait été empêché de publié du contenu et Twitter a explosé pendant un temps avec des utilisateurs criant que Dropbox devait lire le contenu des utilisateurs malgré qu’ils affirment le contraire dans le politique de confidentialité.

Dropbox, bien évidemment, n’a pas analysé le contenu de ses utilisateurs. Comme c’est précisé dans l’article de TechCrunch, ce qui a dû se passer ici, c’est que le propriétaire des droits d’auteur a passé son fichier protégé (peut-être du contenu numérique pour une chanson ou un film) et la passé à travers une fonctionnalité de hachage. Il a ensuite pris le hash et a ajouté cette série de 40 caractères à une sorte de liste de refus pour les hashs de contenu protégé par des droits d’auteur. Quand un utilisateur partage du contenu protégé par des droits d’auteur, les scanners automatiques de Dropbox détectent le hash contenu dans la liste de refus et l’empêche d’être partagé.

Vous pouvez donc hacher des mots de passe et des médias mais à quoi d’autre les fonctions de hachage peuvent-elles servir ? De nouveau, la réalité est que les fonctions de hachage servent à beaucoup de chose, à bien plus de choses que je ne pourrais l’imaginer, le comprendre ou même sur lesquelles je pourrais écrire. Néanmoins, il existe une utilisation du hachage que nous apprécions particulièrement, ici à Kaspersky Daily. Le hachage est très utilisé pour la détection des malwares par les sociétés antivirus telles que Kaspersky Lab.

Il existe un certain nombre de listes de refus de hashs qui sont, pour la plupart, accessibles au public

Tout comme les studios de cinéma et les labels de musique qui créent des listes de refus de hash pour protéger les données protégées par des droits, il existe un certain nombre de listes de refus de hashs qui sont, pour la plupart, accessibles au public. Ces listes de refus de hashs de malware – ou signatures malwares – contiennent les hashs des malwares ou les hashs de composants de malwares reconnaissables et plus petits. D’un côté, si un utilisateur trouve un fichier suspect, il peut rentrer le hash de ce dernier dans l’une des nombreuses bases de données de hashs de malwares en ligne, et il saura ainsi si le fichier est malveillant ou non. D’un autre côté, une manière pour les moteurs antivirus de reconnaitre et de bloquer les malwares est de comparer les hashs des fichiers à leurs propres répertoires de signatures de malwares (elles aussi publiques).

Les fonctions de hashs cryptographiques sont également utilisées pour assurer ce qu’on appelle l’intégrité des messages. En d’autres termes, vous pouvez être certain que vos communications ou que vos fichiers n’ont pas été falsifiés en examinant le hash qui a été généré avant et après la transmission. S’ils sont identiques, la transmission est alors considérée comme authentique.

Conseils