Genera più codici casuali univoci sicuri in Node.js? [duplicare]

-1

Sto utilizzando il metodo seguente per generare più codici casuali univoci di 14 cifre:

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

Questo metodo è sicuro per la generazione di più codici univoci? Quali sono le probabilità di ottenere un codice duplicato? C'è qualche altro algoritmo per generare un numero casuale con meno complessità temporale nel nodo js?

    
posta Abhijeet Singh 15.02.2018 - 09:09
fonte

1 risposta

0

Come i commenti sottolineano, probabilmente stai facendo qualcosa per cui dovresti usare un generatore di numeri casuali (pseudo-) crittograficamente sicuro. Quello standard per il nodo è crypto.randomBytes .

Tuttavia, questo in realtà non risponde alla tua domanda. A quanto pare, la risposta effettiva implica una matematica un po 'complicata, ma è nota; vedere il problema di compleanno o Compleanno Attacco (per lo scenario di qualcuno che cerca di causare un duplicato).

Per approssimazione, però, puoi pensare alla possibilità che qualsiasi duplicato riguardi la possibilità di un duplicato specifico se ci fosse metà molte cifre (metà dell'entropia dei bit). Cioè, con 14 cifre, hai 10 ^ 14 valori possibili, che è molto vicino a 2 ^ 46.5. In quanto tale, puoi dire lì a 46.5 bit di entropia nei tuoi codici casuali. C'è solo una possibilità 1 / (2 ^ 46.5) di ogni singolo codice corrispondente a uno specifico altro singolo.

Tuttavia, quando generi una serie di codici, le probabilità di una collisione (duplicata) aumentano, molto più rapidamente di quanto pensi. Nel momento in cui hai generato circa 10.000.000 di codici (10 ^ 7, o molto vicini a 2 ^ 23.25), avrai in media circa un duplicato (sono tutte statistiche, ovviamente, potresti non avere duplicati o uno , o due, o venti ... ma uno sarebbe il numero più probabile). Potrebbe sembrare un numero elevato, ma se usi questo codice per qualcosa di serio, è troppo piccolo. Dovresti usare numeri molto più grandi. Per ID univoci, 128 bit (circa 3,4 * 10 ^ 38 valori possibili) è il numero di dimensioni standard da utilizzare. Non cercare di generarlo nella base 10, ovviamente; è sciocco. Tuttavia, sono solo 16 byte completamente casuali.

    
risposta data 15.02.2018 - 12:18
fonte

Leggi altre domande sui tag