Algorithm 输出相同的伪随机发生器

Algorithm 输出相同的伪随机发生器,algorithm,security,random,protocols,Algorithm,Security,Random,Protocols,“我在第三颗子弹中看到一篇关于汽车遥控系统的文章,”作者说 发射机和接收机都使用相同的伪随机数生成器。当发送器发送40位代码时,它使用伪随机数生成器拾取新代码,并将其存储在内存中。另一方面,当接收器接收到有效代码时,它使用相同的伪随机数生成器拾取新代码。这样,发射机和接收机就同步了。接收器仅在收到预期代码时打开门 是否可能有两个PRNG函数同时产生相同的随机数 在PRNG函数中,函数的输出取决于“种子”值,因此,给定相同种子值的连续调用将提供相同的输出。所以,是的 例如(使用C#)如下所示: /

“我在第三颗子弹中看到一篇关于汽车遥控系统的文章,”作者说

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


是否可能有两个PRNG函数同时产生相同的随机数

在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功能来利用此功能。有许多集成电路提供这种功能,为电子电路产生随机数


编辑:根据请求,下面是一个不依赖指定种子值的非确定性随机数生成器示例:。当然,正如freespace在评论中指出的,这不是伪随机数生成器,因为它生成的是真正的随机数。

大多数PRNG都有一个种子形式的内部状态,用于生成下一个值。内部逻辑是这样的:

nextNumber = function(seed);
seed = nextNumber;
因此,每次生成新编号时,种子都会更新。如果给使用相同算法的两个PRNG分配相同的种子,
函数(种子)
将计算为相同的数字(假设它们是确定性的,而大多数是确定性的)


直接应用于您的问题:发送器选择一个代码,并将其用作种子。接收器在接收到它之后,使用它来为其生成器设定种子。现在,这两个值是一致的,它们将生成相同的值。

正如Erik和Claudiu所说,只要你用相同的值为PRNG播种,你将得到相同的输出


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

请给出不依赖种子的PRNG示例。请给出一个不确定的PRNG的例子。好了,这是同一个例子。可能不完全是您想要的,但非确定性RNG需要能够使用熵生成随机比特流的硬件。在上面的例子中,他们使用光子的非确定性量子特性来生成他们的流。在线赌场使用这种硬件(尽管更复杂)来洗牌。谢谢你回答Erik,但你没有回答我的问题。我最初的评论是想让你们想想,说一个伪随机数生成器需要一个种子,并且是确定性的,这是多么的多余。量子随机数生成器是真正的随机数生成器,而不是PRNG。说得好。=)编辑我的答案也反映了这一点。至于让我思考——我知道两者之间的区别,问题是我略读了你的评论,而不是读得很清楚——如果我这样做的话,我会抓住这个区别。不过,谢谢我不这么认为。我认为发送器发送一个序列号及其加密版本,而接收方对该序列号+约定的种子值运行相同的加密。