Comment fonctionne le hashage ?
On l'utilise pour les mots de passes et d'autres vérifications de sécurité, mais qu'est-ce qu'un hash ?

Améliorez vos compétences en dev !
Des cours complets, créés par des experts, pour tous niveaux et accessibles en illimité grâce à notre abonnement !
19,99€/mois

Le hashage consiste à faire passer une donnée d'une taille arbitraire dans une fonction qui va la transformer en une donnée d'une taille définie.
Pour les mots de passe par exemple, la taille de sortie est souvent plus grande que l'entrée.
Contrairement au chiffrement, une fonction de hashage est destructive (ou unilatéral) car on perd de la donnée d'origine, il est impossible de revenir en arrière.
Concept simplifié
Prenons une fonction de hashage théorique la plus simple possible, disons que notre fonction prend une chaine de caractère en entrée, et retourne sa taille :
f(x) => taille(x)
Ce qui nous donne "bonjour" => 7, "password" => 8 et "chien" => 5
Pourquoi utiliser un hash ?
Pour les mots de passe
On voit bien dans l'exemple précédent, qu'une fois passé dans la fonction, le mot de passe n'est plus récupérable, donc si on le stocke dans une base de données, il est "protégé".
Impossible de récupérer le mot "bonjour" à partir du simple chiffre 7
Pour l'authentification, il suffira de hasher en direct le mot de passe fourni par l'utilisateur et le comparer au hash stocké dans la base, car la fonction de hashage doit toujours retourner le même hash pour la même donnée en entrée.
Pour simplifier/représenter des données
Un hash est une représentation simplifiée d'une donnée. Il existe beaucoup d'algorithmes différent, mais la bonne pratique veut que deux hashs, issus de deux données quasi-similaires à quelques bits près, soient eux, très différents.
Exemple théorique: le hash du mot "hello" égal "ABCDEF" tandis que le hash de "hellp" égal "ZYXWV"
Ce qui signifie que la comparaison entre les hashs, plutôt que les données d'origines est plus optimisée, car les premiers bits du hash sont déjà différents.
Et dans le cas de comparaison de gros fichier, le hash utilisé sera beaucoup plus léger que l'entièreté des données contenues, donc la comparaison sera plus efficace, c'est ce que l'on appelle le "checksum".
Quels algorithmes ?
Vous l'aurez compris, le problème avec notre fonction de hashage simplifiée, ce sont les collisions. Car en l'occurence, le hash de "bonjour" est égal à 7 mais le hash de "baisers" est aussi égal à 7, c'est ce que l'on appelle une collision, est c'est l'une des problématiques du hashage.
En pratique, les fonctions de hashage cryptographique génère des hash assez longs, parfois plus longs que la valeur d'entrée, par exemple le hash du mot "bonjour" avec l'algorithme SHA-256 est égale à :
2cb4b1431b84ec15d35ed83bb927e27e8967d75f4bcd9cc4b25c8d879ae23e18
alors que le hash du mot "baisers" est égal à :
73beed7425bd31551890c0727f4b169cd99b5c708fa8d50a713747e0878e2580
La complexité d'une algorithme de hashage réside dans son ratio entre le temps d'exécution et le nombre de collisions possibles, par exemple la famille d'algorithme SHA est plus rapide à s'exécuter, mais son nombre de collision possible est plus élevé que d'autres algorithme comme le Bcrypt.
À moins que la contrainte de temps d'exécution soit une grosse problématique, il est recommandé d'utiliser l'algorithme BCrypt pour les mots de passe par exemple.
Mais il existe également d'autres algorithmes encore plus rapides, car les collisions sont moins critiques, comme le hash MD5 qui est très rapide et permet de faire du checksum de manière efficace !
J'espère que cet article vous aura été utile, et à bientôt sur le blog !
Les articles les plus populaires du blog
Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !
Voir la sélection 🚀Recevez les articles de la semaine par e-mail pour ne rien manquer !
S'abonner à la newsletter 📧
À propos de l'auteur
Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.
Aujourd'hui je suis aussi formateur/coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !
Photo par Max Delsid sur Unsplash