-1

我正在使用带有固定种子的 RNG。根据输入,这是一个任意的整数序列,我想影响输出。像这样的东西:

foreach (int i in source_int_sequence) {
    write_output (RNG.nextDouble());
    RNG.feed (i);
}

反馈功能应该以可重复的方式(相同的输入产生相同的输出)但难以预测(即随机)的方式影响下一个输出。

不假定 RNG 在密码学上是安全的,自然,受影响的结果也不一定是。但是请注意,源序列可能看起来很奇怪,即只有零、+1 和 -1 交替、稳定增加的数字,或者您能想到的任何其他东西,这会导致一个幼稚的实现。

我正在使用 C#,但我相信这个问题与语言无关。

4

1 回答 1

1

解决此问题的一种方法是将输入的整数序列转换为看似随机的值序列。完成此操作后,您可以通过从伪随机生成器生成随机数来影响生成的随机数,然后将它们与您返回的随机数序列进行异或运算。

将输入序列转换为随机序列的一种可能方法是在块密码上使用密码块链接计数器模式等技术。如果您使用的分组密码是安全的,这将为您提供一些加密安全的东西(不过,正如您所提到的,这太过分了)。另一种选择是使用具有无限窗口大小的滚动散列函数从流中构建散列值。

希望这可以帮助!

于 2013-10-01T23:53:18.003 回答