Français

Texte et outils du quotidien · Générateur de mots de passe

crypto.getRandomValues vs Math.random : pourquoi c'est important pour les mots de passe

· Comment ça marche

mots de passe crypto-web caractère aléatoire

Un chemin aléatoire faible se terminant tandis qu'un chemin Web Crypto continue dans des symboles de mot de passe
Illustration vectorielle originale de ToolAcre

Explique la différence entre le générateur de nombres aléatoires à usage général d'un navigateur et son générateur cryptographique, pourquoi la prévisibilité est fatale pour les mots de passe et comment savoir lequel utilise un outil.

Assez aléatoire pour un jeu de dés, pas pour un mot de passe : les deux types de hasard qu'offre un navigateur

Un navigateur peut proposer plusieurs sources de valeurs qui semblent irrégulières, mais un désordre visuel ne constitue pas une preuve qu'une séquence convient à un identifiant. ToolAcre trace une limite de produit stricte : chaque choix de mot, choix de délimiteur, choix de caractère et échange aléatoire passe par une fonction entière sécurisée soutenue par `crypto.getRandomValues`. Si cette API ne peut pas être utilisée, la page désactive la génération plutôt que de produire un substitut plausible.

Ce refus compte plus que le fait que deux échantillons de résultats semblent également confus. Une source prévisible peut toujours imprimer des lettres, des chiffres et des mots qui semblent convaincants à une personne. La mise en œuvre rend donc la source auditable et la panne visible. Il ne prétend pas qu’une valeur générée soit sûre pour chaque environnement ; un navigateur ou un appareil compromis peut toujours lire ce que la page affiche.

À quoi sert Math.random : un pseudo-aléatoire rapide et ensemencé dont la sortie peut être reconstruite à partir de quelques observations

Le classeur décrit Math.random comme un pseudo-aléatoire prédéfini reconstructible à partir de quelques observations, mais il s'agit d'affirmations d'implémentation générales que ce référentiel n'établit pas pour chaque moteur JavaScript. Le fait local est plus simple et plus fort pour ce produit : les fichiers générateurs de production n'appellent pas `Math.random`. Un test au niveau source commente, analyse le code exécutable et échoue si un tel appel apparaît n'importe où dans le moteur ou l'application de mot de passe.

Cette distinction empêche l'article de transformer une règle de mise en œuvre en un cours universel sur l'historique du navigateur. ToolAcre n'a pas besoin de caractériser tous les algorithmes Math.random possibles pour rejeter l'API de génération de mot de passe. Son package accepte Web Crypto ou une source sécurisée injectée utilisée par les tests, et n'expose aucune option de production pour une graine, un mode déterministe ou un repli faible.

Ce que ce dépôt prouve à propos de Math.random : il est absent de la génération de production

`createWebCryptoSource` recherche un `getRandomValues` appelable, puis encapsule cette méthode en tant que source aléatoire du package. L'application effectue une sonde supplémentaire avant d'activer les contrôles : elle demande à l'objet crypto global de remplir un tableau typé à un élément à l'intérieur d'un bloc try. Cela détecte les environnements restreints dans lesquels la propriété existe mais est lancée lorsqu'elle est utilisée, plutôt que de faire confiance à une vérification superficielle des fonctionnalités.

La source s'arrête à la limite de l'API du navigateur. Cela ne prouve pas quel pool de systèmes d'exploitation, quelles instructions matérielles ou quelle conception de réamorçage se trouvent sous un navigateur particulier. Ces détails varient en dessous de l'interface et nécessitent une documentation sur la plate-forme. Ce que le code prouve, c'est que les octets arrivent via la méthode nommée Web Crypto et que la génération n'est pas tentée en cas d'échec de la sonde.

Ce que fait crypto.getRandomValues ici : remplit les tableaux saisis via l'API du navigateur

La prévisibilité est dangereuse car un générateur d'informations d'identification est censé faire de nouveaux choix qu'un observateur ne peut pas reproduire à partir de résultats antérieurs. ToolAcre soutient cet objectif en refusant les chemins de production déterministes, en centralisant chaque dessin et en testant l'absence de l'API faible. Il ne promet pas d'immunité contre la capture d'écran, les extensions, les logiciels malveillants, le phishing, la réutilisation du mot de passe ou un service qui gère mal les informations d'identification après la soumission.

Cette limite évite une erreur de catégorie courante : la génération concerne la manière dont un candidat est sélectionné, et non tout ce qui lui arrive plus tard. Le package renvoie une chaîne et ne la journalise ni ne la stocke. La page contient une valeur actuelle en mémoire et la restitue sous forme de texte. Le stockage, la transmission, la récupération de compte et la politique d'authentification des mots de passe restent la responsabilité d'autres systèmes.

Lecture du code : comment vérifier quelle API une page utilise et pourquoi il est plus facile de faire confiance aux pages ouvertes et inspectables

La lecture du code commence à `packages/password-generator/src/index.js`, dont le contrat indique que chaque décision aléatoire atteint `secureRandomInt`. Le fichier d'implémentation affiche ensuite `getRandomValues`, un échantillonnage de rejet et des erreurs explicites. Enfin, `no-math-random.test.js` et la suite plus large de sécurité des mots de passe rendent la garantie négative exécutable au lieu de laisser « nous n'utilisons jamais Math.random » comme commentaire non testé.

L'Open Source à lui seul ne rend pas le code correct, mais il donne au réviseur des joints concrets à inspecter. Recherchez la source aléatoire, suivez les appelants à travers les choix et les mélanges, et inspectez ce qui se passe lorsque l'API est manquante. Un examen fiable devrait être capable de nommer à la fois le chemin du succès et le chemin du refus plutôt que de déduire la sécurité à partir de la stratégie de marque.

Exemple concret : la même routine de sélection de mots écrite dans les deux sens et ce qu'un attaquant pourrait faire avec chacun

Considérez une demande pour un nombre entier inférieur à 100. `secureRandomInt` a besoin d'un octet, dont la plage contient les valeurs 256. Il n'accepte que le plus grand préfixe divisible par 100, qui se termine avant 200, et rejette la queue restante. Un test déterministe alimente l'octet 200 suivi de l'octet 7. L'implémentation supprime 200 et renvoie 7 ; un raccourci modulo direct aurait renvoyé zéro à partir de l'octet rejeté.

La même fonction entière sécurisée choisit des indices pour les mots et les caractères, cet exemple n'est donc pas un jouet détaché de la génération. Les octets exacts en production ne sont pas des exemples reproductibles et ne doivent jamais être publiés en tant qu’informations d’identification. L'artefact utile est la preuve du flux de contrôle : Web Crypto remplit le tampon, une queue inégale est rejetée et seule une valeur acceptée devient un choix limité.

Exemple fonctionnel : tracez un tracé limité via le chemin secureRandomInt fourni

Ce référentiel n'implémente ni ne compare les générateurs côté serveur, les générateurs matériels de nombres aléatoires ou les outils de ligne de commande du système d'exploitation. Il ne peut pas non plus auditer les éléments internes de l’implémentation cryptographique du navigateur à partir de JavaScript. Ces sujets nécessitent leurs propres sources, modèles de menaces et contrôles opérationnels plutôt qu'une analogie collée sur le chemin du code ToolAcre.

La page n'est pas non plus un gestionnaire de mots de passe. Il ne sauvegarde pas, ne synchronise pas, ne transmet pas et ne remplit pas automatiquement ce qu'il génère. Un lecteur ne doit pas interpréter « source aléatoire cryptographique » comme un conseil de réutiliser un résultat ou de le déplacer via un canal non sécurisé. La revendication appartient uniquement à la sélection dans l'onglet actuel du navigateur.

Ce qu'il faut retenir : le générateur de mots de passe utilise le générateur de nombres aléatoires cryptographiques du navigateur et vous pouvez le vérifier à partir de la page elle-même.

Le choix vérifiable de ToolAcre est la cryptographie ou rien. La page appelle l'API du navigateur lors de la détection du support, désactive les contrôles en cas d'échec et permet au moteur de lancer `InsecureRandomError` si la génération atteint d'une manière ou d'une autre la même condition manquante. Il n'y a pas de solution de secours Math.random cachée derrière l'une ou l'autre branche.

Utilisez ce modèle lors de l'examen d'un générateur : identifiez la source, tracez chaque tirage limité, inspectez la réduction et le brassage, et forcez le chemin de la source indisponible. Évaluez ensuite l’appareil et la destination séparément. Une source aléatoire sonore est nécessaire pour le travail de ce générateur, mais il ne s’agit pas d’un certificat universel pour toute la durée de vie de l’identifiant.