¿Generar múltiples códigos aleatorios únicos y seguros en Node.js? [duplicar]

-1

Estoy usando el siguiente método para generar múltiples códigos aleatorios únicos de 14 dígitos:

var randNum = Math.floor(Math.random() * timestamp * 100);
var number = randNum.toString().substr(0, 14);

¿Este método es seguro para generar múltiples códigos únicos? ¿Cuáles son las probabilidades de obtener códigos duplicados? ¿Hay algún otro algoritmo para generar un número aleatorio con menos complejidad de tiempo en el nodo js?

    
pregunta Abhijeet Singh 15.02.2018 - 09:09
fuente

1 respuesta

0

Como señalan los comentarios, probablemente está haciendo algo para lo que debe usar un generador de números criptográficamente seguro (pseudo) aleatorio. El estándar para Node es crypto.randomBytes .

Sin embargo, eso no responde a tu pregunta. Como resultado, la respuesta real involucra matemáticas un tanto complicadas pero es conocida; vea el Problemático de cumpleaños o cumpleaños Ataque (para el escenario de alguien que intenta causar un duplicado).

Sin embargo, como una aproximación aproximada, puedes pensar en la posibilidad de que cualquier duplicado de sea lo que sería la posibilidad de un duplicado de específico si hubiera la mitad de Muchos dígitos (la mitad de la entropía de bits). Es decir, con 14 dígitos, tiene 10 ^ 14 valores posibles, que es muy cercano a 2 ^ 46.5. Como tal, puede decir que hay 46.5 bits de entropía en sus códigos aleatorios. Solo hay una probabilidad de 1 / (2 ^ 46.5) de que cualquier código individual coincida con cualquier otro específico.

Sin embargo, cuando generas un montón de códigos, las posibilidades de colisión (duplicado) aumentan, mucho más rápido de lo que crees. Para cuando haya generado aproximadamente 10,000,000 códigos (10 ^ 7, o muy cerca de 2 ^ 23.25), en promedio, tendrá aproximadamente un duplicado (todas las estadísticas, por supuesto, es posible que no tenga duplicados, ni uno , o dos, o veinte ... pero uno sería el número más probable). Esto puede parecer un número grande, pero si está utilizando este código para algo serio, es demasiado pequeño. Deberías estar usando números mucho más grandes. Para las ID únicas, 128 bits (aproximadamente 3.4 * 10 ^ 38 valores posibles) es el número de tamaño estándar a utilizar. No intentes generar eso en base 10, por supuesto; Eso es tonto. Sin embargo, solo son 16 bytes completamente aleatorios.

    
respondido por el CBHacking 15.02.2018 - 12:18
fuente

Lea otras preguntas en las etiquetas