1.1.1 真随机数
真随机数序列是不可预计的,因而也不可能重复产生两个相同的真随机数序列,具有不可重见性,其周期是无穷大的。真随机数只能用某些随机物理过程来产生。如果采用随机物理过程来产生真随机数,理论上没有什么问题,但是在实际的应用当中,要做出生成速度很快,且又准确的随机数物理过程发生器是非常困难,因此,虽然真随机数的性能很好,但在实际应用中,却很少采用。
1.1.2 准随机数
准随机数概念来自如下的事实:要实现严格数学意义上的随机数,在理论上虽然可行,但在实际应用中却是不可行的,且也没有这个必要。关键是要保证“随机”数序列具有能产生出所需要的结果的必要特性。
对于伪随机数发生器和准随机数发生器来说,前者缺陷的根源在于“随机性”与“均匀性”的矛盾,它不要求新的发生器模拟真实的均匀分布,而力求任意大小的样本都能满足地差异性[1]。后者则是以牺牲随机性为代价,换来均匀性的提高。目前有3中准随机序列可用来辅助生成均匀分布随机数,分别是Halton序列、Sobol序列、Latin超立方体序列。
1.1.3 伪随机数
伪随机数顾名思义,“伪”就是假的意思,即其产生的并不是真正的随机数。“伪”意味着使用某种已知的方法来产生随机数,如果这种方法知道,就可以利用这种方法产生相同的随机数,即伪随机数序列具有可重见性,其周期是有限的,这是与真随机数的一个很明显的区别,但相比真随机数生成速度缓慢的缺点,伪随机数应用却非常广泛。
在伪随机数的产生过程中,总是会出现一些与理想随机数想背离的情况:
1.可能并不是均匀分布的;
2.可能是离散的,而不是连续的;
3.平均值可能太大或是太小;
4.方差可能太大或太小;
5.数字之间可能不是相互独立的,如:
(1)数字之间自相关;
(2)数字接连大于或是小于相邻的数字;
(3)若干大于均值的数跟着若干小于均值的数。
1.2 随机数的性能检测
随机数序列的随机性是衡量随机数发生器性能的重要指标,通常使用随机数测试标准来检测序列的随机性。随机数测试标准主要有John Walker的ENT测试包、昆士兰科技大学Helen Gustafson等研究员的Crypt-XS测试包、佛罗里达州立大学Georage Marsaglia的DIEHARD测试包以及美国国家标准与技术研究所的NIST SP800-22测试包(简称NIST测试),其中比较常用的是NIST测试。
NIST测试运用的统计学的原理,即基于小概率事件的思想对待测序列进行测试的。首先提出原假设H_0 (待测序列是随机的),对应的备选假设H_1(待测序列不是随机的),然后构造合适的统计量,给定显著性水平α的值,令P{拒绝H_0}=α,确定统计量的拒绝与,若统计值落入拒绝域内,则拒绝H_0,即表明该待测序列不是随机的;反之,则接受H_0,表明待测序列是随机的。文献综述
与NIST测试比较相像,国家密码局也制定了一份随机数检测标准,该标准包含了15个测试项,每个测试项对视针对被测序列的某一特性进行检测的,具体见下表:
序号 统计测试项 检测目的
1 单比特频数检测 检测待检序列中0和1的个数是否相近
2 块内频数检测 检测子序列中0、1是否相近