Herramienta de contraseñas Volver al generador

Guía de seguridad

Por qué Math.random no es seguro para contraseñas

Aprende por qué Math.random es adecuado para efectos de interfaz de usuario, pero no para contraseñas, códigos de restablecimiento, tokens u otros secretos sensibles a la seguridad.

Resumen

Math.random() es una función pseudoaleatoria general de JavaScript. Es útil para animaciones, comportamiento aleatorio de la interfaz de usuario, ejemplos, juegos y simulaciones. No está especificada para seguridad criptográfica y no debe usarse para generar contraseñas, códigos de restablecimiento, secretos de API, claves de firma o tokens de recuperación.

El problema

Un generador de contraseñas necesita imprevisibilidad frente a un atacante, no solo valores que parezcan variados para un usuario. Math.random() no proporciona una garantía de seguridad criptográfica estándar del navegador, y las implementaciones pueden diferir entre motores.

La opción más segura en el navegador

Los navegadores modernos proporcionan crypto.getRandomValues() a través de la API Web Crypto. PwdGen utiliza esa interfaz y muestreo por rechazo, lo que evita la selección sesgada de caracteres. Si esa API no está disponible, el comportamiento seguro es detener la generación y explicar el requisito de compatibilidad.

Cómo revisar un generador

Busca en el código fuente Math.random. Un generador de contraseñas serio no debería usarlo para los caracteres de la contraseña. Puede aparecer en la documentación explicando por qué no es seguro, pero no en la ruta de generación.

Guía detallada

Esta guía se centra en por qué Math.random no es apropiado para contraseñas y secretos. Está escrita para desarrolladores, estudiantes y usuarios de herramientas que verifican si un generador utiliza aleatoriedad segura, por lo que el objetivo práctico no es crear una afirmación de seguridad dramática. El objetivo es elegir un hábito de contraseñas que pueda sobrevivir al uso diario: formularios de inicio de sesión, gestores de contraseñas, teclados móviles, recuperación de cuentas, dispositivos compartidos y servicios ocasionales con reglas de validación extrañas. Una recomendación segura solo es útil si una persona real puede seguirla de manera consistente.

El punto de partida más seguro es aleatoriedad más unicidad. Aleatoriedad significa que el valor se selecciona de un espacio grande mediante una fuente aleatoria criptográficamente adecuada, no inventado a partir de un cumpleaños, el nombre de una mascota, un patrón de teclado o una cita favorita. Unicidad significa que la misma contraseña no se usa en ningún otro lugar. Una contraseña larga pero reutilizada puede fallar rápidamente después de una filtración no relacionada, mientras que una contraseña única y aleatoria limita el daño a la única cuenta donde se usó.

Para este tema, un ajuste práctico es crypto.getRandomValues con muestreo por rechazo en lugar de Math.random. Puedes aplicar ese ajuste con la guía de Web Crypto API y luego almacenar el valor final en un gestor de contraseñas de confianza. PwdGen genera valores localmente en el navegador con Web Crypto; la contraseña generada no se envía a un servidor de PwdGen. Ese diseño local reduce la exposición del lado del servidor, pero no protege contra todas las amenazas. Una extensión maliciosa del navegador, un dispositivo comprometido, una página de phishing o un manejo inseguro del portapapeles aún pueden exponer un secreto después de generado.

Los problemas más comunes a evitar son secuencias pseudoaleatorias predecibles, sesgo de módulo, funciones aleatorias personalizadas y código de demostración copiado a producción. Estos problemas importan porque los atacantes rara vez necesitan forzar por fuerza bruta todas las contraseñas posibles cuando los hábitos humanos les dan un atajo. El relleno de credenciales, el phishing, las listas de contraseñas filtradas y el abuso de recuperación de cuentas suelen ser más realistas que una búsqueda matemática pura. Por eso, el mejor consejo combina la calidad de la contraseña con controles a nivel de cuenta como MFA, claves de acceso, almacenamiento de códigos de recuperación y revisión periódica del correo electrónico o teléfono de recuperación.

Usa esta lista de verificación al aplicar la recomendación:

Si un sitio web rechaza la configuración ideal, no fuerces la contraseña a un patrón más débil manualmente. Ajusta una variable a la vez. Si se rechazan los símbolos, mantén mayúsculas, minúsculas y números habilitados y aumenta la longitud. Si la longitud máxima es baja, usa la longitud aceptada más grande y asegúrate de que el valor sea único. Si una contraseña debe leerse en voz alta, imprimirse o escribirse en una pantalla de televisión o enrutador, considera excluir caracteres confusos y aumentar la longitud para compensar el alfabeto más pequeño.

Finalmente, recuerda el límite del consejo sobre contraseñas. Una contraseña fuerte es una capa de defensa, no una garantía. No puede hacer que una página de phishing sea segura, arreglar malware ni compensar un servicio que almacena credenciales de manera deficiente. El hábito útil es aburrido pero duradero: genera un valor único, guárdalo de forma segura, protege la ruta de recuperación y reemplázalo rápidamente si sospechas exposición.

Un próximo paso seguro

Después de leer esta guía, haz una pequeña auditoría de cuentas en lugar de intentar arreglar todo a la vez. Elige la cuenta que causaría más problemas si fuera tomada, confirma que su contraseña es única y verifica el correo electrónico de recuperación, el teléfono de recuperación, el método MFA y el almacenamiento de códigos de respaldo. Si alguna parte de esa cadena es débil, mejora esa parte antes de pasar a cuentas de menor riesgo. Este orden mantiene el trabajo manejable y protege las cuentas que los atacantes probablemente usarán como trampolín. Sobre por qué Math.random no es seguro para contraseñas, el mejor resultado es un hábito repetible: generar localmente, almacenar con cuidado y evitar la reutilización.

Preguntas frecuentes

¿Está bien Math.random alguna vez?

Sí, para efectos visuales, simulaciones y aleatoriedad normal de la interfaz de usuario, pero no para credenciales o tokens de seguridad.

¿Qué deberían usar los generadores de contraseñas en su lugar?

Deberían usar una fuente aleatoria criptográfica como crypto.getRandomValues() en el navegador.

¿PwdGen recurre a Math.random?

No. Si Web Crypto no está disponible, PwdGen muestra una advertencia de compatibilidad y no genera contraseñas con Math.random().

Fuentes