2013-03-18 1 views
4

Étant donné une série de nombres générés par rand(), comment puis-je prédire la valeur suivante? La force brute est hors de question. Je suis conscient que rand() est fondamentalement un générateur congruentiel linéaire, mais fait également un décalage de bits. Quelle théorie puis-je utiliser pour le craquer? Tous les conseils seront les bienvenus :)Prédiction du prochain nombre généré par C (glibc) rand()

+0

J'ai lu quelque part (Wikipedia ???) vous avez besoin de 650 (?) Résultats pour identifier la séquence PRNG et où vous vous trouvez. Vous pourriez aimer l'article de Wikipedia ["Random number generator attack"] (http://en.wikipedia.org/wiki/Random_number_generator_attack). – pmg

+0

C'est peut-être un spoiler, mais vous pouvez bien sûr commencer par [lire le code] (http://repo.or.cz/w/glibc.git/blob/HEAD:/stdlib/random.c) pour comprendre à quoi s'attendre ... – unwind

+1

Les glibs Iirc utilisent un simple LCG pour rand_r() et les alias rand()/random() ensemble ==> essayez rand_r(). – loreb

Répondre

4

@unwind: merci pour le conseil! Je me suis trompé à certains endroits, et la documentation m'a mis sur la bonne voie.

En fait, la prédiction est un morceau de gâteau lorsque vous connaissez une séquence de 30 (ou plus) nombres. La réponse 'calculée' sera exacte dans 50% des cas. Plus de détails présents dans le lien fourni par unwind, ou dans un code simplifié: http://www.mathstat.dal.ca/~selinger/random/

+1

Répondez-vous à votre propre question? Ou est-ce une modification? –

+0

Je voulais y répondre. La réponse stricte et précise est vraiment évidente après avoir regardé le code. Au lieu de donner une réponse directe, j'ai décidé de laisser un lien utile. Le problème se résout littéralement après une courte conférence :) – user1851752

Questions connexes