随机数生成器(Random Numeral Generator,即RNG)是用于生成随机数的程序或硬件。
生成器
真随机数生成器的生成方法有很多种。
PuTTYgen的随机数是让用户移动鼠标达到一定的长度,之后把鼠标的运动轨迹转化为种子;Intel通过电阻和振荡器来生成热噪声作为信息熵资源;Unix/Linux的dev/random和/dev/urandom采用硬件噪音生成随机数。
在Intel 815E芯片组的个人电脑上安装Intel Security Driver(ISD)后,可以通过编程读取寄存器获取RNG中的随机数。
此外还有提供真随机数的网站,如:
Quantum Random Bit Generator Service (QRBGS)是一个免费为学术和科研机构提供真随机数字服务的网站,由克罗地亚的计算机科学家开发。其随机性依赖于半导体光子发散量子物理过程中内在的随机性。
Randomness and Integrity Services Ltd. ,从1998年开始在Internet上提供真随机数服务,它用大气噪音生成真随机数。
1.
其随机性依赖于半导体光子发散量子物理过程中内在的随机性,光子通过光电效应进行检测。这些随机检测到的光子都是相互独立的。它可以通过C/C++库、Web Service、Mathmatic/Matlab插件等多种方式访问。
2.
Randomness and Integrity Services Ltd. ,从1998年开始在Internet上提供真随机数服务,它用大气噪音生成真随机数。
伪随机数
生成伪随机数有很多种算法,其中常用的有平方取中法、线性同余法、马特赛特旋转演算法等。
平方取中法
平方取中法是由冯·诺依曼在1946年提出的,其基本思想为:将数列中的第a(i)项(假设其有m位)平方,取得到的2m位数(若不足2m位,在最高位前补0)中间部分的m位数字,作为a(i)的下一项a(i+1),由此产生一个伪随机数数列。即:
(其中m为的位数)
平方取中法计算较快,但在实际应用时会发现该方法容易产生周期性明显的数列,而且在某些情况下计算到一定步骤后始终产生相同的数甚至是零,或者产生的数字位数越来越小直至始终产生零。所以用平方取中法产生伪随机数数列时不能单纯使用公式,应该在计算过程中认为加入更多变化因素,比如根据前一个数的奇偶性进行不同的运算,如果产生的数字位数减少时通过另一种运算使其恢复成m位。