Outil de mots de passe Retour au générateur

Guide de sécurité

Pourquoi Math.random n'est pas sûr pour les mots de passe

Découvrez pourquoi Math.random convient aux effets d'interface utilisateur mais pas aux mots de passe, codes de réinitialisation, jetons ou autres secrets sensibles à la sécurité.

Résumé

Math.random() est une fonction pseudo-aléatoire JavaScript générale. Elle est utile pour les animations, les comportements d’interface utilisateur aléatoires, les exemples, les jeux et les simulations. Elle n’est pas spécifiée pour la sécurité cryptographique et ne doit pas être utilisée pour générer des mots de passe, codes de réinitialisation, secrets d’API, clés de signature ou jetons de récupération.

Le problème

Un générateur de mots de passe a besoin d’imprévisibilité face à un attaquant, pas simplement de valeurs qui semblent variées pour un utilisateur. Math.random() n’offre pas de garantie de sécurité cryptographique standard dans les navigateurs, et les implémentations peuvent différer entre les moteurs.

L’option plus sûre dans le navigateur

Les navigateurs modernes fournissent crypto.getRandomValues() via l’API Web Crypto. PwdGen utilise cette interface et l’échantillonnage par rejet, ce qui évite un biais dans la sélection des caractères. Si cette API n’est pas disponible, le comportement sûr est d’arrêter la génération et d’expliquer l’exigence de compatibilité.

Comment vérifier un générateur

Recherchez Math.random dans le code source. Un générateur de mots de passe sérieux ne devrait pas l’utiliser pour les caractères du mot de passe. Il peut apparaître dans la documentation expliquant pourquoi il n’est pas sûr, mais pas dans le chemin de génération.

Guide détaillé

Ce guide se concentre sur les raisons pour lesquelles Math.random est inapproprié pour les mots de passe et les secrets. Il est destiné aux développeurs, étudiants et utilisateurs d’outils qui vérifient si un générateur utilise un aléa sûr, donc l’objectif pratique n’est pas de créer une revendication de sécurité dramatique. L’objectif est de choisir une habitude de mot de passe qui puisse survivre à une utilisation quotidienne : formulaires de connexion, gestionnaires de mots de passe, claviers mobiles, récupération de compte, appareils partagés, et parfois des services avec des règles de validation étranges. Une recommandation sécurisée n’est utile que si une personne réelle peut la suivre de manière cohérente.

Le point de départ le plus sûr est l’aléa plus l’unicité. L’aléa signifie que la valeur est sélectionnée dans un grand espace par une source aléatoire cryptographiquement adaptée, non inventée à partir d’un anniversaire, d’un nom d’animal, d’un motif de clavier ou d’une citation favorite. L’unicité signifie que le même mot de passe n’est pas utilisé ailleurs. Un mot de passe long mais réutilisé peut échouer rapidement après une fuite non liée, tandis qu’un mot de passe unique et aléatoire limite les dégâts au seul compte où il a été utilisé.

Pour ce sujet, un préréglage pratique est crypto.getRandomValues avec échantillonnage par rejet au lieu de Math.random. Vous pouvez appliquer ce préréglage avec le guide de l’API Web Crypto puis stocker la valeur finale dans un gestionnaire de mots de passe de confiance. PwdGen génère les valeurs localement dans le navigateur avec Web Crypto ; le mot de passe généré n’est pas envoyé à un serveur PwdGen. Cette conception locale réduit l’exposition côté serveur, mais ne protège pas contre toutes les menaces. Une extension de navigateur malveillante, un appareil compromis, une page de phishing ou une gestion non sécurisée du presse-papiers peut toujours exposer un secret après sa génération.

Les problèmes les plus courants à éviter sont les séquences pseudo-aléatoires prévisibles, le biais de modulo, les fonctions aléatoires personnalisées et le code de démonstration copié en production. Ces problèmes comptent car les attaquants ont rarement besoin de forcer brutalement tous les mots de passe possibles lorsque les habitudes humaines leur offrent un raccourci. Le credential stuffing, le phishing, les listes de mots de passe divulguées et l’abus de récupération de compte sont souvent plus réalistes qu’une recherche mathématique pure. C’est pourquoi les meilleurs conseils combinent la qualité du mot de passe avec des contrôles au niveau du compte tels que MFA, passkeys, stockage des codes de récupération et révision régulière des paramètres de récupération par e-mail ou téléphone.

Utilisez cette liste de contrôle lors de l’application de la recommandation :

Si un site web rejette le réglage idéal, ne forcez pas manuellement le mot de passe dans un motif plus faible. Ajustez une variable à la fois. Si les symboles sont rejetés, gardez les majuscules, minuscules et chiffres activés et augmentez la longueur. Si une longueur maximale est faible, utilisez la plus grande longueur acceptée et assurez-vous que la valeur est unique. Si un mot de passe doit être lu à voix haute, imprimé ou tapé sur un écran de télévision ou de routeur, envisagez d’exclure les caractères ambigus et d’augmenter la longueur pour compenser l’alphabet plus petit.

Enfin, rappelez-vous les limites des conseils sur les mots de passe. Un mot de passe fort est une couche de défense, pas une garantie. Il ne peut pas rendre une page de phishing sûre, corriger un logiciel malveillant ou compenser un service qui stocke mal les identifiants. L’habitude utile est ennuyeuse mais durable : générez une valeur unique, stockez-la en toute sécurité, protégez le chemin de récupération et remplacez-la rapidement si vous suspectez une exposition.

Une prochaine étape sûre

Après avoir lu ce guide, faites un petit audit de compte au lieu d’essayer de tout réparer à la fois. Choisissez le compte qui causerait le plus de problèmes s’il était piraté, confirmez que son mot de passe est unique, et vérifiez l’e-mail de récupération, le téléphone de récupération, la méthode MFA et le stockage des codes de secours. Si une partie de cette chaîne est faible, améliorez cette partie avant de passer aux comptes à moindre risque. Cet ordre maintient le travail gérable et protège les comptes que les attaquants sont les plus susceptibles d’utiliser comme tremplin. Pourquoi Math.random n’est pas sûr pour les mots de passe, le meilleur résultat est une habitude reproductible : générer localement, stocker soigneusement et éviter la réutilisation.

Questions fréquentes

Math.random est-il parfois acceptable ?

Oui, pour les effets visuels, les simulations et l’aléa d’interface utilisateur ordinaire, mais pas pour les identifiants ou les jetons de sécurité.

Que devraient utiliser les générateurs de mots de passe à la place ?

Ils devraient utiliser une source aléatoire cryptographique telle que crypto.getRandomValues() dans le navigateur.

PwdGen utilise-t-il Math.random en repli ?

Non. Si Web Crypto n’est pas disponible, PwdGen affiche un avertissement de compatibilité et ne génère pas de mots de passe avec Math.random().

Sources