Introduction : Pourquoi les mots de passe comptent toujours
Depuis les premiers jours des systèmes informatiques en temps partagé dans les années 1960, les mots de passe ont été le principal gardien entre les utilisateurs et leurs données. Fernando Corbató, le chercheur du MIT qui a été l'un des pionniers du Compatible Time-Sharing System (CTSS), a introduit les mots de passe en 1961 — non pas comme mesure de sécurité, mais simplement pour donner à chaque utilisateur un espace de fichiers privé. Plus de six décennies plus tard, les mots de passe restent le mécanisme d'authentification le plus répandu sur Internet, protégeant tout, des comptes de messagerie aux systèmes bancaires.
Pourtant, la personne moyenne réutilise des mots de passe sur des dizaines de sites, choisit des modèles prévisibles comme Ete2024! et a peu d'intuition sur ce qui rend un mot de passe vraiment impossible à deviner. Cet article propose une plongée technique approfondie dans la sécurité des mots de passe : comment l'entropie est calculée, pourquoi le caractère aléatoire est essentiel, ce que disent les dernières directives et comment adopter des habitudes qui vous protègent réellement.
Comprendre l'entropie : la mathématique de l'imprévisibilité
L'entropie dans la théorie de l'information mesure l'imprévisibilité. Pour les mots de passe, elle répond à la question : combien de tentatives un attaquant aurait-il besoin, en moyenne, pour craquer ce mot de passe ?
La formule est :
H = L × log₂(N)
Où :
- H = entropie en bits
- L = longueur du mot de passe (nombre de caractères)
- N = taille du jeu de caractères (pool de caractères possibles)
Tailles des jeux de caractères
| Jeu de caractères | Taille (N) | Bits par caractère |
|---|---|---|
| Minuscules uniquement | 26 | 4,7 bits |
| Minuscules + majuscules | 52 | 5,7 bits |
| Alphanumérique | 62 | 5,95 bits |
| ASCII imprimable complet | 94 | 6,55 bits |
| ASCII étendu / Unicode | 128+ | 7+ bits |
Exemples d'entropie
| Mot de passe | L | N | Entropie (H) |
|---|---|---|---|
password |
8 | 26 | 37,6 bits |
P@ssw0rd |
8 | 94 | 52,4 bits |
k9$mQzLw |
8 | 94 | 52,4 bits |
xK#7pL!qR2@v |
12 | 94 | 78,6 bits |
correct horse battery staple |
28 | 26 | 131,9 bits |
Un mot de passe avec plus de 128 bits d'entropie est considéré comme informatiquement impossible à casser par force brute avec la technologie actuelle. Pour situer le contexte, le cryptage AES 256 bits — considéré comme inviolable — correspond à un espace de clés de 2²⁵⁶ combinaisons.
CSPRNG vs Math.random() : Pourquoi la source de hasard est cruciale
Tous les nombres aléatoires ne se valent pas. La différence entre un générateur de mots de passe sécurisé et un générateur non sécurisé réside souvent dans la source de hasard.
Math.random() — Inadapté à la sécurité
La fonction intégrée de JavaScript Math.random() est un Générateur de Nombres Pseudo-Aléatoires (PRNG). Elle est rapide et statistiquement uniforme, mais elle n'est pas sécurisée sur le plan cryptographique. Son état interne peut être déduit de sa sortie, ce qui signifie qu'un attaquant observant suffisamment de valeurs pourrait prédire les valeurs futures.
// ❌ Non sécurisé — ne PAS utiliser pour la génération de mots de passe
function insecurePassword(length) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
}
crypto.getRandomValues() — Le bon outil
L'API Web Cryptography fournit crypto.getRandomValues(), qui tire l'entropie du Générateur de Nombres Pseudo-Aléatoires Sécurisé sur le plan Cryptographique (CSPRNG) du système d'exploitation. Sous Linux, il s'agit de /dev/urandom ; sous Windows, il s'agit de CryptGenRandom. Ces sources collectent l'entropie à partir d'événements matériels (frappes au clavier, E/S disque, synchronisation réseau) et sont considérées comme cryptographiquement fortes.
// ✅ Sécurisé — utilise CSPRNG
function generatePassword(length, charset) {
const array = new Uint32Array(length);
crypto.getRandomValues(array);
return Array.from(array, (val) => charset[val % charset.length]).join('');
}
const charset =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?';
console.log(generatePassword(16, charset));
// Exemple de sortie : "aK7!xQz2#Lp9@Wm5"
Note sur le biais modulo : L'exemple ci-dessus présente un léger biais modulo lorsque
charset.lengthne divise pas uniformément 2³². Pour un code de production, utilisez l'échantillonnage de rejet pour éliminer totalement ce biais.
Jeux de caractères et complexité
La plupart des générateurs de mots de passe proposent des commutateurs pour :
- Minuscules (a–z) : 26 caractères
- Majuscules (A–Z) : 26 caractères
- Chiffres (0–9) : 10 caractères
- Symboles (!@#$%^&*…) : ~32 caractères
La combinaison des quatre donne un pool de 94 caractères ASCII imprimables. Chaque caractère supplémentaire dans votre mot de passe multiplie l'espace de recherche par 94. Un mot de passe de 12 caractères parmi 94 caractères possibles offre 94¹² ≈ 4,76 × 10²³ combinaisons — un nombre astronomique, même pour un matériel spécialisé.
Pourquoi la longueur l'emporte sur la complexité
De nombreux systèmes anciens exigeaient « au moins une majuscule, un chiffre, un symbole » mais autorisaient les mots de passe de 8 caractères. Un mot de passe de 8 caractères parmi 94 caractères n'a que 94⁸ ≈ 6 × 10¹⁵ combinaisons — craquable en quelques heures avec un cluster de GPU moderne. Passer à 16 caractères de minuscules pures (26¹⁶ ≈ 4,4 × 10²²) offre en réalité plus d'entropie qu'un mot de passe complexe de 8 caractères.
NIST SP 800-63B : Directives modernes sur les mots de passe
La Publication spéciale 800-63B du NIST (Directives sur l'identité numérique, 2017, mise à jour en 2024) a renversé de nombreuses hypothèses largement répandues sur les mots de passe :
Ce que le NIST recommande désormais
- Longueur minimale de 8 caractères pour les mots de passe choisis par l'utilisateur ; 15 caractères pour les mots de passe générés par machine.
- Privilégier la longueur sur la complexité — les règles de complexité obligatoires (majuscule + chiffre + symbole) n'augmentent pas significativement la sécurité et frustrent les utilisateurs.
- Vérifier les mots de passe par rapport aux listes de violations — rejeter les mots de passe trouvés dans des violations de données connues (par exemple, via l'API HaveIBeenPwned).
- Pas de rotation forcée périodique à moins d'une preuve de compromission — la rotation forcée conduit à des schémas prévisibles comme
Ete2024→Automne2024. - Pas de règles de composition — ne pas exiger de types de caractères spécifiques ; autoriser plutôt tous les caractères imprimables, y compris les espaces.
- Limiter le débit et verrouiller les tentatives d'authentification pour empêcher les attaques en ligne.
Ces directives reflètent la réalité selon laquelle le comportement humain sous contraintes de complexité est prévisible : les gens ajoutent ! pour répondre aux exigences de symboles, ne mettent en majuscule que la première lettre et utilisent des années faciles à retenir.
Gestionnaires de mots de passe : la solution pratique
La plus grande amélioration de sécurité que la plupart des gens peuvent apporter est d'adopter un gestionnaire de mots de passe. Un gestionnaire de mots de passe :
- Génère des mots de passe forts et uniques pour chaque compte
- Les stocke dans un coffre-fort crypté (généralement AES-256)
- Remplit automatiquement les identifiants dans les navigateurs et les applications
- Vous alerte en cas de mots de passe réutilisés ou compromis
Gestionnaires de mots de passe populaires
| Outil | Type | Caractéristique notable |
|---|---|---|
| Bitwarden | Open-source, cloud/auto-hébergé | Version gratuite, audité |
| 1Password | Commercial, cloud | Mode voyage, plans familiaux |
| KeePass | Open-source, local | Totalement hors ligne, écosystème de plugins |
| KeePassXC | Open-source, local | Fork multiplateforme de KeePass |
| Dashlane | Commercial, cloud | Surveillance du dark web |
Le mot de passe maître de votre gestionnaire de mots de passe doit être une phrase de passe longue et mémorable — le seul mot de passe que vous mémorisez.
Phrases de passe et méthode Diceware
Pour les mots de passe que vous devez retenir (comme le mot de passe maître de votre gestionnaire), les phrases de passe sont bien supérieures aux courtes chaînes complexes.
Comment fonctionne Diceware
La méthode Diceware, créée par Arnold Reinhold en 1995, utilise des dés physiques pour générer des sélections de mots véritablement aléatoires :
- Obtenez la liste de mots longue de l'EFF (7 776 mots, indexés de 11111 à 66666 en base 6)
- Lancez 5 dés pour obtenir un nombre à 5 chiffres (ex: 2-4-1-3-6 → 24136)
- Recherchez le mot correspondant (ex: "clump")
- Répétez 6 à 8 fois pour construire une phrase de passe
Une phrase de passe Diceware de 6 mots tirés de 7 776 mots possède :
H = 6 × log₂(7776) = 6 × 12,93 ≈ 77,6 bits
"correct horse battery staple" (popularisé par XKCD #936) contient 4 mots issus d'un vocabulaire commun de ~2 000 mots, ce qui donne ~44 bits d'entropie — illustratif mais trop court. Six mots ou plus de la liste Diceware complète constituent la recommandation pratique.
Attaques courantes contre les mots de passe
Comprendre les attaques vous aide à calibrer vos défenses.
Attaques par dictionnaire
Les attaquants utilisent des listes de mots — allant de millions à des milliards d'entrées — combinées à des mutations basées sur des règles (majuscules sur les premières lettres, ajout de chiffres, substitution de @ par a). Des outils comme Hashcat peuvent appliquer des milliers de règles de mutation par seconde. Tout mot de passe dérivable d'un mot de dictionnaire avec des substitutions simples est vulnérable.
Attaques par force brute
La force brute pure essaie chaque combinaison. Avec une plateforme GPU dédiée (8× RTX 4090), les vitesses de craquage pour les algorithmes de hachage courants sont :
| Algorithme de hachage | Vitesse (H/s) | Temps pour craquer 8 car. (jeu de 94) |
|---|---|---|
| MD5 | ~200 GH/s | ~8 heures |
| SHA-1 | ~70 GH/s | ~24 heures |
| bcrypt (coût 10) | ~184 kH/s | ~1 100 ans |
| Argon2id | ~1 kH/s | ~200 000 ans |
Ce tableau illustre pourquoi un hachage correct des mots de passe côté serveur est extrêmement important — mais aussi pourquoi un mot de passe aléatoire de 16 caractères résiste même au hachage MD5.
Tables Arc-en-ciel (Rainbow Tables)
Tables de correspondance hachage-mot de passe précalculées qui échangent du stockage contre de la vitesse. Totalement déjouées par le salage (salting) — l'ajout d'une valeur aléatoire unique à chaque mot de passe avant le hachage. Les algorithmes modernes comme bcrypt et Argon2 incluent le salage par conception.
Bourrage de comptes (Credential Stuffing)
Utilisation de paires nom d'utilisateur/mot de passe divulguées lors d'une violation pour attaquer d'autres services. La défense consiste à utiliser des mots de passe uniques par site — ce qui est le point fort des gestionnaires de mots de passe.
Pourquoi la génération de mots de passe par navigateur est plus sûre
Notre outil génère des mots de passe entièrement dans votre navigateur à l'aide de JavaScript. Aucune donnée ne quitte jamais votre appareil. Voici pourquoi c'est important :
- Pas de transmission au serveur — le mot de passe ne touche jamais un paquet réseau.
- Pas de journaux de serveur — il n'y a rien à assigner, à divulguer ou à pirater.
- Pas de dépendances tierces au moment de la génération — pas d'appels API, pas de scripts externes pendant la génération.
- Reproductible — vous pouvez inspecter le code source pour vérifier la logique.
Comparez cela aux générateurs côté serveur : même avec HTTPS, le mot de passe généré existe dans la mémoire du serveur, pourrait apparaître dans les journaux d'accès et repose entièrement sur la fiabilité de l'opérateur.
L'API Web concernée est simple :
// Le CSPRNG du navigateur — disponible dans tous les navigateurs modernes
const buffer = new Uint8Array(32);
self.crypto.getRandomValues(buffer);
// buffer contient maintenant 32 octets cryptographiquement aléatoires
Stockage des mots de passe : bcrypt, scrypt et Argon2
Lorsque les services stockent des mots de passe, ils ne doivent jamais stocker de texte brut ou de formes cryptées réversibles. L'approche correcte est une fonction de hachage de mot de passe (PHF) — une fonction lente et unidirectionnelle conçue spécifiquement à cet effet.
bcrypt
Conçu en 1999 par Niels Provos et David Mazières, bcrypt intègre un facteur de coût qui peut être augmenté à mesure que le matériel devient plus rapide. Un coût de 12 signifie 2¹² = 4 096 itérations de la configuration de clé Blowfish. C'est le standard aujourd'hui, largement pris en charge.
scrypt
Conçu par Colin Percival en 2009. Memory-hard — nécessite de grandes quantités de RAM en plus du temps CPU, ce qui rend les attaques GPU/ASIC coûteuses. Paramètres : N (coût CPU/mémoire), r (taille de bloc), p (parallélisation).
Argon2
Gagnant de la Password Hashing Competition (PHC) en 2015. Trois variantes :
- Argon2d : résistant aux GPU, vulnérable aux attaques par canal auxiliaire
- Argon2i : résistant aux canaux auxiliaires, moins résistant aux GPU
- Argon2id : hybride — le défaut recommandé
Argon2id avec m=65536 (64 Mo de mémoire), t=3 (3 itérations), p=4 (4 threads) est l'étalon-or actuel pour les nouvelles applications.
Authentification à deux facteurs : le complément essentiel
Même un mot de passe parfait peut être volé par hameçonnage, enregistreurs de frappe ou violations de données. L'authentification à deux facteurs (2FA) garantit qu'un mot de passe volé seul ne suffit pas.
Méthodes 2FA (de la plus faible à la plus forte)
| Méthode | Mécanisme | Résistance aux attaques |
|---|---|---|
| SMS OTP | Code envoyé par SMS | Hameçonnable, vulnérable au SIM-swapping |
| TOTP (Google Authenticator) | Code à 6 chiffres basé sur le temps | Hameçonnable en temps réel |
| Notification push | Approuver/refuser sur le téléphone | Hameçonnable (fatigue MFA) |
| Clé matérielle (FIDO2/WebAuthn) | YubiKey, Passkey | Résistant au hameçonnage |
| Clés d'accès (Passkeys) | Clé cryptographique liée à l'appareil | Le plus fort ; remplace les mots de passe |
Les clés matérielles FIDO2/WebAuthn et les passkeys sont résistantes au hameçonnage par conception car le défi-réponse cryptographique est lié au domaine exact. Un faux site ne peut pas rejouer l'identifiant.
Résumé des meilleures pratiques
- Utilisez un gestionnaire de mots de passe — générez et stockez des mots de passe uniques pour chaque compte.
- Minimum 16 caractères pour les comptes sensibles ; 12 minimum partout ailleurs.
- Activez la 2FA — de préférence FIDO2/WebAuthn ou TOTP ; évitez les SMS quand c'est possible.
- Ne réutilisez jamais les mots de passe — une violation sur un site ne doit pas compromettre les autres.
- Vérifiez HaveIBeenPwned — vérifiez que vos adresses e-mail et vos mots de passe ne sont pas apparus dans des violations connues.
- Utilisez une phrase de passe pour votre mot de passe maître — 6 mots Diceware ou plus, mémorable, extrêmement forte.
- Méfiez-vous du « théâtre de la complexité » —
P@ssw0rd123est bien plus faible quexK8mLq2vZnRj. - Priorisez la longueur — 20 minuscules aléatoires (94 bits) battent 12 caractères complexes (78 bits).
- Mettez à jour immédiatement les mots de passe compromis — ne changez que lorsqu'il y a compromission, pas selon des calendriers arbitraires.
- Utilisez des outils de vérification des violations — des services comme Firefox Monitor ou 1Password Watchtower surveillent vos comptes en permanence.
Foire aux questions (FAQ)
Q : Quelle doit être la longueur de mi mot de passe ? Pour la plupart des comptes, 16 caractères aléatoires parmi un jeu complet de 94 caractères fournissent environ 105 bits d'entropie — ce qui est amplement suffisant. Pour les comptes de grande valeur (banque, e-mail, gestionnaire de mots de passe), utilisez 20 caractères ou plus ou une phrase de passe de 6 mots.
Q : Est-il sûr d'utiliser un générateur de mots de passe en ligne ? Seulement si toute la génération se passe côté client (dans votre navigateur) sans communication avec le serveur. Notre outil répond à cette exigence. Vérifiez en consultant l'onglet réseau du navigateur — aucune requête ne doit être lancée lorsque vous générez un mot de passe.
Q : Dois-je inclure des symboles ? Les symboles augmentent l'entropie par caractère (6,55 bits contre 5,17 bits pour les minuscules seules), donc oui — si le site le permet. Cependant, un mot de passe plus long sans symboles peut égaler l'entropie d'un mot de passe plus court avec symboles.
Q : Les ordinateurs quantiques peuvent-ils casser mon mot de passe ? L'algorithme de Grover donne aux ordinateurs quantiques une accélération quadratique pour les attaques par force brute, divisant de fait par deux les bits de sécurité. Une clé de 256 bits devient sécurisée à 128 bits. Pour les mots de passe, cela signifie que des mots de passe d'une entropie de 256 bits seraient nécessaires pour une résistance quantique à long terme — ce qui est réalisable avec un mot de passe de 40 caractères parmi 94 (262 bits). Pour la plupart des menaces actuelles, une entropie de 128 bits (20 caractères aléatoires) est plus que suffisante.
Q : Quel est le problème avec les mots de passe mémorables comme JAimeLaPizza2024 ?
Ils sont vulnérables aux attaques par dictionnaire. Le moteur de règles d'Hashcat génère trivialement des millions de variations de phrases courantes avec du leetspeak, des majuscules et des chiffres ajoutés. Même les mots de passe apparemment personnels suivent des modèles que les attaquants modélisent statistiquement.
Q : Comment cet outil génère-t-il le hasard ?
Nous utilisons crypto.getRandomValues() — l'API Web Cryptography appuyée par le CSPRNG de votre système d'exploitation. C'est la même source de hasard utilisée par TLS/SSL, la génération de clés SSH et d'autres opérations cryptographiques dans votre navigateur.