QNA > C > C'è Un Modo Per Imbrogliare Il Generatore Di Numeri Casuali?

C'è un modo per imbrogliare il generatore di numeri casuali?

Dipende da cosa intendi per "barare" e cosa intendi per "generatore di numeri casuali"

Io uso la seguente interpretazione. Per favore chiarisci se intendevi qualcos'altro.

  • Cheat: indovinare l'uscita del generatore di numeri casuali con una probabilità superiore a quella suggerita dalla distribuzione attesa dell'uscita del generatore.
  • Generatore di numeri casuali: Un generatore di numeri pseudo-casuali (PRNG) come quello che si trova tipicamente in molti linguaggi di programmazione.

L'ultimo punto è importante: se state usando una vera fonte di casualità, allora non potete davvero barare, a meno che qualcuno non abbia compromesso la sua integrità (secondo la definizione di barare del primo punto).

Per prevedere l'output di un PRNG, dovete sapere qualcosa sia dell'algoritmo che usa, sia del suo stato interno. Se si osservano abbastanza uscite da una PRNG, si può essere in grado di ricostruire parte o tutto il suo stato interno.

Perché le PRNG sono deterministiche, se si ha il suo stato interno completo, si può prevedere esattamente il suo output. Se avete un sottoinsieme del suo stato interno, potete escludere un sottoinsieme delle possibili uscite.

Quante uscite avete bisogno di osservare per ricostruire quello stato interno?

Se la PRNG è costruita bene, quel numero potrebbe essere abbastanza grande. Potrebbe anche essere intrattabilmente grande. E, se la PRNG ingerisce nuovo stato non deterministico durante il suo funzionamento, potreste non imparare mai abbastanza per prevedere un particolare valore restituito da essa.

Ma, cosa succede se non è costruita bene? Un semplice PRNG potrebbe essere facile da prevedere dopo aver osservato solo alcuni output. Se avete, per esempio, una RNG congruente lineare e restituite l'intero seme come risultato, avete bisogno di un solo output.

Anche se è costruita abbastanza bene, la PRNG può avere altre debolezze.

Per esempio, una PRNG può avere varie carenze che fanno sì che il suo output abbia certe proprietà statistiche che potete sfruttare, come "alta correlazione tra ogni N° numero," o "non produce mai più di N valori uguali in una riga." (Quest'ultimo è più importante per i flussi di output binari.)

C'è quindi un modo? Sì, forse, ma dipende dai dettagli dell'implementazione.

Di Tacye Pettingill

Come guadagnare soldi dallo sviluppo e dalla pubblicazione di applicazioni Android :: Come aggiungere parole chiave per la mia app nell'App Store
Link utili