rand()函数和RNG(随机数生成器)外设之间有什么区别?


9

我想知道STM32F4XXXX MCU中的RNG(随机数发生器)外设。请参阅本参考手册(第748页)。另一方面,我们在stdlib库中有rand()函数来执行相同的任务。现在我有两个问题:

  1. rand()函数和RNG(随机数生成器)外设之间有什么区别(优点和缺点)?
  2. 看这部分:

特征

请说明这两种选择(尤其是第二种选择)。

Answers:


12

Dave的答案很好地恢复了它,但在第二个选项上需要更多说明:

真正的硬件随机数生成器使用物理熵源。这样的熵源可能是宇宙辐射,电噪声,反向偏置二极管(或BJT晶体管),蔡氏电路等产生的雪崩效应。熵源的确定性越差,随机输出的质量就越好。理想的熵源将是使用量子物理学效应,或者是无法使用确定性方程建模的事物。

随机数生成器的另一个重要因素是,熵源每单位时间只能生成有限量的熵。一个很好的例子是chua电路:虽然它是非常随机的,但是它的速度非常差,无法用于现实生活中。

在许多带有内置RNG的处理器/微控制器中,使用了从2到4个时钟漂移,这些时钟漂移是故意不正确地同步的。然后,他们同时使用模拟和数字滤波器将更多的模式随机化,并将结果移入寄存器。执行此类过滤需要几个周期,这说明了在有新值可用之前,给定时钟所需的最小周期数。

时钟漂移并不是一个量子效应,因此可以对其建模,但是它是足够随机的,因为它取决于许多参数,例如温度,硅工艺,工作频率,电噪声,背景辐射等。 。

在硬件RNG没有足够的吞吐量的应用程序中(例如在要求很高的加密应用程序中),使用硬件RNG作为伪随机数生成器(例如sdtlib中的rand()函数)的种子是很常见的。但是,这样的应用程序通常会提供rand()的更好实现,它是专门为从种子运行而设计的,该种子可能经常被真正的随机值丢弃。在具有集成硬件RNG的新型Intel处理器中,伪随机算法部分直接集成在芯片中,因此它是由硬件执行的,从而产生很高的随机吞吐量。

如果您介意rand()方法本身,那么它只是一个数学表达式,旨在生成足够多的熵。足够大,取决于应用程序:对于生成密码密钥,随机性要求比您喜欢的音乐播放器中简单随机随机播放所需的随机性更高的质量。显然,随机输出的质量越高,随机数的计算成本就越高。

随机数所涉及的操作与计算文件的MD5哈希所涉及的操作非常相似:它们尝试使用一种位雪崩效应,以使种子值中的单个位改变会改变整个生成模式。附带说明一下,我不建议使用MD5作为伪随机数生成器。这只是一个例子。这既效率低下,又不是那么随机,但是重点就在于:如果将相同的文件馈送给具有MD5的算法,您将始终获得相同的确定性输出,几乎与始终从中获得相同输出的方式相同如果您输入相同的种子,则rand()函数,除非您的实现依赖于某些任意元素,例如当前时间。


7

关键区别在于rand()库函数是伪随机数生成器-给定任何特定的起始(种子)值,它将始终生成相同的数字序列。

另一方面,RNG外设是真正的随机数生成器,它将生成不可重复的数字序列。


谢谢。和那些都选择..?
Roh 2014年

2
“以及这两个选项..”是什么意思?意思?它是一个问题吗?
约翰U

2

您概述的两个主题可以相对轻松地描述:

  • 1:您生成随机数的速度不能超过每40个时钟周期一次,因此导致48MHz / 40 =〜1M Sample / s
  • 2:硬件包含一个监视器,它将检查每个生成的号码是否存在异常行为。例如,如果您使用温度作为来源并且具有高度稳定的温度环境,则可能会发生RNG再次再次生成相同的数字序列的情况(就像伪随机数生成器将以相同的种子值开始一样) 。如果RNG正常运行,该组件将对此进行监视并向您提供信号。如果您需要数字是“真正”随机的,则可能需要监视此标志以查看它们是否确实是。剩下的文本中可能会给出具体的完成方式以及RNG的实际工作方式。

1

假设有人设计了一种机械轮盘旋转器,该旋转器会在一定时间范围内为电动机通电,等待车轮和球停下来,然后观察球所在的位置。通常,每次旋转后,球和轮都会旋转最终会出现在稍有不同的位置,一次旋转后球位置的细微变化会在下一次旋转中产生很大的变化。因此,即使电动机总是在相同的时间长度内通电,在一次旋转中球着陆的凹坑也将与之前旋转时着陆的位置无关。

但是,现在假设其中一些轴承有凹痕,或者有轻微凹痕,并且电动机的轴承上出现了平整的斑点。然后一些旋转是随机的,但是在旋转导致球降落在凹陷处且轴承位于平坦点之后,下一个旋转很可能会偏向于获得与发生上一次旋转相同的结果。如果大多数旋转不会同时击中草皮和平坦点,则它们的存在可能不会对事情产生太大影响。另一方面,如果一个草皮/扁平组合恰好恰好放在正确的位置,以使该球合理地持续地落在第二个上,并且恰好放置一个以便将球传回第一个,则一个最终会出现一些极其偏斜的行为。

如果在4和23上着陆后,下一个旋转是4,则不一定表示有问题。在这种情况下,应有4出现在时间的1/38中。此外,随机数据的获取应仅捕获口袋的编号,因为对于球应该多久停在口袋的各个部分中并没有什么有用的了解。但是,对于任何记录数字的人来说,也可以“观察”球在口袋中停下来的地方,并观察是否有任何异常图案,这可能是有用的。位置分布可以朝前或向后倾斜,但不表示有问题,但是如果分布中的峰值很窄,则可能引起关注。

如果来自随机发生器的连续读数在统计上是独立的,则补偿偏差并不困难(尽管所需时间不确定)。但是,如果发电机处于读数不独立的状态(例如,车轮的循环状态),则补偿基本上变得不可能,因此需要硬件RNG包含检测此类行为的电路。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.