Mit einem RNG-Algorithmus und einer Reihe von Zahlen ist es möglich zu bestimmen, welcher Seed die Serie erzeugen würde?

8

Der Code ist in Objective C, aber es sollte verständlich sein, wenn Sie es sich ansehen, selbst wenn Sie Objective C nicht kennen. Im Grunde ist es ein RNG-Objekt, Sie instanziieren eine neue Instanz, setzen den Seed, wenn Sie wollen und fangen an zu greifen Zufallszahlen.

Ist es also möglich, eine bestimmte Reihe von Zahlen zurückzuverfolgen, um den Anfangswert für die Generierung der Zahlen zu bestimmen? Ich vermute, dass ein beliebiger Algorithmus keine zufällige Menge von Zahlen erzeugen kann, oder?

Sagen Sie Folgendes:

%Vor%

Was mir die Sequenz 10, 10, 8, 10, 2, 10, 9, 9, 7, 4 gibt. Gibt es eine Methode oder einen Algorithmus, den ich verwenden könnte, um die Zahl 1024 zu erhalten? Ich weiß, das ist die gültige Sequenz für die 1024 gesehen, aber was mache ich nur eine Sequenz ... 10, 1, 9, 6, 3, 9, 10, 3, 5, 2 . Gibt es eine Möglichkeit zu wissen, ob das eine gültige Sequenz für diesen Algorithmus ist und wenn ja, was der Seed ist?

RNG.h:

%Vor%

RNG.m:

%Vor%     
Justin808 16.08.2012, 08:18
quelle

3 Antworten

3

Dies sieht wie ein "linearer kongruenter Generator" aus, siehe Ссылка "?

Diese bieten keine gute kryptografische Sicherheit, also sollte es möglich sein, einen Seed zu berechnen, der die Sequenz erzeugt.

    
mgaert 16.08.2012 08:57
quelle
3

Der Code, den Sie posten, ist im Grunde der gleiche wie der openbsd srandom - Es ist ein linearer Kongruenzgenerator, der implementiert wird, um Rundungen zu vermeiden (weshalb er Q enthält).

hier ist ein Papier, wie man einen solchen Generator knackt , aber es erwartet die volle Ausgabe (nicht die "zwischen" Wert) verfügbar sein.

Ich denke, Sie sollten in der Lage sein, den Ansatz im Papier zu erweitern, um mit "arithmetisch" zu arbeiten, indem Sie den Bereich verwenden (vermutlich würden Sie mehr Proben benötigen).

    
andrew cooke 16.08.2012 13:19
quelle
0

Am besten ist es wahrscheinlich, ein Array (oder eine Datei) zu erstellen, das den ersten vom angegebenen Algorithmus für jeden Seed zurückgegebenen Wert enthält. Dann kurbeln Sie einfach diejenigen an, die mit dem ersten Wert übereinstimmen, und suchen Sie nach einem längeren Match. In der Tat wäre eine Datenbanktabelle großartig - gdbm oder bsddb oder sqlite kommen mir in den Sinn.

Das klingt für mich wie eines dieser "Es ist berechenbar, aber ..." Probleme. IOW, es kann gemacht werden, aber es ist nicht besonders hübsch.

    
user1277476 16.08.2012 19:38
quelle

Tags und Links