Est-il possible d'obtenir une approximation à une graine basée sur une séquence finie de nombres aléatoires pseudo?

StackOverflow https://stackoverflow.com/questions/2145554

  •  23-09-2019
  •  | 
  •  

Question

suppose que j'ai quelques chiffres qui forment une série par exemple: 652,328,1,254 et je veux une graine que si je, par exemple, faire

srand(my_seed);

Je vais obtenir une sorte d'approximation avec erreur bornée à ma séquence origonal, lorsque tous les numéros qui apparaissent dans le même ordre.

Était-ce utile?

La solution

dépend de l'algorithme utilisé pour la génération pseudo-aléatoire. Si l'algorithme est un href="http://en.wikipedia.org/wiki/Linear_congruential_generator" simple générateur congruence linéaire , puis obtenir la graine est de retour juste une question de la résolution d'une équation linéaire modulaire (à noter que la solution peut être non-unique, mais un tel générateur est moins de mémoire, cela n'a pas d'importance).

Si l'algorithme est plus complexe, cela peut être impossible.

Notez que l'algorithme utilisé dans la bibliothèque standard C ne se limite pas à la norme, si différentes plates-formes peuvent avoir différentes implémentations.

Autres conseils

Vous ne pouvez pas avoir une erreur liée en général. Soit votre algorithme fonctionne ou non. La raison en est qu'une erreur raisonnable liée est évidemment beaucoup plus faible que RAND_MAX. Cela, à son tour signifie que les faibles bits ne sont pas aussi aléatoire que les bits supérieurs. Mais un bon PRNG fait certain que tous les bits sont également aléatoires.

Considérons cet exemple lent, mais mathématiquement son d'un algorithme RNG:

int rand() {
  state = AES_encrypt(state);
  return state % RAND_MAX;
}
void srand(int seed) {
  state = AES_encrypt(seed);
}

Si vous pouvez trouver une corrélation significative entre la séquence de sortie et le state précédent, l'algorithme AES devrait être considéré comme rompu.

Consultez cette .

Comme Justin dit, il est possible de revenir en arrière un générateur congruente linéaire (qui rand() implémentations sont souvent) lorsque vous avez une séquence de nombres générés. Je suppose que le problème est de savoir lequel des valeurs précédentes est la graine d'origine ...

La définition d'un PRNG est l'un dans Crytographic dont cette propriété exacte est infaisable - cependant, comme cela a été mentionné, il y a beaucoup plus faible (et beaucoup plus rapide) PRNGs pour lesquels cela est possible. Donc, cela dépend de votre algorithme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top