Parlons Hash
les développeurs ont tendance à se tourner vers des méthodes de hachage
traditionnelles telles que SHA ou MD5 pour stocker des mots de passe sans trop savoir
de quoi il retourne exactement.
Les fonctions de hachage permettent de calculer l’empreinte (signature) d’une donnée
sans être réversibles. Ces fonctions sont généralement utilisées pour vérifier l’intégrité ou
l’unicité d’une donnée, à la suite d’un téléchargement par exemple.
Voyons ce que donne le Hachage ‘standard’
https://www.fileformat.info/tool/hash.htm
ex : Hachons le mot Renard
Fonction de hachage cryptographique
Les fonctions de hachage cryptographique sont conçues pour résister aux attaques, elles
ont quatre propriétés importantes.
• Il est facile de calculer l’empreinte d’un message donné
• Il est impossible de générer un message depuis son empreinte
• Il est impossible de changer un message sans modifier son empreinte
• Il est impossible de trouver deux messages différents avec la même empreinte
En plus des applications classiques, ces fonctions cryptographiques ont la particularité de
pouvoir être utilisées pour l’authentification ou la signature numérique.
Stockage des mots de passe
Ne stockez pas les mots de passe en clair.
Un peu d’histoire
Il fut un temps où il était acceptable de stocker l’empreinte de hachage cryptographique
d’un mot de passe avec MD5 ou SHA-1.
En effet ces fonctions cryptographiques ont toutes les propriétés empêchant un attaquant
de connaître le mot de passe en clair à partir du hash.
Un peu plus tard il fut recommandé d’utiliser le nouveau standard SHA-2 et y ajouter un
salage pour éviter les attaques par table arc-en-ciel.
Cette dernière méthode pour protéger des mots de passe n’est pas mauvaise, cependant
ce n’est pas forcément la bonne méthode non plus…
Talon d’Achille
Une fonction de hachage est conçue pour être rapide, elle doit pouvoir donner l’empreinte
de très gros fichier en prenant le moins de temps possible.
Cette propriété rend les fonctions de hachage traditionnelles plus vulnérables aux attaques
par dictionnaire ou par brute-force basé principalement sur la puissance de calcul.
Plus une fonction de hachage sera performante et plus il sera plus rapide pour un attaquant
de parcourir l’espace de clé et de retrouver des mots de passe.
Benchmark de Cassage d’un mot de passe de 9 caractères comprenant des
lettres majuscules, des lettres minuscules et des chiffres
Fonction Temps maximum
MD5 24 Heures
SHA-1 75 Heures
SHA-256 7 Jours
scrypt 354 Années
Bcrypt 3173 Années
Vulnérabilité
Voyons qu’il est extrêmement facile de remonter jusqu’au mot de passe grâce à un
Hash standard alors que l’algorithme….n’est pas réversible :
https://md5decrypt.net/
Faites le test avec vos mots de passe habituels, on ne sait jamais….
Mais en modifiant le message
Technique du ‘grain de sel’
Cette technique est notamment utilisée par UNIX et permet de se protéger en cas de vol des
mots de passe ‘hashés’. Comme une même chaîne donne toujours le même hash on pourrait
à partir d'un hash retrouver le mot de passe en clair. La constitution d'un tel dictionnaire
prend du temps et doit être faite à l'avance, toutefois elle est envisageable. La parade se
fait par l'introduction d'un grain de sel qui va "déformer" le hash.
Un grain de sel, ou "salt", en cryptographie, est appliqué durant le processus de hachage
pour éliminer la possibilité d'attaques par dictionnaires (hachages enregistrés dans une
grande liste et comparés).
En d'autres termes, un grain de sel est une petite donnée additionnelle qui renforce
significativement la puissance du hachage pour le rendre beaucoup plus difficile à cracker.
L'utilisation d'un grain de sel rend ces dictionnaires ‘inutiles’.