2009-03-06 7 views
0

Ist es nicht einfach möglich, einen PRNG so zu konstruieren? Warum ist es nicht getan?Pseudo-Zufallszahlengenerator aus einer berechenbaren Normalzahl

Das heißt, soweit ich weiß, könnten wir einfach eine PRNG haben, die einen Seed n nimmt. Wenn Sie nach einem zufälligen Bit fragen, nimmt es die n-te Stelle der binären Erweiterung der berechenbaren normalen Zahl und erhöht n.

Mein erster Gedanke war, dass wir vielleicht eine berechenbare normale Zahl nicht gefunden hatten, aber wir have. Der verbleibende Gedanke ist, dass es einen guten Grund gibt, nicht - entweder gibt es eine Eigenschaft von PRNGs, die ich nicht kenne, die eine solche Methode nicht hätte, oder sie wäre irgendwie unpraktisch, oder sie wird anderweitig durch andere Methoden überholt.

+0

Werfen Sie einen Blick auf dieses Papier: http://www.emis.de/journals/EM/expmath/volumes/11/11.4/pp527_546.pdf – dirkgently

+0

Was ist ein PSRG? meinst du PRNG? – hop

+0

ja, ja ich tue. Ich weiß nicht, wie ich das gemischt habe, aber ich habe es getan. Ich sehe mir die Zeitung in ein paar Stunden an - ich muss los. –

Antwort

3

Das würde die Vorhersage der Ausgabe wirklich einfach machen.

Sagen Sie zum Beispiel, Sie generieren die Ganzzahl 0x54a30b7f. Wenn Sie 4 Pi von Pi (oder zufälliges Rauschen oder eine tatsächliche normale Zahl) haben, wird es wahrscheinlich nur ein (oder vielleicht eine Handvoll) Vorkommen dieser bestimmten Ganzzahl geben und ich kann mit einer ziemlich hohen Wahrscheinlichkeit alle zukünftigen Zahlen vorhersagen. Dies ist ein ernstes Problem im Falle von kryptographisch starken PRNGs. Wenn Sie anstelle des einfachen sequenziellen Scans eine Funktion verwenden, muss ich nur der Funktion folgen, die, wenn es schwierig genug ist, zu einem eigenen PRNG wird.

Wenn Sie sich nicht um die kryptographische Stärke Ihres Generators kümmern, gibt es viel kompaktere Möglichkeiten, Zufallszahlen zu generieren. Beispielsweise hat Mersenne Twister einen viel größeren Zeitraum, ohne dass eine 4GiB-Nachschlagetabelle benötigt wird.

+0

Erstens, pi (zusammen mit den meisten anderen solchen Konstanten, wie sqrt (2) und e) hat sich nicht als normal erwiesen. Zweitens ist es berechenbar und, was noch wichtiger ist, man kann die n-te Ziffer von pi berechnen, ohne n-1 zu berechnen, wodurch eine Nachschlagetabelle unnötig wird. Werde mehr in einem neuen Kommentar sagen. –

+0

Es tut uns leid, Postgrößenbeschränkung. Zweitens, die Sache mit einer normalen Zahl ist, dass eine beliebige Anzahl unendlich oft in der Erweiterung vorkommen wird. Außerdem wird es genauso wahrscheinlich wie jede andere Nummer sein. Wenn man also den vollen oder beliebig großen Bereich einer normalen Zahl betrachtet, ist es nicht möglich zu erraten. –

+0

... Aber dann müsste dein Seed größer als 32 Bit sein (sonst verwendest du nur das erste 4GiB) und die Generierung des Seeds müsste so sicher sein, dass ich das nicht einfach angreifen kann. –