Comment ça marche

AleaPass est un générateur de mots de passe qui n'a rien à cacher, alors cette page explique tout : d'où vient l'aléa, pourquoi aucun mot de passe ne peut quitter votre appareil, comment la « robustesse » est calculée, et comment vérifier chaque affirmation vous-même.

Le parcours d'un mot de passe

AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTo4ZTY4NWIyYy05NzdlLTQ4MjAtYjNhMS0xYzI2MzRlZDc4ZGUAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaGY5G0vmARc66voEKs2H/FQAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDpiYWViMmUxMS1jODY4LTQ0MmYtYTllMC0wZmE1OTkwMWIwZjhscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNodWYRDqH0PI8Z0rTzI0+94AAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggyjKOCCyP7X6uYnsH+cV9tojnOCWE1ME2ocYE2+ytIC+kZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaHCC0UPxE2G+hN+zKDnXQWcAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRNAAAAAAAAAAAAAAAAAGRoYXNoWCA7mDbz9kezuTLZvEXa93G/ly7keqGmORl2mJd5Dw12XGRuYW1lbmp1bWJmIG1hbmlmZXN0amV4Y2x1c2lvbnOBomVzdGFydBi7Zmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjhlNjg1YjJjLTk3N2UtNDgyMC1iM2ExLTFjMjYzNGVkNzhkZS9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOmNiNWQwNGVlLWQ4MTktNDE0Yy1iZTJlLTdiYTI5NGUxYjE2M3JjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCDKMo4ILI/tfq5iewf5xX22iOc4JYTUwTahxgTb7K0gL6JjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFggf0qwSp8a2mGdEoIclTDzC27IJYwss3od9tdqMyo4O5qiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggG2terQ2tj14GfI4bs01VGPbjEVcJ49bybLKWce46HaB0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQN02hpET+lMX29g8pdPnrPC0GVLQbuevOLP9L8/Hw0D/lUYngkBxNnpSSu3kPthZ/VrRGuITDbETpRmqWfX3MGI= Comment un mot de passe est fabriqué Schéma : à gauche, votre appareil exécute tout le générateur dans le navigateur ; à droite, le serveur ne fait que livrer des fichiers statiques une fois et ne reçoit jamais rien en retour. Votre appareil Votre navigateur (tout le générateur s'exécute ici) 1 Source aléatoire du système /dev/urandom, BCryptGenRandom, Secure Enclave… 2 crypto.getRandomValues() API Web Crypto, valeurs 32 bits 3 Échantillonnage avec rejet entier sans biais 0…N-1 4 Jeu de caractères ou liste de mots a–z A–Z 0–9 symboles, ou 7 776 mots 5 Mot de passe affiché à l'écran et nulle part ailleurs Le serveur nginx dans un conteneur Docker index.html style.css generator.js · app.js wordlists/en.js · fr.js Fichiers statiques uniquement Content-Security-Policy · HSTS Aucune ressource tierce 6 HTTPS, une fois 7 Rien ne repart
Comment un mot de passe est fabriqué
  1. Source aléatoire du système d'exploitation. Tout système moderne entretient une réserve d'aléa alimentée par du bruit matériel (gigue des horloges, générateurs matériels comme RDRAND ou une Secure Enclave). C'est la même source que celle utilisée par l'application de votre banque ou votre VPN pour leurs clés.
  2. crypto.getRandomValues(). Le navigateur expose cette réserve via l'API Web Crypto. Le site lui demande des nombres de 32 bits, par paquets de 64. C'est un générateur cryptographiquement sûr ; Math.random(), qu'utilisent beaucoup de générateurs, ne l'est pas.
  3. Échantillonnage avec rejet. Un nombre de 32 bits doit devenir une position dans une liste de, disons, 89 caractères. Prendre le reste d'une division favoriserait très légèrement les premiers caractères. À la place, on calcule le plus grand multiple de 89 inférieur à 232 et tout tirage au-dessus est jeté puis retiré. Chaque caractère a alors exactement la même probabilité.
  4. Jeu de caractères ou liste de mots. Chaque position est remplie indépendamment à partir de l'alphabet que vous avez choisi, ou de l'une des deux listes de 7 776 mots. Avec « au moins un caractère de chaque type », un candidat auquel il manque un type est rejeté en entier et un nouveau est tiré, ce qui conserve une distribution uniforme.
  5. Mot de passe à l'écran, nulle part ailleurs. Le résultat est écrit dans la page et, si vous le demandez, dans votre presse-papiers. Il n'est jamais stocké, jamais placé dans l'URL, jamais envoyé.
  6. Le serveur livre des fichiers statiques, une fois. nginx sert quelques fichiers HTML, CSS et JavaScript en HTTPS avec une Content-Security-Policy stricte qui interdit tout script, style, police ou connexion tiers. Une fois chargée, la page n'a aucune raison de reparler au serveur, et la politique la bloquerait si elle tentait de parler à quelqu'un d'autre.
  7. Rien ne repart. Aucun formulaire n'est envoyé, aucune balise de mesure d'audience n'est déclenchée, aucun cookie n'est déposé, aucun stockage local n'est utilisé, et le serveur ne tient aucun journal d'accès. Il n'existe tout simplement aucun canal par lequel un mot de passe pourrait quitter votre appareil.

Comment la robustesse est mesurée

Comme chaque mot de passe produit ici est réellement aléatoire, sa robustesse ne dépend pas de son apparence mais du nombre de mots de passe également probables que le générateur aurait pu produire. Ce nombre s'exprime en bits d'entropie : un mot de passe de n bits est l'une de 2n possibilités.

Quelques repères
SecretEntropieTemps moyen pour casser à 1010 essais/s
Code PIN à 6 chiffres19,9 bitsinstantanément
8 caractères aléatoires, tous types51,8 bitsquelques jours
12 caractères aléatoires, tous types77,7 bitsdes centaines de milliers d'années
Phrase de 5 mots64,6 bitsune cinquantaine d'années
Phrase de 6 mots77,5 bitsdes centaines de milliers d'années
16 caractères aléatoires, tous types103,6 bitsplus que l'âge de l'univers
20 caractères aléatoires, tous types129,5 bitsplus que l'âge de l'univers

L'estimation suppose un attaquant hors ligne qui a volé une base d'empreintes de mots de passe et essaie dix milliards de candidats par seconde, ce qu'atteint une armoire de cartes graphiques contre une fonction de hachage rapide comme MD5 ou NTLM. Contre une fonction lente (bcrypt, scrypt, Argon2), le même matériel est des milliers de fois plus lent, et une attaque en ligne contre un formulaire de connexion l'est encore plus, car le service limite les tentatives. Le chiffre est volontairement pessimiste.

Ordres de grandeur : 40 bits arrêtent les attaquants occasionnels, 60 bits sont confortables pour un compte protégé par un hachage lent, 80 bits et plus sont sûrs face à n'importe qui dans un avenir prévisible, et 128 bits correspondent à ce que les cryptographes appellent « calculatoirement infaisable ». Tout ce que vous rangez dans un gestionnaire de mots de passe peut aussi bien faire 20 caractères ou plus, puisque vous ne le tapez jamais.

Mot de passe ou phrase de passe ?

Une phrase de passe comme ondule-panier-pilote-cinema-oignon-fossile est plus facile à lire à voix haute, à taper sur un téléphone et à retenir que x7$Kq!2pLm#9, et six mots donnent déjà 77 bits. Utilisez des phrases de passe pour les rares secrets que vous devez taper ou mémoriser : le mot de passe principal de votre gestionnaire, l'ouverture de session de votre ordinateur, le chiffrement du disque. Utilisez des caractères aléatoires pour tout ce que le gestionnaire retient à votre place.

Les listes de mots

Les deux listes contiennent exactement 7 776 = 65 mots, la taille utilisée par la méthode Diceware : numérotez les mots de 11111 à 66666 et vous pouvez les choisir en lançant cinq dés, sans aucun ordinateur. Les listes sont disponibles en texte brut dans ce format : en.txt et fr.txt.

Ce que ce site ne fait pas

En-têtes de sécurité

Chaque réponse du serveur porte les en-têtes ci-dessous. Vous pouvez les voir avec curl -I https://aleapass.com ou avec un vérificateur en ligne comme le HTTP Observatory de Mozilla.

Content-Security-Policy
default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self'; manifest-src 'self'; worker-src 'self'; connect-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'none' — seuls les scripts et styles du site peuvent s'exécuter, aucun code en ligne, aucune connexion réseau depuis la page, et la page ne peut pas être intégrée dans un autre site. (Le script du service worker reçoit sa propre politique, tout aussi stricte, qui l'autorise seulement à récupérer les fichiers du site pour le cache hors ligne.)
Strict-Transport-Security
les navigateurs doivent utiliser HTTPS pendant deux ans, sous-domaines compris.
Referrer-Policy: no-referrer
si vous suivez un lien d'ici, la destination n'apprend pas d'où vous venez.
Permissions-Policy
caméra, micro, géolocalisation, paiement, USB et l'API publicitaire Topics sont tous désactivés pour cette origine.
X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy
défense en profondeur contre la détection de type de contenu, le détournement de clic et les fuites entre origines.

Hors ligne et installable

Un petit service worker enregistre les fichiers du site dans votre navigateur lors de votre première visite : le générateur continue de fonctionner sans connexion et peut être installé comme une application depuis le menu de votre navigateur. Ce cache ne contient que les fichiers du site, jamais ce que vous avez généré. Quand une nouvelle version est publiée (l'identifiant de version en bas de page change), le cache est remplacé à votre visite suivante.

Limites, honnêtement

Un générateur aléatoire ne peut pas protéger un appareil déjà compromis : un logiciel malveillant, un enregistreur de frappe ou une extension de navigateur malveillante peut lire tout ce qui s'affiche à l'écran, cette page comprise. Générez vos mots de passe sensibles sur un appareil de confiance et, pour plus de prudence, dans une fenêtre privée avec les extensions désactivées. De même, ce site ne peut pas savoir ce qu'un site web fait du mot de passe que vous lui confiez ; c'est à cela que servent les mots de passe uniques et un gestionnaire de mots de passe.

Un problème ? Les coordonnées de contact sécurité sont publiées dans /.well-known/security.txt.