【问题标题】:Pseudo Random Generator with same output具有相同输出的伪随机发生器
【发布时间】:2008-11-26 06:26:29
【问题描述】:

我在http://auto.howstuffworks.com/remote-entry2.htm看到了一篇关于汽车远程进入系统的文章,作者说,在第三个项目符号中,

发射器和接收器都使用相同的伪随机数发生器。当发送器发送一个 40 位代码时,它使用伪随机数生成器选择一个新代码,并将其存储在内存中。另一方面,当接收器接收到有效代码时,它会使用相同的伪随机数生成器来选择一个新代码。这样,发射器和接收器就同步了。接收者只有在收到它期望的代码时才会打开门。

是否可以让两个 PRNG 函数同时产生相同的随机数?

【问题讨论】:

    标签: algorithm security random protocols


    【解决方案1】:

    在 PRNG 函数中,函数的输出取决于“种子”值,因此在给定相同种子值的情况下,连续调用将提供相同的输出。所以,是的。

    一个例子(使用 C#)是这样的:

    // Provide the same seed value for both generators:
    System.Random r1 = new System.Random(1);
    System.Random r2 = new System.Random(1);
    
    // Will output 'True'
    Console.WriteLine(r1.Next() == r2.Next());
    

    这当然取决于随机数生成器使用某种确定性公式来生成其值。如果您使用所谓的“真正随机”数生成器,它在生成过程中使用熵或噪声的属性,那么在给定一些输入的情况下很难生成相同的值,除非您能够复制熵状态两个调用函数 - 当然,这会破坏使用这种生成器的目的......

    在远程无钥匙进入系统的情况下,它们很可能使用确定性的 PRNG 功能来利用此功能。有许多 IC 提供这种功能来为电子电路生成随机数。

    编辑:根据要求,这里是一个不依赖于指定种子值的非确定性随机数生成器的示例:Quantum Random Number Generator。当然,正如 freespace 在 cmets 中指出的那样,这不是伪随机数生成器,因为它生成的是真正的随机数。

    【讨论】:

    • 请举一个不依赖种子的 PRNG 的例子。还请给出一个不确定的 PRNG 示例。
    • 好了 - 这真的是同一个例子。可能不完全是您正在寻找的东西,但非确定性 RNG 需要能够使用熵来生成随机比特流的硬件。在上述情况下,他们使用光子的非确定性量子特性来生成它们的流。
    • 在线赌场使用这种硬件(虽然更复杂)来洗牌。
    • 感谢您回复 Erik,但您没有回答我的问题。我最初的评论是让您思考说伪随机数生成器需要一个种子并且是确定性的,这是多么多余。量子随机数生成器是真正的随机数生成器,而不是 PRNG。
    • 啊。好点子。 =) 编辑了我的答案以反映这一点。至于让我思考-我知道两者之间的区别,问题是我浏览了您的评论而不是清楚地阅读它-如果我这样做了,我会发现这种区别。不过,谢谢。 =)
    【解决方案2】:

    大多数 PRNG 都有一个以 seed 形式存在的内部状态,它们用于生成下一个值。内部逻辑是这样的:

    nextNumber = function(seed);
    seed = nextNumber;
    

    因此,每次生成新数字时,都会更新种子。如果您为使用相同算法的两个 PRNG 提供相同的种子,function(seed) 将评估为相同的数字(假设它们是确定性的,大多数都是)。

    直接应用于您的问题:发射器选择一个代码,并将其用作种子。接收者在接收到它之后,使用它来播种它的生成器。现在两者对齐了,它们将生成相同的值。

    【讨论】:

      【解决方案3】:

      正如 Erik 和 Claudiu 所说,只要您使用相同的值播种 PRNG,您最终会得到相同的输出。

      使用 AES(或任何其他加密算法)作为 PRNG 的基础时可以看到一个示例。只要您继续使用在两个设备(发射器和接收器)上匹配的输入,那么输出也会匹配。

      【讨论】:

      • 我不这么认为。我认为发射器发送一个序列号及其加密版本,接收器对该序列号 + 商定的种子值运行相同的加密。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      相关资源
      最近更新 更多