【问题标题】:How can I influence a repeatable, random sequence?如何影响可重复的随机序列?
【发布时间】:2023-03-28 05:40:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: math random language-agnostic


    【解决方案1】:

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

    将输入序列转换为随机序列的一种可能方法是在分组密码上使用cipher-block chainingcounter mode 之类的技术。如果您使用的分组密码是安全的,这将为您提供一些加密安全的东西(尽管,正如您所提到的,这是矫枉过正的)。另一种选择是使用具有无限窗口大小的rolling hash function 从流中构建散列值。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 2016-03-03
      相关资源
      最近更新 更多