Pourquoi password.es n'envoie votre mot de passe nulle part

Publié le par David Carrero

Écrire « nous ne conservons pas votre mot de passe » sur une page web coûte exactement le même prix que d’y écrire n’importe quoi d’autre : rien. C’est une phrase, pas une garantie. Celui qui dit vrai l’écrit de la même façon que celui qui ment, et depuis votre côté de l’écran les deux sont identiques.

C’est le problème de fond de tout site qui vous demande un mot de passe pour l’« analyser ». Même si le service est irréprochable — code propre, bonnes intentions, gens honnêtes —, vous n’avez aucun moyen de le savoir. Le serveur est une boîte fermée. Vous lui envoyez la donnée la plus sensible que vous possédez et vous espérez qu’à l’autre bout il se passe ce qu’on vous a promis.

Et il y a un détail qu’on oublie souvent : une promesse de ne rien conserver ne protège pas non plus de ce qui échappe à celui qui promet. Un serveur honnête peut avoir des logs que personne n’a relus, un proxy au milieu, une sauvegarde automatique, un nouvel employé ou, tout simplement, un mauvais jour. Le mot de passe a déjà quitté votre machine. Ce qui arrive ensuite est hors de votre portée et, bien souvent, de la sienne.

La seule réponse qui n’exige de croire personne

La solution n’est pas de mieux promettre. C’est de ne pas avoir besoin de la donnée.

Si votre mot de passe ne sort jamais du navigateur, la question « qu’est-ce qu’ils en font ? » n’a plus de sens. Il n’y a pas de « ils ». Pas de serveur qui le reçoit, pas de logs où il figure, pas de sauvegarde qui le contienne, pas d’employé qui puisse le lire. La confiance n’est pas mieux gérée : elle est retirée du problème.

C’est ce que fait password.es. Le vérificateur analyse ce que vous tapez dans votre propre navigateur, avec votre propre processeur. Le texte que vous saisissez ne voyage nulle part, parce qu’il n’y a nulle part où voyager.

D’où vient le hasard

Le générateur repose sur la même idée. Pour fabriquer un mot de passe aléatoire, il faut du hasard, et il y a deux façons de s’en procurer : le demander à un serveur ou le demander au navigateur. Le demander à un serveur serait absurde : le serveur connaîtrait le mot de passe avant vous.

Nous le demandons donc au navigateur, avec crypto.getRandomValues(). C’est l’API standard de la plateforme web pour l’aléa cryptographique — celle qui existe précisément pour ça, face à Math.random(), bonne pour battre les cartes dans un jeu et pour rien de ce qui doit résister à quelqu’un de motivé. Le hasard est produit par le navigateur lui-même, sur votre machine. Nous n’y participons pas : le résultat apparaît sur votre écran et il y reste.

Comment le vérifier sans me croire sur parole

Tout ce qui précède reste, pour l’instant, un paragraphe écrit par les gens qui ont fait le site. Autrement dit : exactement ce dont je vous disais de vous méfier. Alors ne me croyez pas. Regardez.

Ouvrez les outils de développement de votre navigateur — F12, ou Cmd+Option+I sur un Mac —, allez dans l’onglet Réseau (Network), laissez-le ouvert et entrez dans le vérificateur. Vous verrez la page se charger. Videz maintenant la liste, cliquez dans le champ du mot de passe et tapez.

Voici ce que vous allez voir, et mieux vaut être exact que commercial :

  • Au clic dans le champ, une requête part. Ce n’est pas votre mot de passe — vous n’avez encore rien tapé — : c’est la bibliothèque qui fait l’analyse, un fichier nommé zxcvbn-fr.min.js qui embarque les listes de mots, de prénoms, de motifs de clavier et de mots de passe connus auxquels le vôtre est comparé. Il se télécharge depuis password.es dès que vous touchez le champ, pour qu’il arrive pendant que vous tapez. Il vient du même domaine, c’est un fichier statique et il est le même pour tous ceux qui ouvrent cette page — le site existe en plusieurs versions selon la langue, et celle-ci charge la française.
  • Ensuite, quoi que vous tapiez, la liste ne bouge plus. Une lettre, vingt, effacez, recommencez, collez un texte long. Zéro requête. Le compteur ne bronche pas. Le dictionnaire est déjà dans votre navigateur et la recherche se fait contre la mémoire de votre machine.

Cette distinction, c’est toute la différence. Ce n’est pas que vous faites confiance à la requête pour ne pas emporter votre mot de passe : c’est qu’il n’y a pas de requête. Rien à interpréter, aucun code à comprendre ; il suffit de regarder un compteur qui ne monte pas.

L’inventaire complet, défauts compris

Puisque l’argument est « vérifiez vous-même », il serait curieux de cacher ce que vous trouveriez en vérifiant. L’inventaire honnête de password.es :

Pas d’analytique. Ni Google Analytics, ni une alternative discrète, ni un pixel. Il y en a eu un, il a été retiré de toutes les pages. Pas de cookies. Le site n’en écrit aucun. Il y a bien une chose enregistrée dans votre navigateur : si vous préférez le thème clair ou sombre, dans le stockage local de votre propre machine. Ça n’est jamais envoyé nulle part et vous pouvez l’effacer depuis ce même inspecteur. Pas d’inscription, pas de comptes, pas de formulaires : il n’y a nulle part où laisser une donnée, même si vous vouliez en laisser une.

Et le défaut, car il y en a un : la page réclame deux polices aux serveurs de Google au chargement. Cela signifie que Google voit que quelqu’un avec votre IP a chargé une page de ce domaine, comme sur une infinité de sites. Il ne voit pas ce que vous tapez — cette requête a lieu avant et ne se répète pas —, mais c’est une requête vers un tiers, vous la verrez dans ce même onglet Réseau, et il n’y aurait aucun sens à vous dire d’ouvrir l’inspecteur sans la mentionner. Elle est sur la liste des choses à corriger.

Pourquoi nous racontons tout ça

Nous aurions pu écrire « zéro requête, confidentialité totale » et dormir tranquilles. Ç’aurait mieux sonné et ç’aurait été faux dans le détail : il y a une requête de dictionnaire et il y a des polices. Un argument qui s’écroule dès que quelqu’un le vérifie n’était pas un argument : c’était de la publicité.

La version exacte est moins ronde et elle tient au contrôle : ce que vous tapez ne sort pas de votre navigateur, et ça se voit en trente secondes avec un outil que vous avez déjà installé.

Et attention, parce que ça vous revient comme règle générale. La prochaine fois qu’un site vous demande votre mot de passe pour quoi que ce soit, ouvrez cet onglet et regardez si une requête apparaît quand vous appuyez sur une touche. Si elle apparaît, votre mot de passe est parti. Peu importe ce que dit la politique de confidentialité, la beauté du cadenas sur le formulaire ou le sérieux apparent de l’entreprise. Et si le site vous affiche le mot de passe déjà analysé après un tour de roue, vous savez par où il est passé.

La règle dont on parle le moins en sécurité ne porte pas sur les mots de passe : elle porte sur la vérification. Faire confiance, c’est bien. Vérifier, c’est mieux, et ici c’est gratuit.


Sources : l’architecture de password.es elle-même, vérifiable avec l’inspecteur de n’importe quel navigateur — le vérificateur télécharge depuis son propre domaine, au moment où le champ est activé, la bibliothèque d’analyse avec ses listes (zxcvbn-fr.min.js) et n’émet aucune requête pendant la saisie · crypto.getRandomValues(), l’API standard de la Web Crypto API pour l’aléa cryptographique · le code du site ne contient ni analytique, ni pixels, ni cookies ; la seule donnée stockée en local est la préférence de thème · les polices sont servies depuis Google Fonts.

← Retour au blog