我在 http://auto.howstuffworks上发现了一篇关于汽车远程录入系统的文章。 com / remote-entry2.htm 在第三篇文章中,作者说,

  

发射器和接收器都使用相同的伪随机数发生器。当发送器发送一个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功能以利用此功能。有许多IC提供这种功能来为电子电路产生随机数。

编辑:根据要求,这里是一个非确定性随机数生成器的示例,它不依赖于指定的种子值:量子随机数发生器。当然,正如自由空间在评论中指出的那样,这不是伪随机数生成器,因为它生成真正的随机数。

其他提示

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

nextNumber = function(seed);
seed = nextNumber;

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top