Cryptographie - le hashage

Temps de lecture estimé : 7 minutes

Le hashage est une fonction cryptographique qui permet de créer une empreinte numérique d'un texte ou d'un fichier. Ces algorithmes de hashage, dont un des plus utilisés aujourd'hui est l'algorithme SHA (Secure Hash Algorithm), ont de nombreuses applications dans la sécurisation des sites web et des communications.

C'est quoi le hashage ?

Un algorithme de hashage est une fonction d'encryption à sens unique. Ce qui veut dire que quand on calcule un hash à partir d'un texte de départ, il n'existe pas de fonction de déchiffrement qui permet de retrouver le texte d'origine. On a complètement perdu l'information d'origine.


L'algorithme de hashage génère toujours une sortie de la même longueur, quelle que soit la longueur de l'entrée, que ce soit un simple mot ou un fichier de plusieurs Mb. Par exemple SHA-256 produit toujours un nombre de 256 bits (= 32 bytes). Il est généralement écrit en hexadécimal, donc sur 64 caractères.


Il produit toujours le même résultat quand on lui donne la même entrée, mais par contre il donne des sorties complètement différentes dès qu'on change un tout petit peu l'entrée. Quelques exemples avec SHA-256 :

blanquette de veau

6414723ec143023c026c5f7736eb74e780254f42b5c5dbf729b944ee6380f9f3

shogun

083280ea67396bde2df5fde1839b36f48ab94fc6fbd978983b9a50cd59466a05

shogon

f58ca8891de032b4a6fad44c463747d77408b800b0f74ba4ef814bad8f091730

Pour ceux qui entendu parler de checksum, c'est un peu pareil. La différence c'est que les algorithmes de checksum (comme l'algorithme CRC) n'ont pas la même fonction : ils ont pour but de vérifier qu'il n'y a pas eu de modification 'accidentelle' dans un message ou un fichier lors d'un transfert. Ils ne protègent pas efficacement contre une modification malveillante, car il est assez facile de fabriquer un message avec un checksum donné.

A quoi ça sert ?

Sécuriser les mots de passe de vos comptes web

Quand vous vous connectez à votre compte sur un site web, vous devez rentrer un login et un mot de passe. Le site web vérifie alors dans sa base de données que ce login existe, et que le mot de passe stocké correspond bien à celui que vous avez entré.


Dans les premiers temps de l'informatique, le mot de passe était stocké "en clair" dans la base de données. Comme il arrive que les sites soient hackés et la base de données volée, les hackers se retrouvent avec une liste directement utilisable de login/mot de passe qu'ils peuvent essayer sur plein d'autres sites. Et comme les gens ont tendance à souvent réutiliser les mêmes mots de passe, ça fait des ravages !

De nos jours, le mot de passe n'est normalement plus jamais stocké en clair : on stocke le hash du mot de passe ! Ca fonctionne tout aussi bien : lorsque vous rentrez votre mot de passe, le site le hashe et il compare le hash avec ce qu'il a stocké dans sa base de données.

Mais ça change tout pour le hacker qui accède à la base de données : à partir du hash il ne peut pas facilement retrouver le mot de passe d'origine. Ce qu'il peut faire c'est :

- soit tenter toutes les combinaisons (en anglais : "brute force")

- soit utiliser un dictionnaire de mots de passe couramment utilisés (genre la liste Rock You)


C'est pour ça qu'il faut utiliser des mots de passe uniques, longs et complexes (voir : Comment choisir un bon mot de passe ?).


Les bitcoins

Sans rentrer dans les détails, le bitcoin utilise une blockchain pour garder une trace infalsifiable de toutes les transactions entre comptes bitcoin. Les blocs qui constituent cette blockchain sont verrouillés par SHA-256d (un SHA-256 appliqué deux fois).


Les communications chiffrées

De nouveau, sans rentrer dans les détails, plusieurs protocoles de communication chiffrée utilisent les hash, mais combinés cette fois avec d'autres algorithmes d'encryption symétriques et asymétriques.


C'est le cas de HTTPS, qui vous permet de vous connecter sur des sites web de manière sécurisée.


C'est également le cas de PGP qui permet de signer et chiffrer des fichiers et des mails.


Quels sont les algorithmes existants ?

  • MD5 : vieil algorithme qui n'est plus sûr aujourd'hui
  • SHA-1 : vieil algorithme qui n'est plus sûr aujourd'hui
  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256, SHA-512/512)
  • SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512, SAHKE-128, SHAKE-256)
  • plein d'autres moins connus : RIPEMD, Crypt, GOST...


Si vous voulez vous amuser à tester les différents algorithmes de hashage, avec du texte ou avec des fichiers, voici un site web qui vous permet de les calculer en ligne : https://www.onlinewebtoolkit.com/hash-generator


Note : n'y envoyez aucune info confidentielle ! ;-)


Ce sont les algorithmes de la famille SHA-2 (par exemple SHA-256 ou SHA-512) qui sont les plus utilisés aujourd'hui. Le chiffre qui suit SHA représente la longueur en bits du hash résultat. Plus le hash est long, plus on a de hashes possibles, et donc moins on a de risque d'avoir 2 entrées qui ont le même hash. Pour info, le nombre de hashes possible avec un clé 256 bits (1 x 1077) est de l'ordre de grandeur du nombre d'atomes dans l'univers (19 x 1077).

En conclusion

Les algorithmes de hashage peuvent être considérés comme une empreinte numérique infalsifiable d'un texte ou d'un fichier.

Ils sont utilisés quand on a besoin de garantir l'intégrité d'un contenu (transactions bitcoins, communications chiffrées), mais ils ont aussi une utilité pour stocker des mots de passe de manière inutilisable pour des hackers qui accèderaient à la base de données du site web.


Oui mais vous me direz : et si les hackers utilisent des tables précalculées ? Ils n'ont qu'à faire le travail une fois et ensuite ils peuvent cracker tous les mots de passe de la planète ?


Trèèèèès bonne question !

Et ça tombe bien, ce sera justement l'objet du prochain article...   ;-)

Note : l'image d'illustration de Alyson McPhee sur Unsplash

Soyez le premier à commenter