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 de lectura • Equip Q2BSTUDIO

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.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Intel·ligència artificial

Agents d'IA, chatbots i assistents intel·ligents que automatitzen tasques i atenen els teus clients 24/7 per millorar l'eficiència del teu negoci.

Més info

Desenvolupament de programari

Aplicacions web, mòbils i d'escriptori, intranets, e-commerce, SaaS i plataformes de gestió dissenyades per a les necessitats concretes de la teva empresa.

Més info

Serveis cloud

Migració, infraestructura, hosting gestionat, alta disponibilitat i seguretat en Microsoft Azure i Amazon Web Services perquè el teu negoci escali sense límits.

Més info

Ciberseguretat i pentesting

Auditories de seguretat, test d'intrusió (pentesting) i protecció d'aplicacions, dades i infraestructura on-premise i cloud, amb hacking ètic i compliment normatiu.

Més info

Business Intelligence

Quadres de comandament i anàlisi de dades amb Power BI: integrem les teves fonts, dissenyem dashboards i KPIs i convertim les teves dades en decisions.

Més info

Automatització de processos

Automatitzem tasques repetitives i connectem les teves aplicacions amb n8n, Power Automate, Make i RPA, eliminant treball manual i augmentant la productivitat.

Més info

Formació per a empreses

Formem els teus equips en tecnologia amb criteri: desenvolupament web, bases de dades, Git, bones pràctiques i seguretat, automatització amb n8n, intel·ligència artificial per a empreses i creació de solucions d'IA amb Azure AI Foundry.

Més info

Auditoria de codi

Auditem el codi que creguis tu, el teu equip o una IA: et diem què està bé i què millorar, el securitzem i el deixem llest per a producció, web o app.

Més info

Generació d'imatges amb IA

Creem per tu les imatges que necessita el teu negoci amb intel·ligència artificial: producte, xarxes, publicitat, il·lustració i avatars. Tu ens dius què vols i t'ho lliurem llest per fer servir.

Més info

Generació de vídeos amb IA

Creem per tu vídeos amb intel·ligència artificial: promocionals, per a xarxes, presentadors virtuals, doblatge i animacions. Ens comptes la idea i t'ho lliurem muntat i llest per publicar.

Més info

Avatars conversacionals amb IA

Creem avatars conversacionals amb IA —humans digitals amb cara i veu— que atenen els teus clients i equips amb el coneixement de la teva empresa, a la teva web, monitors interactius, WhatsApp o Teams.

Més info

Màrqueting Online i IA

Google Ads, Meta Ads, LinkedIn Ads i posicionament en motors d'IA (GEO/AEO): captem clients i fem que la teva marca aparegui on et busquen, també a ChatGPT, Gemini i Perplexity.

Més info

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.