Hachage : Qu'est-ce que le Work Factor ?
Le work factor est un paramètre utilisé lors du hachage de données telles que des mots de passe. Découvrez son rôle et ses caractéristiques principales.
Le hachage de données vient avec son lot de vocabulaire : salage, brute force, rainbow table… dans cet article, concentrons-nous sur le work factor !
Qu’est-ce que le hachage ?
Le hachage est un processus qui transforme une donnée d’entrée (texte, image, fichier, etc.) en une chaîne de caractères unique appelée « empreinte » ou « hash ».
Cette empreinte est toujours de taille fixe, quelle que soit la longueur de la donnée d’entrée.
Par exemple, le texte « toto » haché avec l’algorithme MD5
donne le résultat f71dbe52628a3f83a77ab494817525c6
.
Le hachage est un processus très largement utilisé pour le stockage sécurisé des mots de passe.
Vous souhaitez en savoir plus sur le hachage ?
Hacher… mais pas trop vite !
Bien que cela puisse paraître paradoxal, il est important de limiter la performance des algorithmes de hachage. Etrange dit comme ça… 🤔
Si les algorithmes de hachage offrent une sécurité précieuse pour les données sensibles, de trop bonnes performances peuvent involontairement faciliter les attaques par force brute et la création de tables arc-en-ciel.
Ralentir l’attaquant en cas de brute force
Les attaques par force brute consistent à essayer un grand nombre de combinaisons possibles pour trouver un mot de passe ou une clé de chiffrement.
Un algorithme de hachage trop rapide permettrait à un attaquant de tester un nombre démesuré de combinaisons en un temps réduit, augmentant ainsi les chances de succès.
Ralentir la création de tables arc-en-ciel
Les tables arc-en-ciel sont des pré-calculs qui associent dans un tableau des mots de passe à leurs hachages correspondants.
Exemple simplifié de Rainbow Table basée sur l’algorithme bcrypt
:
Mot de Passe | Hash (bcrypt ) |
---|---|
admin | $2y$10$1Zma3zZtxvvRMpm9cCJT/.FxhAPjygS7QTjOGQULGwqKWuIQ64Mry |
azerty | $2y$10$G1Tlapk3koRLN85cC2p4jeVusIiGIshoHY.ihUjPq3TWQWolqUsr6 |
123456789 | $2y$10$cKSnPNHJejCp2oK.cE4myOgSkobdUSI31AoPv5evCTnBt8Z8jiUu2 |
… | … |
Un algorithme de hachage trop rapide rend la génération de ces tables plus efficace, car le calcul des hachages est moins coûteux en temps.
Limiter la performance : un équilibre délicat
Il est crucial de trouver un équilibre entre la performance et la sécurité des algorithmes de hachage.
- Un algorithme trop lent peut affecter les performances du système.
- Un algorithme trop rapide peut compromettre la sécurité.
Cet équilibre se traduit par l’intégration au sein de l’algorithme de hachage d’un « facteur de travail » (souvent désigné par le terme anglais « work factor »).
Le Work Factor
Rôle du Work Factor
Le rôle du work factor, parfois appelé « facteur de coût » (« cost factor »), est de limiter volontairement la performance des algorithmes de hachage.
Cela consiste à intégrer au sein des algorithmes de hachage une fonction de ralentissement, qui augmente intentionnellement le temps de calcul du hachage, rendant la génération du hash plus longue et par conséquent les attaques plus difficiles.
Ce ralentissement se traduit la plupart du temps par une augmentation du nombre de passages dans la fonction de hachage. On parle aussi de nombre d’itérations.
Généralement, ce work factor est exprimé sous la forme d’un nombre entier. Plus le nombre est élevé, plus le processus de hachage est lent.
C’est par exemple le cas avec bcrypt
ou argon2
, pour lesquels un workfactor de 10 signifie que l’algorithme effectuera 2^10 itérations, soit 1024 itérations.
On pourrait par exemple imaginer les durées d’exécution suivantes pour ces algorithmes de hachage, en fonction du work factor déterminé :
Work Factor | Durée du hash (sec) |
---|---|
4 | 0.025 s |
5 | 0.05 s |
6 | 0.1 s |
7 | 0.2 s |
8 | 0.4 s |
9 | 0.8 s |
10 | 1.6 s |
… | … |
Un work factor bien défini doit permettre de :
- Ralentir sufissament la génération automatisée de millions de combinaisons par un script
- Sans pour autant nuire à l’expérience utilisateur de quelqu’un se connectant par exemple à son compte.
Imaginez que la génération d’un hash prenne, considérant les caractéristiques de votre machine, 0.1s.
Cela reste très court et ne nuira pas à votre expérience de connexion sur une app et pourtant cela découragera de nombreux attaquants, car pour hacher ne serait-ce que 10 000 mots de passe, il leur faudrait 1000 s (0.1 * 10 000), soit 16 min 40 sec… 🥵🥱
Et pour générer davantage de mots de passe ?
A titre de comparaison, si vous voulez générer en brute force toutes les combinaisons possibles de mots de passe jusqu’à 10 caractères avec :
Type | Nombre de caractères |
---|---|
Lettres min (a-z ) | 26 |
Lettres maj (A-Z ) | 26 |
Chiffres (0-9 ) | 10 |
Chaque caractère peut donc prendre une valeur parmi 62 (26+26+10).
Il vous faudra tester… 839 299 365 868 340 224 combinaisons (62^10), soit 2 661 396 992,93 années de brute force.
Et on parle bien ici de mot de passe relativement simples, sans caratères spéciaux…
Utiliser un work factor : 3 avantages
Un facteur de travail élevé offre plusieurs avantages en termes de sécurité, flexibilité et évolutivité.
Sécurité
Le work factor rend les attaques par force brute plus longues et plus coûteuses, dissuadant ainsi les attaquants.
De la même manière, la génération de table arc-en-ciel est elle aussi entravée par les ralentissements causés par le facteur de travail.
Flexibilité
Le facteur de travail définit pour un algorithme de hachage est variable, il peut être ajusté en fonction des besoins spécifiques et des ressources disponibles.
Cette flexibilité permet de trouver un compromis optimal en sécurité et rapidité.
Evolutivité
Avec l’augmentation de la puissance de calcul des ordinateurs, il est important pour les technologies de s’adapter.
Une fonction mettant 100 ms en moyenne à s’éxécuter sur un PC basique actuel en mettra moins dans les années à venir.
La bonne nouvelle, c’est que les algorithmes de hachage utlisant un work factor se moquent bien du problème puisqu’il suffira d’augmenter sa valeur pour que la génération mobilise plus de ressource.
Un facteur de travail élevé garantit ainsi une sécurité pérenne.
Le facteur de travail joue un rôle crucial dans la sécurisation des données sensibles, en particulier les mots de passe. En choisissant un facteur de travail approprié et en utilisant des algorithmes de hachage robustes, nous mettons toutes les chances de notre côté pour protéger efficacement nos systèmes contre les attaques malveillantes.