En une phrase
Un générateur de mots de passe crée une chaîne de caractères tellement aléatoire qu'il est quasiment impossible pour un ordinateur de la deviner, même avec des milliards d'essais par seconde.
Le problème que ça résout
Nous, les humains, sommes des machines à reconnaître des motifs. On est doués pour trouver des raccourcis, voir des visages dans les nuages et retenir des mélodies. Par contre, on est absolument nuls pour créer de l'aléatoire.
Quand on nous demande de créer un mot de passe, notre cerveau se rabat sur ce qu'il connaît : les noms de nos animaux de compagnie (minou1), des dates importantes (AnnivMaman1965!), nos équipes de sport préférées (AllezLesBleus2024), ou des motifs sur le clavier (azerty12345). On croit être malin en remplaçant un o par un 0 ou en ajoutant un point d'exclamation à la fin, mais on ne fait que suivre un schéma un peu plus complexe, mais toujours prévisible.
C'était acceptable aux débuts de l'informatique. Mais avec l'explosion de la puissance de calcul, les attaquants ont automatisé le jeu de la devinette. Ils ont créé des outils pour essayer chaque mot du dictionnaire (une « attaque par dictionnaire »). Puis ils ont ajouté les chiffres, les substitutions courantes et les caractères spéciaux. Aujourd'hui, un GPU moderne peut faire des milliards de tentatives par seconde. Un mot de passe comme P@ssw0rd1! peut sembler complexe pour un humain, mais pour un ordinateur, c'est une proie facile qui peut être devinée en quelques minutes, voire quelques secondes.
Le problème que résout un générateur de mots de passe, c'est le problème du « cerveau humain ». Il délègue la tâche de créer une clé secrète à une machine qui n'a pas de préjugés, pas de noms d'animaux préférés, et aucune idée de ce qui « a l'air aléatoire ». Elle se contente de suivre des principes mathématiques pour produire une chaîne qui est, à toutes fins pratiques, du pur bruit — et ce bruit est une symphonie pour un développeur soucieux de la sécurité.
Comment ça marche sous le capot
Un bon générateur de mots de passe ne se contente pas de taper sur des touches au pif. C'est un processus soigné et calculé, ancré dans le concept mathématique d'entropie. Voyez ça comme une machine à lancer les dés high-tech.
L'ingrédient secret : l'entropie
En cryptographie, l'entropie est une mesure de l'imprévisibilité ou de l'aléa. Une entropie élevée signifie qu'une valeur est très difficile à deviner ; une entropie faible signifie qu'elle est prévisible. Votre date de naissance a une faible entropie. Le résultat de 100 lancers de pièce a une entropie élevée.
Un générateur de mots de passe a besoin d'une source d'aléa de haute qualité pour faire son travail. Dans un navigateur web moderne, cette source est généralement l'API Web Crypto, et plus précisément une fonction comme crypto.getRandomValues(). Ce n'est pas le Math.random() de Papy. Au lieu d'utiliser un algorithme simple et prévisible, il puise dans la réserve d'entropie (l'entropy pool) du système d'exploitation. Cette réserve est un chaudron de chaos, alimenté par des entrées imprévisibles comme :
- Le timing précis des mouvements et des clics de votre souris
- Le rythme de vos frappes au clavier
- Le bruit des périphériques matériels (comme le ventilateur ou le disque dur)
- Les timings des paquets réseau
Le navigateur utilise ce générateur de nombres pseudo-aléatoires de qualité cryptographique (CSPRNG) pour obtenir un flux de nombres suffisamment imprévisibles à des fins de sécurité. C'est la matière première de notre mot de passe.
Construire le pool de caractères
Ensuite, le générateur définit « l'alphabet » dans lequel il peut piocher. Il ne s'agit pas seulement de A à Z. C'est l'ensemble complet des caractères que vous avez autorisés. Une configuration typique ressemble à ceci :
- Minuscules :
abcdefghijklmnopqrstuvwxyz(26 caractères) - Majuscules :
ABCDEFGHIJKLMNOPQRSTUVWXYZ(26 caractères) - Chiffres :
0123456789(10 caractères) - Symboles :
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~(32 caractères)
Si vous activez les quatre ensembles, votre pool de caractères (N) a une taille de 26 + 26 + 10 + 32 = 94 caractères possibles. La taille de ce pool est un facteur essentiel pour la robustesse finale du mot de passe.
Lancer les dés : l'algorithme
Avec une source de nombres aléatoires et un pool de caractères, le processus est étonnamment simple :
- Obtenir un nombre aléatoire : Demander au CSPRNG un nombre aléatoire entre 0 et 93 (la taille totale de notre pool de caractères moins un).
- Choisir un caractère : Utiliser ce nombre comme indice pour choisir un caractère dans le pool. Par exemple, si le nombre aléatoire est
74et que le caractère74de notre pool est&, alors&est le premier caractère de notre mot de passe. - Répéter : Répéter ce processus encore et encore pour la longueur (
L) souhaitée du mot de passe.
Un exemple simplifié en simili-JavaScript pourrait ressembler à ça :
function generatePassword(length, characterPool) {
let password = "";
const poolSize = characterPool.length;
// Get an array of random numbers in one go for efficiency
const randomValues = new Uint32Array(length);
window.crypto.getRandomValues(randomValues);
for (let i = 0; i < length; i++) {
// Use the random number to pick a character from the pool
const randomIndex = randomValues[i] % poolSize;
password += characterPool[randomIndex];
}
return password;
}
const allChars = "abc...XYZ...123...#$!..."; // Pool de 94 caractères
const myStrongPassword = generatePassword(16, allChars);
// Résultat : quelque chose comme "9k&vB$@p!Z*rE#wJ"
La clé est d'assurer une distribution uniforme : chaque caractère du pool doit avoir une chance égale d'être sélectionné pour chaque position dans le mot de passe.
Mesurer la robustesse : les bits d'entropie
Alors, à quel point le résultat est-il robuste ? On le mesure en « bits d'entropie ». La formule est log₂(Nombre total de combinaisons). Le nombre total de combinaisons est la taille du pool de caractères (N) élevée à la puissance de la longueur du mot de passe (L), soit N^L.
La formule des bits d'entropie est : H = L * log₂(N)
Voyons ce que ça donne en pratique.
| Longueur (L) | Jeu de caractères (N) | Combinaisons (N^L) | Bits d'entropie (H) | Temps pour craquer (à 10¹² essais/sec) |
|---|---|---|---|---|
| 8 | Minuscules seulement (26) | 208 milliards | ~37,6 | Millisecondes |
| 8 | Tous les caractères (94) | 6 millions de milliards | ~52,4 | Minutes |
| 12 | Tous les caractères (94) | 4,7 x 10²³ | ~78,7 | Milliers d'années |
| 16 | Tous les caractères (94) | 3,7 x 10³¹ | ~104,9 | Milliers de milliards d'années |
| 24 | Tous les caractères (94) | 2,3 x 10⁴⁷ | ~157,3 | Autant dire jamais |
Comme vous pouvez le voir, chaque caractère que vous ajoutez à la longueur n'ajoute pas seulement de la robustesse — il la multiplie. Cette croissance exponentielle explique pourquoi un mot de passe de 16 caractères n'est pas seulement deux fois plus robuste qu'un mot de passe de 8 caractères ; il est des sextillions de fois plus robuste. C'est l'épine dorsale mathématique de la sécurité des mots de passe.
Histoires vécues
La cascade du mot de passe réutilisé
Une développeuse junior, appelons-la Alex, jonglait avec une douzaine de services pour un nouveau projet : GitHub, un fournisseur de serveurs cloud, un service de base de données, et plusieurs outils de monitoring en SaaS. Pour se simplifier la vie, elle a utilisé un mot de passe dont elle pouvait se souvenir : NomDuProjet2023!. Ça semblait assez sécurisé. Un jour, le service obscur de logiciel de forum en SaaS auquel elle s'était inscrite pour suivre un bug a annoncé une fuite de données. Leur base de données d'utilisateurs, y compris les mots de passe hachés, avait fuité. Malheureusement, ils utilisaient un algorithme de hachage faible, et en quelques heures, des crackers avaient inversé les hashs pour retrouver le texte en clair. Les attaquants ont alors lancé des scripts automatisés, essayant les couples email:password fuités sur les services majeurs. Ils ont touché le jackpot avec le compte d'Alex. Son mot de passe NomDuProjet2023! leur a donné accès à son fournisseur cloud et à son repo GitHub. Ils ont copié le code source et les données clients, puis ont effacé les serveurs.
Leçon : La réutilisation de mots de passe est une bombe à retardement. Une faille quelque part devient une faille partout. Chaque service a besoin d'un mot de passe unique, généré aléatoirement.
L'attaque par force brute qui a fait chou blanc
Un admin sys nommé Ben était en train de durcir un nouveau serveur SSH exposé sur Internet. Ce serveur était une cible alléchante, et il savait qu'il serait scanné par des bots dès sa mise en ligne. Pour le compte de l'utilisateur root (qu'il prévoyait de toute façon de désactiver pour la connexion externe), il n'a même pas essayé de penser à un mot de passe. Il a généré une chaîne de 32 caractères de charabia complet en utilisant tous les jeux de caractères : quelque chose comme q#8v...G@z7. Une semaine plus tard, curieux, il a inspecté les logs d'authentification du serveur. Il a découvert un spectacle horrifiant : des millions de tentatives de connexion échouées depuis des adresses IP du monde entier. Les bots menaient une attaque par force brute acharnée, essayant des mots de passe courants, des mots du dictionnaire et des séquences de caractères. Mais contre sa forteresse de 32 caractères, c'était comme jeter des cailloux sur une montagne. Ils ne s'en sont même pas approchés.
Leçon : Votre première ligne de défense contre les attaques automatisées et aveugles est un mot de passe si complexe et long que le forcer par force brute est mathématiquement infaisable.
La « victoire facile » du pentester
Maria, une pentester, a été engagée pour évaluer la sécurité d'une entreprise de taille moyenne. Elle a commencé par de l'« ingénierie sociale » et de la reconnaissance. En traversant les bureaux lors d'une visite guidée, elle a discrètement observé les espaces de travail des gens. Sur le côté d'un écran, elle a repéré un Post-it avec Hiver2024$. Il appartenait à quelqu'un de la compta. Ce mot de passe suivait le schéma « humain » classique : un mot courant, la saison/année actuelle, et un symbole à la fin. C'était un mot de passe conçu pour respecter une politique (Doit inclure une majuscule, un chiffre, un symbole) tout en restant mémorisable. Pour Maria, c'était une porte ouverte. Elle l'a utilisé pour se connecter au logiciel financier de l'entreprise, prouvant qu'elle aurait pu accéder à des données sensibles et les manipuler.
Leçon : Même en suivant une politique de mot de passe, les humains créent des mots de passe prévisibles. Le véritable aléa d'un générateur supprime l'élément humain, qui est souvent le maillon faible.
Erreurs et pièges courants
- Faire confiance à un générateur douteux. Méfiez-vous des sites web aléatoires qui proposent la génération de mots de passe. Un site malveillant pourrait enregistrer chaque mot de passe qu'il crée. Tenez-vous-en à des outils réputés, open-source ou à ceux qui s'exécutent entièrement dans votre navigateur, où le code ne peut pas communiquer avec son serveur d'origine.
- Sacrifier l'aléatoire pour la mémorisation. Si vous générez un mot de passe puis le « bidouillez » pour qu'il soit plus facile à retenir, vous anéantissez tout l'intérêt. Vous venez de réinjecter le schéma humain prévisible que les attaquants exploitent.
- Ignorer le jeu de caractères. Un mot de passe de 20 caractères composé uniquement de chiffres (
27182818284590452353) est bien plus faible qu'un mot de passe de 12 caractères utilisant des lettres, des chiffres et des symboles. La taille du pool de caractères (N) est un puissant multiplicateur de robustesse. - Stocker le mot de passe généré sans sécurité. Générer
4tG!p$z#qR@...est la première étape. La deuxième est de le stocker en toute sécurité. L'écrire sur un Post-it, le sauvegarder danspasswords.txtsur votre bureau, ou vous l'envoyer par e-mail va à l'encontre de l'objectif. Utilisez un gestionnaire de mots de passe de confiance. - Réutiliser votre unique mot de passe « incassable ». Vous générez un fantastique mot de passe de 25 caractères. Vous en êtes si fier que vous l'utilisez pour votre e-mail, votre banque et vos réseaux sociaux. Dès que l'un de ces services subit une fuite de données, votre clé « incassable » est entre les mains des attaquants, et tous vos comptes sont vulnérables.
Pourquoi ça doit vous intéresser
Si vous écrivez du code, vous gérez des secrets. Point final. Qu'il s'agisse d'une chaîne de connexion à une base de données, d'une clé d'API pour un service tiers, d'un login de serveur, ou du compte admin par défaut pour l'application que vous développez, vous créez et manipulez constamment des clés numériques.
Un développeur devrait se tourner vers un générateur de mots de passe chaque fois qu'il a besoin de créer un secret qu'une autre machine pourrait essayer de deviner. Le cerveau humain est fait pour la logique, la créativité et la résolution de problèmes. Il n'est pas fait pour générer des chaînes aléatoires de qualité cryptographique. En comprenant et en utilisant correctement les générateurs de mots de passe, vous remplacez une faiblesse humaine majeure par une certitude mathématique. C'est l'une des pratiques de sécurité les plus simples et les plus efficaces que vous puissiez adopter. Il ne s'agit pas seulement de protéger vos propres comptes ; il s'agit de construire des systèmes sécurisés pour vos utilisateurs, dès la conception.
Pour aller plus loin
- NIST Special Publication 800-63B : Les directives officielles de l'Institut national des normes et de la technologie des États-Unis (NIST) sur l'identité numérique, y compris l'approche moderne des politiques de mot de passe et de leur robustesse.
- MDN Web Docs: The Web Crypto API : Une plongée en profondeur dans l'API intégrée du navigateur pour les opérations cryptographiques, y compris
crypto.getRandomValues(). - OWASP Password Storage Cheat Sheet : Une ressource essentielle de l'Open Web Application Security Project (OWASP) sur la manière de gérer correctement les mots de passe côté serveur (après les avoir générés).
- Wikipedia: Password Strength : Un aperçu complet des concepts, y compris le calcul de l'entropie et l'analyse des attaques par force brute.
- Cloudflare: How we built a password generator : Un excellent article concret sur les considérations à prendre en compte pour construire un générateur de mots de passe sécurisé et de haute qualité.