来自这些系统的比特流容易产生偏差,以1或0为主。有两种处理偏差和其他伪像的方法。 第一种是设计RNG以最小化发电机运行中固有的偏差。 一种校正这种方法的方法是反馈由低通滤波器滤波的生成的比特流,以调整发生器的偏置。 通过中心极限定理,反馈回路趋向于“几乎所有次数”都经过良好调整。 超高速随机数发生器通常使用这种方法。 即使这样,产生的数字通常也有些偏颇。
应对误差的第二种方法是在生成后(在软件或硬件中)减少偏差。即使采用了上述硬件偏差降低步骤,仍应假设比特流包含偏差和相关性。通过类似于从相关信号产生白噪声的相关问题,存在几种用于减少偏置和相关的技术,通常称为“whitening”算法。另一种方法是动态静态测试,它动态地对每个随机数块进行静态随机性检查。这可以在短时间内完成,每秒1千兆字节或更多。在这种方法中,如果一个块被确定为可疑块,则该块被忽略并取消。 ANSI(X9F1)草案中要求使用此方法。
John von Neumann发明了一种简单的算法来修复简单偏差并降低相关性。它一次考虑两个比特(非重叠),采取三种动作之一:当两个连续的比特相等时,它们被丢弃;一个1,0的序列变成1;并且0,1的序列变为零。因此,它表示具有1的下降沿和具有0的上升沿。这消除了简单的偏差,并且易于实现为计算机程序或数字逻辑。无论如何生成比特,该技术都有效。但是,它无法保证其输出的随机性。它能做什么(具有大量丢弃比特)将偏置的随机比特流变换为无偏比特流。
用于改善近似随机比特流的另一种技术是对具有高质量密码安全伪随机数发生器(例如Blum Blum Shub或强流密码)的输出的异或比特流。这可以以低成本改善去相关和数字偏置;它可以通过FPGA等硬件完成,这比通过软件实现的速度更快。
减少近似随机比特流中的偏差的相关方法是采用两个或更多个不相关的近似随机比特流,并将它们排除在一起。令比特流产生0的概率为
一些设计将加密散列函数(例如MD5,SHA-1或RIPEMD-160)或甚至CRC函数应用于全部或部分比特流,然后将输出用作随机比特流。这很有吸引力,部分原因是它与其他一些方法相比速度相对较快,但很大程度上取决于哈希输出中的质量,而这些质量可能没有什么理论依据。
许多物理现象可用于生成高度偏差的位,但每个位独立于其他位。盖革计数器(采样时间长于管恢复时间)或半透明镜像光子探测器都会产生大多数为“0”(静音或透射)的位流,偶尔会出现“1”(点击或反射)。如果每个比特独立于其他比特,则冯·诺依曼策略为这种高度偏置的比特流中的每个罕见的“1”比特生成一个随机的无偏输出比特。诸如高级多级策略(AMLS)等美白技术可以从这种高度偏差的比特流中提取更多的输出比特 - 输出比特就像随机和无偏差的一样。
其他设计使用被认为是真随机比特作为高质量分组密码算法的关键,将加密输出作为随机比特流。但是,在这些情况下必须小心选择合适的块模式。在一些实现中,PRNG针对有限数量的数字运行,而硬件生成设备生成新种子。 2100433B