Qué se defiende
- Registros de red: un único sprite SVG idéntico para todos, precacheado. Nada derivado de tus palabras viaja por red. Test automatizado: 0 peticiones tras pulsar Generar.
- Miradas ajenas: contraseña oculta por defecto, revelado por palabra en práctica.
- XSS: sin HTML inyectado de terceros, CSP estricta, sin scripts externos. El sprite se sanitiza en build (sin scripts ni handlers).
- Persistencia accidental: nada en
localStorage, cookies, historial ni URL. Solo el modo estudio guarda una huella hash de una desechable. - Sesgo: muestreo por rechazo sobre
crypto.getRandomValues. ProhibidoMath.randomen el núcleo (regla automatizada).
Qué NO se promete
- Dispositivo con malware o keyloggers, extensiones maliciosas.
- Capturas de pantalla o pantalla compartida (se avisa en la app).
- Borrado garantizado de memoria en JavaScript (no es fiable; el auto-bloqueo a los 5 minutos y la limpieza al ocultar la página son mitigación, no garantía).
Cómo verificarlo tú
- DevTools → Network → pulsa Generar: 0 peticiones.
node scripts/validate-wordlist.mjsvalida la lista (colisiones, fonética, denylist, iconos).- Compara el hash del build publicado en cada release con tu build local.
- Lee el código: el núcleo cabe en
src/lib/password/.
Principio de Kerckhoffs: el atacante conoce el método y la lista. La seguridad viene solo de la aleatoriedad. La escena y la frase no añaden entropía.
Atribución
Iconos: Fluent Emoji, © Microsoft, MIT (vía @fluentui-emoji/sprite). Nombres base de emoji en build-time: emojibase-data (ver su licencia). Evitamos decir: inquebrantable, 100 % seguro, imposible de hackear.