Entropie des mots de passe : comment mesurer et maximiser la solidité de vos mots de passe
On vous a probablement dit qu’un « mot de passe fort » doit contenir des majuscules, des chiffres et des caractères spéciaux. Mais P@$$w0rd! respecte toutes ces règles — et il peut être craqué en moins d’une seconde.
La vraie mesure de la solidité d’un mot de passe n’est pas le type de caractères utilisés. C’est l’entropie : un concept issu de la théorie de l’information qui quantifie le degré d’imprévisibilité de votre mot de passe.
Dans ce guide, vous apprendrez exactement comment fonctionne l’entropie, comment la calculer, et comment générer des mots de passe véritablement difficiles à craquer.
Qu’est-ce que l’entropie d’un mot de passe ?
L’entropie d’un mot de passe mesure son degré d’imprévisibilité, exprimé en bits. Chaque bit supplémentaire d’entropie double le nombre de tentatives nécessaires à un attaquant pour le craquer par force brute.
Imaginez des dés. Un dé à 6 faces a environ 2,6 bits d’entropie par lancer — seulement 6 résultats possibles. Un dé à 20 faces a environ 4,3 bits — plus de faces signifie plus d’incertitude.
Les mots de passe fonctionnent de la même manière : plus de caractères possibles (un « dé » plus grand) et plus de caractères dans le mot de passe (plus de « lancers ») augmentent l’entropie.
C’est pourquoi l’entropie est une mesure plus scientifique que les règles de complexité. Un mot de passe peut sembler complexe (Tr0ub4dor&3) mais avoir une faible entropie car il suit des schémas prévisibles. À l’inverse, une phrase de passe d’apparence simple (correct horse battery staple) peut avoir une entropie élevée car elle est tirée d’un vaste réservoir de possibilités.
La formule : comment calculer l’entropie
La formule est simple :
E = L × log₂(R)
Où :
- E = entropie en bits
- L = longueur du mot de passe (nombre de caractères)
- R = taille du réservoir (nombre de caractères possibles par position)
Tailles des réservoirs de caractères
| Type de caractères | Taille (R) | Bits par caractère |
|---|---|---|
| Minuscules uniquement (a-z) | 26 | 4,70 |
| Minuscules + chiffres | 36 | 5,17 |
| Majuscules + minuscules + chiffres | 62 | 5,95 |
| ASCII imprimable complet | 94 | 6,55 |
| Liste de mots Diceware | 7 776 | 12,92 par mot |
Calculer en code
// Calculate password entropy in JavaScript
const entropy = (length, poolSize) =>
length * Math.log2(poolSize);
entropy(8, 26); // → 37.60 bits (minuscules uniquement)
entropy(12, 62); // → 71.45 bits (alphanumériques)
entropy(16, 94); // → 104.87 bits (jeu complet)
import math
def entropy(length: int, pool_size: int) -> float:
return length * math.log2(pool_size)
entropy(8, 26) # → 37.60 bits
entropy(12, 62) # → 71.45 bits
entropy(16, 94) # → 104.87 bits
Important : cette formule suppose que chaque caractère est choisi uniformément au hasard. Si un humain choisit le mot de passe en utilisant des schémas ou des mots du dictionnaire, l’entropie réelle est bien inférieure au maximum théorique.
Combien d’entropie faut-il ?
La réponse dépend de ce que vous protégez et de la vitesse de l’attaquant.
Les GPU modernes peuvent tester plus de 10¹² (mille milliards) de hachages par seconde contre des algorithmes rapides comme MD5. Voici ce que cela signifie en pratique :
| Entropie (bits) | Solidité | Temps de craquage à 10¹² essais/s | Recommandé pour |
|---|---|---|---|
| < 40 | Faible | Moins d’1 seconde | À ne jamais utiliser |
| 40–59 | Passable | Secondes à heures | Comptes jetables |
| 60–79 | Fort | Jours à siècles | Comptes courants |
| 80–99 | Très fort | Millénaires+ | E-mail, banque |
| 100+ | Extrême | Au-delà de la mort thermique de l’univers | Clés de chiffrement, mots de passe maîtres |
Un mot de passe de 16 caractères utilisant l’ensemble ASCII imprimable donne environ 105 bits d’entropie — bien dans la catégorie « extrême ». Vous pouvez en générer un instantanément avec notre Générateur de mots de passe, qui affiche l’analyse d’entropie en temps réel.
Ce que dit le NIST (mise à jour 2024)
Le NIST SP 800-63B, mis à jour en 2024, a apporté des changements significatifs :
- Suppression des règles de complexité obligatoires (plus de caractères spéciaux imposés)
- Suppression du changement périodique obligatoire
- Relèvement du minimum à 15 caractères (contre 8 auparavant)
- Accent sur le filtrage contre les mots de passe compromis connus
- Priorité à la longueur et au hasard plutôt qu’à la complexité
Ces changements confirment ce que les mathématiques de l’entropie montrent depuis toujours : la longueur et le hasard comptent plus que la variété des caractères.
Pourquoi la longueur l’emporte sur la complexité
Voici les calculs. Considérons deux façons d’augmenter l’entropie d’un mot de passe de 12 caractères :
Option A — garder 12 caractères, passer de l’alphanumérique (62) à l’ASCII complet (94) :
- 12 × log₂(94) - 12 × log₂(62) = 78,66 - 71,45 = +7,21 bits
Option B — garder l’alphanumérique (62), ajouter un caractère (12 → 13) :
- 13 × log₂(62) - 12 × log₂(62) = 77,40 - 71,45 = +5,95 bits
Ajouter un seul caractère apporte presque autant d’entropie que de changer de jeu de caractères. Ajoutez-en deux et vous dépassez le gain.
Prenons P@$$w0rd! (9 caractères). Il utilise le jeu ASCII complet mais est trop court. Pire, il suit le schéma prévisible du « leet speak » que les attaques par dictionnaire couvrent déjà, donc son entropie effective est bien inférieure aux 59 bits théoriques.
Conclusion : pour des mots de passe véritablement aléatoires, augmenter la longueur est plus efficace qu’ajouter des types de caractères. Mais le vrai ennemi est la prévisibilité, pas la brièveté.
Phrase de passe vs mot de passe aléatoire
| Dimension | Mot de passe aléatoire | Phrase de passe (Diceware) |
|---|---|---|
| Exemple | kX#9mP$2vL!nQ7wR | correct horse battery staple |
| Bits par unité | 6,55 par caractère | 12,92 par mot |
| Longueur pour ~78 bits | 12 caractères | 6 mots |
| Mémorisation | Difficile | Facile |
| Saisie mobile | Pénible | Facile |
| Idéal pour | Gestionnaire de mots de passe | Mot de passe maître, connexions mémorisées |
Comment fonctionne Diceware
Diceware utilise une liste de 7 776 mots (6⁵ = 7 776). Vous lancez cinq dés pour sélectionner chaque mot, ce qui donne exactement 12,92 bits d’entropie par mot.
Quatre mots donnent ~51 bits ; six mots donnent ~77 bits.
Lequel choisir ?
- Pour les mots de passe stockés dans un gestionnaire : utilisez des mots de passe aléatoires de 16+ caractères avec le jeu complet. Vous ne les tapez jamais manuellement. Notre Générateur de mots de passe peut en générer jusqu’à 50 d’un coup.
- Pour votre mot de passe maître : utilisez une phrase Diceware de 5-6 mots. Assez mémorable pour une saisie quotidienne avec 64-77 bits d’entropie.
- Pour les clés API et tokens : utilisez
openssl randoucrypto.randomBytes()pour une entropie maximale sans contrainte de mémorisation.
En pratique : outils et code pour développeurs
Voici les méthodes les plus courantes pour générer des secrets à haute entropie :
Navigateur (Web Crypto API)
// Cryptographically secure password generation
function generatePassword(length, charset) {
const array = new Uint32Array(length);
crypto.getRandomValues(array);
return Array.from(array, v => charset[v % charset.length]).join('');
}
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*';
generatePassword(16, chars);
// → 'kX#9mP$2vL!nQ7wR' (random each time)
Node.js
const crypto = require('crypto');
const token = crypto.randomBytes(32).toString('base64url');
// → 'Ql2Hj8xK9mNp3rVw5tYz7uBa0cEf4gIk' (43 chars, 256 bits)
Python
import secrets
token = secrets.token_urlsafe(32) # 256 bits of entropy
password = secrets.token_hex(16) # 128 bits, hex format
Ligne de commande
# 192 bits of entropy, base64 encoded
openssl rand -base64 24
# 256 bits, hex encoded
openssl rand -hex 32
Comparaison d’entropie par méthode
| Méthode | Longueur de sortie | Entropie (bits) |
|---|---|---|
| UUID v4 | 36 caractères | 122 |
openssl rand -base64 24 | 32 caractères | 192 |
| 16 caractères ASCII complet | 16 caractères | 105 |
| 6 mots Diceware | ~30 caractères | 78 |
| 4 mots Diceware | ~20 caractères | 52 |
N’utilisez jamais
Math.random()pour quoi que ce soit lié à la sécurité. Il utilise un PRNG non cryptographique — la sortie est prévisible si un attaquant connaît la graine. Utilisez toujourscrypto.getRandomValues()dans le navigateur oucrypto.randomBytes()dans Node.js.
Stockage des mots de passe : pourquoi l’entropie seule ne suffit pas
Même un mot de passe de 128 bits ne vaut rien si le serveur le stocke en hachage MD5 brut. Lors d’une fuite de base de données, les attaquants peuvent tester des milliers de milliards de hachages MD5 par seconde sur un seul GPU.
C’est là qu’interviennent les algorithmes de hachage lents. Ils rendent délibérément chaque tentative coûteuse :
| Algorithme | Vitesse GPU | Ralentissement effectif |
|---|---|---|
| MD5 | ~10 milliards/s | Base (à ne pas utiliser) |
| SHA-256 | ~5 milliards/s | ~2× plus lent |
| bcrypt (cost=12) | ~5/s | ~2 milliards× plus lent |
| argon2id | ~2/s | ~5 milliards× plus lent |
Le paramètre cost de bcrypt est particulièrement élégant : chaque incrément double le travail requis. Un cost de 12 signifie 2¹² = 4 096 tours de hachage, ajoutant effectivement 12 bits d’« entropie de stockage » à l’entropie propre du mot de passe.
Le modèle de double protection : les mots de passe à haute entropie protègent contre la force brute hors ligne, tandis que le hachage lent protège contre les fuites de bases de données. Les deux sont nécessaires.
Pour en savoir plus sur les algorithmes de hachage, consultez notre comparaison MD5 vs SHA-256 et essayez le Générateur de hachage MD5.
Mythes courants sur les mots de passe
« Changez votre mot de passe tous les 90 jours »
Les directives NIST de 2024 recommandent explicitement de ne pas imposer de changements périodiques. Les rotations fréquentes poussent les utilisateurs à choisir des mots de passe plus faibles et prévisibles. Ne changez que si vous avez des raisons de croire qu’il a été compromis.
« a→@, e→3 renforce la sécurité »
Les substitutions leet speak sont parmi les premiers schémas testés par les attaques par dictionnaire. Remplacer a par @ dans password n’ajoute pratiquement aucune entropie.
C’est le vrai hasard — pas les substitutions astucieuses — qui augmente l’entropie.
« 8 caractères avec des symboles suffisent »
Même avec les 94 caractères ASCII, 8 caractères ne donnent que 52 bits d’entropie. À 10¹² essais par seconde, c’est craqué en environ 75 minutes.
Utilisez au minimum 12 caractères, 16+ pour les comptes importants.
« Plus ça a l’air complexe, plus c’est sûr »
La complexité visuelle et l’entropie sont deux choses différentes. Tr0ub4dor&3 semble complexe mais suit un schéma prévisible. mfYq8kL2nR semble plus simple mais a une entropie plus élevée car il est véritablement aléatoire.
Pour une stratégie de sécurité complète, consultez nos Fondamentaux de la sécurité web.
FAQ
Combien de bits d’entropie sont considérés comme sûrs ?
Pour la plupart des comptes en ligne, 60-80 bits offrent une protection solide. Pour les cibles de haute valeur comme les mots de passe maîtres ou les clés de chiffrement, visez 100+ bits. Chaque bit supplémentaire double l’effort requis par l’attaquant.
Ajouter des caractères spéciaux augmente-t-il toujours l’entropie ?
Seulement si les caractères sont choisis aléatoirement dans le réservoir complet. Les substitutions prévisibles comme @ pour a ou ! à la fin n’ajoutent pratiquement aucune entropie car les attaquants les intègrent déjà dans leurs dictionnaires.
Quelle est l’entropie d’une phrase Diceware de 4 mots ?
Avec la liste standard de 7 776 mots, chaque mot contribue 12,92 bits. Quatre mots donnent environ 51,7 bits — suffisant pour un usage peu sensible. Pour les comptes importants, utilisez 5-6 mots (64-78 bits).
Math.random() est-il sûr pour générer des mots de passe ?
Non. Math.random() est un générateur de nombres pseudo-aléatoires non cryptographique. Utilisez crypto.getRandomValues() dans le navigateur ou crypto.randomBytes() dans Node.js pour la génération aléatoire sécurisée.
Comment le facteur cost de bcrypt affecte-t-il la sécurité ?
Chaque incrément du facteur cost de bcrypt double le calcul nécessaire pour hacher (et donc pour craquer par force brute) un mot de passe. Un cost de 12 signifie 2¹² = 4 096 itérations, ajoutant effectivement 12 bits de difficulté en plus de l’entropie intrinsèque du mot de passe.
Qu’a changé le NIST dans ses directives 2024 sur les mots de passe ?
Le NIST SP 800-63B a supprimé les exigences de complexité obligatoires (caractères spéciaux imposés, mélange de casses) et la rotation périodique. Les nouvelles directives favorisent des mots de passe plus longs (15+ caractères recommandés), le filtrage contre les bases de mots de passe compromis, et l’autorisation de tous les caractères imprimables, y compris les espaces.
Points clés à retenir
- Entropie = L × log₂(R) — chaque bit supplémentaire double le nombre de tentatives nécessaires
- Longueur > complexité — ajouter un caractère est plus efficace qu’élargir le jeu de caractères
- Utilisez les API crypto —
crypto.getRandomValues()oucrypto.randomBytes(), jamaisMath.random() - Gestionnaire de mots de passe + génération aléatoire est la meilleure pratique pour la plupart des gens
- Le côté serveur compte aussi — utilisez bcrypt ou argon2, jamais MD5 pour stocker les mots de passe
Prêt à générer un mot de passe à haute entropie ? Essayez notre Générateur de mots de passe — il affiche l’analyse d’entropie en temps réel pour chaque mot de passe créé.