Cosa rende un generatore pseudocasuale uno di alta qualità?


8

Leggendo questa risposta a questa domanda SO: Perché non combiniamo generatori di numeri casuali? , ne parla

PRNG di alta qualità (generatore di numeri casuali pseudo)

quindi mi chiedo cosa costituisca un PRNG di alta qualità, suppongo che si possa riassumere in quanto "più casuale", ma

  • Domanda 1: Quali qualità di un PRNG sono usate per descrivere quanto sia "casuale" o "buono"?

  • Domanda2: se si dispone di un PRNG di "cattiva qualità", esiste un modo per migliorarlo?



2
È inoltre necessario distinguere i PRNG banali dai RNG crittograficamente sicuri.
adrianN,

1
Un PRNG è "migliore" se è più difficile distinguere il suo output da bit completamente casuali.
Yuval Filmus,

Risposte:


9

Esistono diversi criteri per la qualità di un PRNG:

  • Quanto è veloce. Ciò include quanto è veloce per configurarlo e quanto è veloce per produrre un singolo bit (ammortizzato).
  • È difficile indovinare il bit successivo dato tutti i bit precedenti.
  • Quanto è difficile distinguere tra output del PRNG e bit veramente casuali.

Gli ultimi due criteri sono fortemente correlati.

Se hai un PRNG di cattiva qualità, spesso puoi migliorarlo con l' amplificazione della durezza . Prendi diverse copie del PRNG (usando diversi tasti casuali) e XOR insieme. In molti (sebbene non in tutti) casi ciò migliorerà in modo significativo la sua qualità.


Solo un'altra domanda: perché usare un PRNG che causerà la stessa sequenza se lo stesso seme viene usato due volte e non solo ottenere un nuovo seme (ad esempio l'orologio della CPU) ogni volta che è necessario un nuovo numero casuale? questo approccio non sarebbe più casuale?
Jose

2
@Jose Questo è di design. In molti casi si desidera essere in grado di generare più volte la stessa sequenza esatta. Due esempi sono gli esperimenti Monte Carlo (che dovrebbero essere ripetibili) e la crittografia (dove vogliamo che due utenti possiedano la stessa sequenza casuale, usata come chiave).
Yuval Filmus,

Gli esperimenti di Monte Carlo hanno raramente bisogno di un PRNG crittografico.
Xavier Combelle,

2

Ci sono considerazioni pratiche: quanto è facile da usare? Quanto velocemente? Quanto è facile produrre una diversa sequenza di numeri casuali? È facile riprodurre i numeri casuali (ad esempio, se hai generato 10 miliardi di numeri casuali, puoi generare di nuovo esattamente gli stessi 10 miliardi di numeri casuali?)

La grande domanda: i numeri generati si comportano come una sequenza di numeri casuali? Il primo PRNG che io abbia mai usato aveva la bizzarra proprietà che di due valori consecutivi, il secondo era più grande con probabilità circa 0,6. Non molto casuale. Quindi puoi eseguire tutti i tipi di test statistici e verificare se il tuo generatore di numeri casuali si comporta in modo casuale. Più si comporta come casuale, meglio è.

E poi arriva la casualità crittografica. Se ti do gli ultimi n numeri casuali e conosco completamente come si comporta il generatore di numeri casuali, puoi prevedere il prossimo numero casuale? Se sì, ciò lo rende inadatto in situazioni in cui si hanno avversari.


0

Aggiungerei una distribuzione uniforme all'elenco delle qualità desiderate.


Resta generalmente inteso che un PRNG genera una distribuzione uniforme (o quasi).
vonbrand
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.