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

Guide de sécurité

Génération de mots de passe côté client avec Web Crypto et échantillonnage par rejet

Un livre blanc technique expliquant le modèle de génération de mots de passe côté navigateur de PwdGen, les limites d'entropie, l'échantillonnage par rejet et les limites de confidentialité.

Résumé

PwdGen utilise une méthode de génération de référence côté client : le navigateur ou l’environnement d’exécution Web Crypto fournit des octets aléatoires, l’échantillonnage par rejet mappe ces octets à des indices bornés non biaisés, et un mélange de Fisher-Yates distribue les classes de caractères requises dans le mot de passe final. La méthode est intentionnellement petite, auditable et reproductible dans l’application web, l’adaptateur API, la CLI et le package pwdgen-core préparé.

Ce document décrit le modèle d’ingénierie. Il ne s’agit pas d’une revendication d’une nouvelle primitive cryptographique, d’une norme formelle ou d’un audit tiers indépendant.

Source d’aléa

Le générateur demande des valeurs aléatoires cryptographiquement fortes via crypto.getRandomValues(). Les implémentations de Web Crypto sont censées utiliser un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé (CSPRNG) initialisé avec une entropie de haute qualité fournie par l’environnement hôte. En pratique, les navigateurs délèguent cette responsabilité aux fonctionnalités du système d’exploitation et aux fournisseurs cryptographiques de la plateforme.

PwdGen ne prétend pas que chaque appel de génération de mot de passe échantillonne directement une source de bruit matériel. L’affirmation plus sûre et plus précise est que le navigateur fournit la sortie du CSPRNG via l’API Web Crypto, et que PwdGen évite les interfaces pseudo-aléatoires non cryptographiques.

Pourquoi pas Math.random()

Math.random() n’est pas spécifié pour une utilisation sensible à la sécurité. Il convient aux simulations, aux effets visuels et au comportement UI aléatoire ordinaire, mais il n’offre pas les garanties attendues pour les mots de passe, les codes de réinitialisation, les clés de signature ou autres identifiants.

PwdGen traite les solutions de repli pseudo-aléatoires non sécurisées comme un état d’échec. Si Web Crypto n’est pas disponible, le générateur doit afficher une erreur de compatibilité plutôt que de produire silencieusement des identifiants faibles.

Échantillonnage par rejet

Les octets et entiers aléatoires sont généralement tirés d’une plage de puissance de deux. Les alphabets de mots de passe ont rarement une taille qui divise exactement cette plage. Une opération modulo directe peut rendre certains caractères légèrement plus probables que d’autres.

PwdGen utilise l’échantillonnage par rejet :

  1. Tirer un entier non signé de 32 bits.
  2. Calculer le plus grand multiple de la taille de l’alphabet qui tient dans la plage 32 bits.
  3. Rejeter les valeurs au-dessus de cette limite.
  4. Appliquer le modulo uniquement sur la plage complète restante.

Cela maintient une sélection uniforme des caractères bornés sans introduire de biais de modulo mesurable.

Couverture des caractères et entropie

Pour les politiques de mot de passe configurées, le générateur sélectionne d’abord un caractère de chaque classe activée, remplit le reste à partir de l’alphabet combiné, puis mélange le résultat. Cela aide à satisfaire les règles de mot de passe de destination sans placer une classe prévisible à une position prévisible.

L’estimation théorique de l’entropie est :

bits = length × log2(uniqueAlphabetSize)

Cette valeur est une borne supérieure pour des choix uniformément aléatoires à partir de l’alphabet configuré. Elle ne tient pas compte de la réutilisation des mots de passe, de la sortie modifiée par l’utilisateur, des appareils compromis, des mots de passe divulgués ou d’un stockage faible par le service de destination.

Limite de confidentialité

Dans les outils du navigateur, les valeurs générées restent dans la mémoire de la page et dans les champs de résultat visibles jusqu’à ce que l’utilisateur les copie ou les exporte. Les générateurs locaux n’envoient pas les mots de passe générés aux serveurs de PwdGen, ne les placent pas dans des URL, ni ne les écrivent dans des événements d’analyse.

Cette limite ne protège pas contre les extensions de navigateur malveillantes, les gestionnaires de presse-papiers, les compromissions du système d’exploitation, les captures d’écran, les pages de phishing, ou un utilisateur collant un mot de passe généré dans une destination non sécurisée.

Implémentation reproductible

Le package public pwdgen-cli et le package préparé pwdgen-core existent pour que le modèle de génération reste inspectable en dehors de la page web. Les tests unitaires couvrent l’inclusion des classes de caractères, les caractères exclus, les configurations invalides, les formules d’entropie et l’absence de chemins de code de repli pseudo-aléatoires non sécurisés.

L’objectif n’est pas de faire de PwdGen une norme privée. L’objectif est de rendre l’implémentation suffisamment petite pour que les développeurs puissent la lire, la tester et la remplacer lorsque leur environnement nécessite une limite de confiance différente.

Sources