Texto y herramientas cotidianas · Generador de contraseñas
PRNG vs CSPRNG: de dónde provienen realmente los números aleatorios de su navegador
· Antecedentes
contraseñas criptografía web csprng
Explica la diferencia entre generadores pseudoaleatorios y criptográficamente seguros, cómo los sistemas operativos recopilan entropía de eventos de hardware y cómo esa aleatoriedad llega a una página web a través de Web Crypto API.
Las computadoras son deterministas, entonces, ¿de dónde viene la aleatoriedad? — el rompecabezas básico detrás de cada generador
JavaScript que se ejecuta en ToolAcre comienza en un límite de API. Puede solicitar bytes de `crypto.getRandomValues`, observar si esa llamada tiene éxito y usar la matriz devuelta. No puede inspeccionar todos los eventos físicos, grupos de kernel o componentes de hardware que una plataforma en particular pueda usar debajo. Por lo tanto, la historia del origen de la aleatoriedad en el libro de trabajo excede la evidencia local.
Una explicación técnicamente honesta comienza donde comienza la observación. La aplicación prueba Web Crypto, el motor lo envuelve y todas las selecciones consumen esa fuente. Los componentes internos específicos de la plataforma necesitan documentación y auditorías de la plataforma, no una declaración genérica inferida del nombre del método del navegador.
El repositorio comienza en la API del navegador; no audita las fuentes físicas de entropía
Los generadores pseudoaleatorios a menudo se describen mediante semillas y estado reproducible, pero este repositorio no requiere que los motores JavaScript compartan un diseño Math.random. ToolAcre evita la ambigüedad al prohibir la API por completo en la producción de credenciales. Los escaneos de fuentes hacen cumplir esa garantía negativa.
Las pruebas aún necesitan bytes deterministas, por lo que inyectan objetos que exponen `getRandomValues` a través de un parámetro interno. Estas falsificaciones se encuentran en soporte de prueba y no se exportan como modo de producción inicial. La capacidad de prueba no crea una opción de usuario oculta para contraseñas repetibles.
Math.random está prohibido aquí, sin reclamar un diseño PRNG universal
El producto utiliza "criptográfico" de forma limitada: la interfaz del navegador requerida es Web Crypto y la generación falla cuando está ausente o es inutilizable. La aplicación llama al método durante la detección en lugar de verificar solo su tipo, detectando entornos restringidos donde se produce la invocación.
Ese contrato no promete resistencia a cada estado hipotético comprometido ni certifica la implementación de un navegador. Demuestra qué API solicita la página y que no hay ningún respaldo más débil conectado a ella. La integridad del dispositivo permanece fuera del generador.
La propiedad criptográfica verificada es la fuente de Web Crypto requerida y la ruta de rechazo.
Los eventos de temporización, las instrucciones del procesador dedicado, los programas de reinicialización y los grupos de entropía del sistema operativo se encuentran todos debajo de la superficie de la API web. Aquí no se afirma ninguno porque la fuente del paquete no puede verificarlos. Un futuro artículo específico de la plataforma necesitaría documentación primaria para cada entorno que describa.
La omisión fortalece en lugar de debilitar el reclamo actual. ToolAcre puede decir exactamente qué le pide al navegador que haga y cómo trata los bytes. No es necesario fingir que JavaScript puede auditar la cadena de entropía completa para justificar el rechazo de Math.random.
Los detalles del evento de hardware y del grupo de sistemas operativos son afirmaciones de implementación que esta fuente no prueba
`getRandomValues` llena un tamaño `Uint8Array` del límite exclusivo solicitado. `secureRandomInt` ensambla esos bytes como un número big-endian sin signo, calcula la ventana de aceptación divisible más grande y descarta los valores del resto. Luego, el valor aceptado se reduce a un índice.
Las palabras, los delimitadores, los caracteres y los intercambios aleatorios reutilizan esta ruta. Un único punto de estrangulamiento hace que la cadena de elección del navegador sea revisable y garantiza que la reparación de la reducción limitada afecte a cada modo de generación en lugar de a una persona que llama olvidada.
De getRandomValues a SecureRandomInt: la ruta visible del navegador al índice
Para un grupo de palabras 7,776, la función selecciona suficientes bytes para representar cada índice válido. Forma un número entero, rechaza cualquier valor igual o superior al límite calculado y devuelve el resto solo después de la aceptación. `secureRandomChoice` usa ese resultado para leer una palabra de la matriz elegible.
El índice de producción particular es privado y no debe reproducirse en la documentación. En cambio, las pruebas deterministas alimentan bytes de cola conocidos y dentro del rango para demostrar el flujo de control. Esto traza una selección sin convertir una frase generada en un ejemplo público.
Ejemplo resuelto: rastrear bytes a través del muestreo de rechazo hasta un índice de lista
El paquete no cubre el diseño del generador de números aleatorios de hardware ni las pruebas criptográficas formales. Tampoco lo son los tiempos de ejecución de servidores ni las aplicaciones nativas. La implementación es un generador de navegador y sus garantías no deben copiarse en sistemas no relacionados.
Tampoco aborda el almacenamiento ni el uso posterior. Un valor seleccionado a través de Web Crypto aún puede quedar expuesto por reutilización, phishing, historial del portapapeles o malware. La elección de CSPRNG resuelve el problema de origen, no todos los problemas de manejo de credenciales.
La conclusión: el generador de contraseñas pregunta al generador criptográfico del navegador cuál es la fuente correcta de un secreto.
La cadena procesable es corta: probar que Web Crypto funciona, rechazar la generación cuando no lo hace, llenar bytes, rechazar una cola desigual y asignar el valor aceptado a un índice. ToolAcre hace visible cada paso y prueba límites difíciles.
Revise esa cadena en lugar de confiar en una etiqueta vaga "aleatoria". Luego revise el punto final y el destino por separado. La API criptográfica del navegador es la fuente correcta para este producto, pero el repositorio no pretende certificar lo que hay debajo ni todo lo que sigue.