Herramienta de contraseñas Volver al generador

Guía de seguridad

Generación de contraseñas del lado del cliente con Web Crypto y muestreo por rechazo

Un documento técnico que explica el modelo de generación de contraseñas del lado del navegador de PwdGen, los límites de entropía, el muestreo por rechazo y los límites de privacidad.

Resumen

PwdGen utiliza un método de generación de referencia del lado del cliente: el navegador o el tiempo de ejecución Web Crypto proporciona bytes aleatorios, el muestreo por rechazo mapea esos bytes a índices acotados sin sesgo, y una mezcla de Fisher-Yates distribuye las clases de caracteres requeridas en la contraseña final. El método es intencionalmente pequeño, auditable y reproducible en la aplicación web, el adaptador de API, la CLI y el paquete preparado pwdgen-core.

Este documento describe el modelo de ingeniería. No es una afirmación de un nuevo primitivo criptográfico, un estándar formal o una auditoría independiente de terceros.

Fuente de aleatoriedad

El generador solicita valores aleatorios criptográficamente fuertes a través de crypto.getRandomValues(). Se espera que las implementaciones de Web Crypto utilicen un generador de números pseudoaleatorios criptográficamente seguro (CSPRNG) alimentado con entropía de alta calidad proporcionada por el entorno anfitrión. En la práctica, los navegadores delegan esta responsabilidad a las instalaciones del sistema operativo y a los proveedores criptográficos de la plataforma.

PwdGen no afirma que cada llamada de generación de contraseñas muestree directamente una fuente de ruido de hardware. La afirmación más segura y precisa es que el navegador suministra la salida del CSPRNG a través de la API Web Crypto, y que PwdGen evita interfaces pseudoaleatorias no criptográficas.

Por qué no Math.random()

Math.random() no está especificado para uso sensible a la seguridad. Es adecuado para simulaciones, efectos visuales y comportamiento de UI aleatorio ordinario, pero no proporciona las garantías esperadas para contraseñas, códigos de restablecimiento, claves de firma u otras credenciales.

PwdGen trata las alternativas pseudoaleatorias inseguras como un estado de fallo. Si Web Crypto no está disponible, el generador debería mostrar un error de compatibilidad en lugar de producir silenciosamente credenciales débiles.

Muestreo por rechazo

Los bytes y enteros aleatorios generalmente se extraen de un rango de potencia de dos. Los alfabetos de contraseñas rara vez tienen un tamaño que divida exactamente ese rango. Una operación de módulo directa puede hacer que algunos caracteres sean ligeramente más probables que otros.

PwdGen utiliza muestreo por rechazo:

  1. Obtener un entero sin signo de 32 bits.
  2. Calcular el múltiplo más grande del tamaño del alfabeto que quepa dentro del rango de 32 bits.
  3. Rechazar valores por encima de ese límite.
  4. Aplicar módulo solo al rango completo restante.

Esto mantiene la selección de caracteres acotada uniforme sin introducir sesgo de módulo medible.

Cobertura de caracteres y entropía

Para las políticas de contraseñas configuradas, el generador primero selecciona un carácter de cada clase habilitada, llena el resto del alfabeto combinado y luego mezcla el resultado. Esto ayuda a cumplir con las reglas de contraseñas de destino sin colocar una clase predecible en una posición predecible.

La estimación teórica de entropía es:

bits = length × log2(uniqueAlphabetSize)

Ese valor es un límite superior para elecciones uniformemente aleatorias del alfabeto configurado. No tiene en cuenta la reutilización de contraseñas, la salida editada por el usuario, dispositivos comprometidos, contraseñas filtradas o almacenamiento débil por parte del servicio de destino.

Límite de privacidad

En las herramientas del navegador, los valores generados permanecen en la memoria de la página y en los campos de resultados visibles hasta que el usuario los copia o exporta. Los generadores locales no envían las contraseñas generadas a los servidores de PwdGen, no las colocan en URL ni las escriben en eventos de análisis.

Este límite no protege contra extensiones maliciosas del navegador, administradores de portapapeles, compromiso del sistema operativo, captura de pantalla, páginas de phishing o un usuario que pega una contraseña generada en un destino inseguro.

Implementación reproducible

El paquete público pwdgen-cli y el paquete preparado pwdgen-core existen para mantener el modelo de generación inspeccionable fuera de la página web. Las pruebas unitarias cubren la inclusión de clases de caracteres, caracteres excluidos, configuraciones inválidas, fórmulas de entropía y la ausencia de rutas de código de respaldo pseudoaleatorias inseguras.

El objetivo no es convertir PwdGen en un estándar privado. El objetivo es hacer que la implementación sea lo suficientemente pequeña para que los desarrolladores puedan leerla, probarla y reemplazarla cuando su entorno requiera un límite de confianza diferente.

Fuentes