版权归原作者所有,如有侵权,请联系我们

[科普中国]-硬件随机数生成器

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

在计算过程中,硬件随机数发生器(真随机数发生器,TRNG)是从物理过程而不是计算机程序生成随机数的设备。这种装置通常基于产生低水平,统计随机“噪声”信号的微观现象,例如热噪声,涉及分束器的光电效应和其他量子现象。从理论上讲,这些随机过程是完全不可预测的,理论中对不可预测性的断言需要进行实验测试。硬件随机数发生器通常包括将物理现象的某些方面转换为电信号的转换器,放大器和其他电子电路,以将随机波动的幅度增加到可测量的水平,以及某种类型的模数转换器将输出转换为数字数字,通常是简单的二进制数字0或1,通过重复采样随机变化的信号,可以获得一系列随机数。

简介电子硬件随机数发生器的主要应用是加密技术,它们用于生成随机加密密钥以安全地传输数据。它们广泛用于Internet加密协议,如Secure Sockets Layer(SSL)。

随机数发生器也可以通过“随机”宏观过程构建,使用硬币翻转,骰子,轮盘和彩票机等设备。不稳定动力系统理论和混沌理论可以证明这些现象存在不可预测性。尽管宏观过程在牛顿力学下是确定性的,但是在轮盘中设计精良的设备的输出在实践中无法预测,因为它取决于每次使用的初始条件的敏感微观细节。

尽管骰子主要用于赌博,并且作为游戏中的“随机化”元素(例如角色扮演游戏),维多利亚时代的科学家弗朗西斯·高尔顿描述了一种使用骰子在1890年为科学目的明确生成随机数的方法。

硬件随机数发生器通常每秒产生有限数量的随机比特。为了提高数据速率,它们通常用于为更快的加密安全伪随机数生成器生成“种子”,然后生成伪随机数输出序列。

这样的设备通常是基于一些能生成低等级、统计学随机的“噪声”信号的微观现象,如热力学噪声、光电效应和量子现象。这些物理过程在理论上是完全不可预测的,并且已经得到了实验的证实。硬件随机数生成器通常由换能器、放大器和模拟数字转换器组成。其中换能器用来将物理过程中的某些效果转换为电信号,放大器及其电路用来将随机扰动的振幅放大到宏观级别,而模拟数字转换器则用来将输出变成数字,通常是二进制的零和一。通过重复采样这些随机的信号,一系列的随机数得以生成。1

使用首先在赌博的背景下研究不可预测的随机数,并且首先开发许多随机化装置,例如骰子,洗牌纸牌和轮盘赌轮,以用于此类用途。 相当生产的随机数对于电子赌博至关重要,而创建它们的方式有时会受到政府博彩委员会的监管。

随机数字也用于非赌博目的,无论是在数学上如何使用它们,例如民意调查的抽样,以及通过随机化近似公平性的情况,例如选择陪审员和军事选秀彩票。

加密

硬件随机数生成器的主要用途是在数据加密领域,例如创建随机加密密钥以加密数据。 它们是伪随机数生成器(PRNG)的更安全的替代方案,PRNG是计算机中常用于生成“随机”数字的软件程序。 PRNG使用确定性算法来产生数字序列。 虽然这些伪随机序列通过随机性的统计模式测试,但通过知道算法和用于初始化它的条件(称为“种子”),可以预测输出。 由于PRNG生成的数字序列是可预测的,因此使用伪随机数加密的数据可能容易受到密码分析的影响。 硬件随机数生成器生成假定不可预测的数字序列,因此在用于加密数据时提供最大的安全性。

早期发展产生随机数的一种早期方法是用于播放基诺或选择彩票号码的相同机器的变体。这些混合编号的乒乓球带着吹来的空气,可能与机械搅拌相结合,并且使用一些方法从混合室中取出球(美国专利4,786,056)。这种方法在某些意义上给出了合理的结果,但是这种方法产生的随机数是昂贵的。该方法固有地慢,并且对于大多数计算应用程序是不可用的。

1947年4月29日,兰德公司开始生成随机数字,带有“电子轮盘”,由每秒约100,000个脉冲的随机频率脉冲源组成,每秒一次,恒定频率脉冲,并送入五位二进制计数器。道格拉斯飞机公司制造了这种设备,实施了Cecil Hasting的建议(兰德P-113)用于噪声源(很可能是6D4微型气体闸流管放置在磁场中时众所周知的行为)。 32个可能的计数器值中的20个被映射到10个十进制数字上,而其他12个计数器值被丢弃。

兰德机器长期运行,经过筛选和测试的结果被转换成表格,该表格于1955年出版于“百万随机数字百万正常偏差”一书中。 RAND表是提供随机数字的重大突破,因为这样一个大而精心准备的表从未有过。它一直是模拟,建模和导出加密算法中任意常数的有用资源,用于证明常量未被恶意选择。块密码Khufu和Khafre是使用RAND表的应用程序之一。

具有随机属性的物理现象量子随机属性实际量子力学物理随机性有两个基本来源:原子或亚原子级的量子力学和thermal noise(其中一些是源自量子力学)。量子力学预测某些物理现象,例如原子的核衰变,基本上是随机的,原则上不能预测(关于量子不可预测性的经验验证的讨论,参见贝尔测试实验)。并且,因为我们生活在绝对零度以上的温度,所以每个系统的状态都有一些随机变化;例如,构成空气的气体分子不断地以随机方式相互反弹(参见统计力学)。这种随机性也是一种量子现象。

由于量子力学事件的结果原则上无法预测,因此它们是随机数生成的“黄金标准”。用于随机数生成的一些量子现象包括:

Shot noise,电子电路中的量子力学噪声源。一个简单的例子是照在光电二极管上的灯。由于不确定性原理,到达的光子在电路中产生噪声。收集使用噪声会带来一些问题,但这是一个特别简单的随机噪声源。然而,在整个感兴趣的带宽内,散粒噪声能量并不总是很好地分布。横向磁场中的气体二极管和闸流管电子管可以产生大量的噪声能量(10伏或更高的高阻抗负载)但具有非常高的能量分布,需要仔细过滤才能在广谱范围内实现平坦度。

核衰变辐射源(例如,来自某些商业烟雾探测器),由连接到PC的盖革计数器检测。

光子穿过半透明镜子。检测互斥事件(反射/传输)并分别与“0”或“1”位值相关联。

放大在反向偏置晶体管的基极上产生的信号。发射器被电子饱和,有时它们将穿过带隙并通过基座离开。然后通过几个晶体管放大该信号,并将结果馈入施密特触发器。

自发参量下变频导致简并光学参量振荡器中的二进制相位状态选择。

通过零差检测测量真空能量的波动。2

经典随机属性Thermal现象更容易检测。虽然大多数系统将在足够低的温度下停止工作以将噪声降低两倍(例如,~150K),但它们在一定程度上容易受到降低系统温度的攻击。使用的一些热现象包括:

来自电阻器的thermal noise,被放大以提供随机电压源。

Avalanche noise产生的avalanche diode,或来自Zener diode的Zener breakdown。

由连接到PC的无线电接收器检测到的Atmospheric noise(虽然大部分噪声,例如闪电噪声,但不是热噪声,但很可能是chaotic现象)。

在没有量子效应或thermal noise的情况下,可以使用其他倾向于随机的现象,尽管其方式不易以物理定律为特征。当仔细地组合几个这样的源时(例如,在Yarrow算法或Fortuna CSPRNG中),可以收集足够的熵用于创建加密密钥和随机数,尽管通常以受限的速率。优点是这种方法原则上不需要特殊的硬件。缺点是知识渊博的攻击者可以偷偷地修改软件或其输入,从而可能大大降低输出的随机性。通常在这种方法中使用的主要随机源是由机械输入/输出设备(例如键盘和磁盘驱动器,各种系统信息计数器等)引起的中断的精确定时。

必须谨慎实施最后一种方法,如果不是,可能会受到攻击。例如,Linux 2.6.10内核中生成器的前向安全性可能会被时间复杂度打破。

误差处理来自这些系统的比特流容易产生偏差,以1或0为主。有两种处理偏差和其他伪像的方法。 第一种是设计RNG以最小化发电机运行中固有的偏差。 一种校正这种方法的方法是反馈由低通滤波器滤波的生成的比特流,以调整发生器的偏置。 通过中心极限定理,反馈回路趋向于“几乎所有次数”都经过良好调整。 超高速随机数发生器通常使用这种方法。 即使这样,产生的数字通常也有些偏颇。

软件whitening应对误差的第二种方法是在生成后(在软件或硬件中)减少偏差。即使采用了上述硬件偏差降低步骤,仍应假设比特流包含偏差和相关性。通过类似于从相关信号产生白噪声的相关问题,存在几种用于减少偏置和相关的技术,通常称为“whitening”算法。另一种方法是动态静态测试,它动态地对每个随机数块进行静态随机性检查。这可以在短时间内完成,每秒1千兆字节或更多。在这种方法中,如果一个块被确定为可疑块,则该块被忽略并取消。 ANSI(X9F1)草案中要求使用此方法。

John von Neumann发明了一种简单的算法来修复简单偏差并降低相关性。它一次考虑两个比特(非重叠),采取三种动作之一:当两个连续的比特相等时,它们被丢弃;一个1,0的序列变成1;并且0,1的序列变为零。因此,它表示具有1的下降沿和具有0的上升沿。这消除了简单的偏差,并且易于实现为计算机程序或数字逻辑。无论如何生成比特,该技术都有效。但是,它无法保证其输出的随机性。它能做什么(具有大量丢弃比特)将偏置的随机比特流变换为无偏比特流。

用于改善近似随机比特流的另一种技术是对具有高质量密码安全伪随机数发生器(例如Blum Blum Shub或强流密码)的输出的异或比特流。这可以以低成本改善去相关和数字偏置;它可以通过FPGA等硬件完成,这比通过软件实现的速度更快。

减少近似随机比特流中的偏差的相关方法是采用两个或更多个不相关的近似随机比特流,并将它们排除在一起。令比特流产生0的概率为,其中。然后e是比特流的偏差。如果具有偏差e的两个不相关的比特流被排他地在一起,那么结果的偏差将是。这可以用更多比特流重复。

一些设计将加密散列函数(例如MD5,SHA-1或RIPEMD-160)或甚至CRC函数应用于全部或部分比特流,然后将输出用作随机比特流。这很有吸引力,部分原因是它与其他一些方法相比速度相对较快,但很大程度上取决于哈希输出中的质量,而这些质量可能没有什么理论依据。

许多物理现象可用于生成高度偏差的位,但每个位独立于其他位。盖革计数器(采样时间长于管恢复时间)或半透明镜像光子探测器都会产生大多数为“0”(静音或透射)的位流,偶尔会出现“1”(点击或反射)。如果每个比特独立于其他比特,则冯·诺依曼策略为这种高度偏置的比特流中的每个罕见的“1”比特生成一个随机的无偏输出比特。诸如高级多级策略(AMLS)等美白技术可以从这种高度偏差的比特流中提取更多的输出比特 - 输出比特就像随机和无偏差的一样。

PRNG定期刷新随机密钥其他设计使用被认为是真随机比特作为高质量分组密码算法的关键,将加密输出作为随机比特流。但是,在这些情况下必须小心选择合适的块模式。在一些实现中,PRNG针对有限数量的数字运行,而硬件生成设备生成新种子。3

本词条内容贡献者为:

王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所