Math.random() no es seguro para contraseñas: la solución Web Crypto

Aprende por qué Math.random() es inseguro para contraseñas y cómo usar crypto.getRandomValues() para tokens robustos. Evita sesgo de módulo.

11 jun 2026 • 4 min read • Q2BSTUDIO Team

Cómo generar tokens seguros con crypto.getRandomValues()

La generación de tokens aleatorios es un pilar fundamental en la seguridad de aplicaciones modernas. Sin embargo, no todas las funciones de aleatoriedad son adecuadas para este propósito. Durante años, Math.random() ha sido la opción predeterminada en JavaScript por su simplicidad, pero su uso en contextos de ciberseguridad representa un riesgo real. Este artículo explora por qué esta función no debe emplearse para contraseñas o tokens de sesión, y cómo la Web Crypto API ofrece la solución correcta. Además, abordaremos dos errores comunes al implementar alternativas seguras y cómo las empresas pueden integrar estas prácticas en sus aplicaciones a medida.

El problema de Math.random()En motores como V8 (Chrome y Node.js), Math.random() utiliza el algoritmo xorshift128+, un generador pseudoaleatorio con 128 bits de estado interno. Aunque sus números pasan pruebas estadísticas y parecen aleatorios, son deterministas. Con suficientes muestras consecutivas (entre 64 y 128 llamadas), un atacante puede recuperar el estado interno mediante herramientas públicas y predecir todos los valores futuros. Para una animación o una simulación esto es irrelevante, pero para generar contraseñas, claves API o tokens de restablecimiento, la predecibilidad es una vulnerabilidad crítica. En Q2BSTUDIO, al realizar auditorías de ciberseguridad, encontramos con frecuencia este patrón en desarrollos propios, lo que demuestra la necesidad de educar a los equipos técnicos.

La solución: crypto.getRandomValues()La Web Crypto API proporciona un generador criptográficamente seguro (CSPRNG) que extrae entropía del sistema operativo (por ejemplo, /dev/urandom en Linux o BCryptGenRandom en Windows). No existe estado recuperable; observar salidas pasadas no revela información sobre futuras. El uso básico es sencillo: crear un Uint32Array de un elemento, llamar a crypto.getRandomValues() y después reducir el valor al rango deseado. Sin embargo, surgen dos gotchas que incluso desarrolladores experimentados pasan por alto.

Gotcha 1: Sesgo de móduloAl aplicar el operador módulo sobre un número aleatorio, la distribución puede desviarse si el rango del generador no es múltiplo exacto del alfabeto. Por ejemplo, al usar un solo byte (0-255) con un alfabeto de 62 caracteres, algunos símbolos aparecen un 25% más a menudo. La solución teórica es el muestreo por rechazo: descartar valores en la cola sesgada y volver a generar. Sin embargo, si se utiliza un entero de 32 bits (rango hasta ~4.29 mil millones) y un alfabeto de 94 caracteres, el sesgo es minúsculo (0.0000022%). En la práctica, para contraseñas humanas, ese nivel de ruido es irrelevante, por lo que muchos equipos omiten el rechazo para mantener el código simple. No obstante, en contextos de ia para empresas o generación de claves criptográficas, se recomienda aplicar el rechazo para eliminar cualquier sesgo.

Gotcha 2: Límite de 64 KB por llamadaLa especificación de getRandomValues() limita las solicitudes a 65.536 bytes (64 KB) por invocación. Si se necesita generar un lote grande de tokens o llenar un buffer extenso, es necesario dividir la petición en fragmentos más pequeños. Este límite está documentado pero suele omitirse en tutoriales básicos, provocando errores silenciosos o excepciones QuotaExceededError. Una función auxiliar que itere en bloques de 64 KB resuelve el problema. Al diseñar software a medida para clientes que manejan grandes volúmenes de tokens de autenticación, en Q2BSTUDIO incorporamos estas comprobaciones para garantizar robustez.

Más allá del token: capas de seguridadUna contraseña generada con un CSPRNG soluciona el problema de predecibilidad, pero no protege contra phishing, credenciales reutilizadas o filtraciones de bases de datos. La estrategia correcta combina varias capas: usar un gestor de contraseñas, activar la autenticación de dos factores con hardware, y aplicar políticas de rotación. En el ámbito de los servicios cloud AWS y Azure, la generación segura de tokens es solo un eslabón de la cadena de seguridad. Asimismo, los servicios inteligencia de negocio como Power BI requieren tokens de acceso robustos para proteger datos sensibles.

En Q2BSTUDIO integramos estas prácticas en todos nuestros desarrollos, desde sistemas de autenticación para agentes IA hasta plataformas de automatización de procesos. La generación de tokens seguros es un ejemplo de cómo pequeños detalles técnicos pueden tener un gran impacto en la ciberseguridad general de un producto. Incluso en proyectos de inteligencia artificial, donde la aleatoriedad se usa para simulaciones o generación de datos, recomendamos evitar Math.random() cuando la seguridad sea relevante.

La lección fundamental es que el código que 'funciona' no siempre es el correcto. Math.random() funciona; crypto.getRandomValues() es correcto. En un mundo donde las amenazas evolucionan constantemente, elegir las herramientas adecuadas marca la diferencia entre una aplicación vulnerable y una robusta.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.