是否有可能获得基于伪随机数的有限序列的近似种子?
题
假设我有一些数字,形成串联 例如:652,328,1,254 我想获得的种子,如果我,例如,做
srand(my_seed);
我会得到某种近似的有界错误我origonal序列, 当出现在相同的顺序的所有数字。
解决方案
取决于用于伪随机生成的算法。如果算法是一个简单的线性同余发生器,然后让种子回来只是一个事求解线性方程的模块化(说明该溶液可以是不唯一的,但作为这样的发电机是无记忆,它并不重要)。
如果该算法是更复杂的,这可能是不可能的。
注意的是,在C标准库中使用的算法没有被标准的限制,所以不同的平台可能具有不同的实现。
其他提示
可以不具有在一般结合的错误。无论你的算法工作或没有。这样做的原因是,结合合理的错误是明显RAND_MAX小得多。这反过来又意味着该低比特不是随机作为较高位。但良好的PRNG,就可以确保所有的位都同样是随机的。
考虑的RNG算法的这种缓慢但在数学上的声音的示例:
int rand() {
state = AES_encrypt(state);
return state % RAND_MAX;
}
void srand(int seed) {
state = AES_encrypt(seed);
}
如果可以找到输出序列和先前state
之间的任何相关性显著,AES算法应考虑断裂。
检查出这个问题
像贾斯汀说,这是可能的回溯的线性同余发生器(其rand()
实现经常是)时,你有生成的数字的序列。我想这个问题是知道哪些先前值中的一个是原始种子...
一个crytographic PRNG的定义是其中此确切属性是计算上不可行的 - 然而,如已经提到的,有弱得多(和更快)的PRNG针对这是可能的。所以,这取决于你的算法。
不隶属于 StackOverflow