随机数产生器
随机数产生器一般分为真正的随机和伪随机(pseudorandom number generator (PRNG))。真正的随机则是不可预测的;伪随机则依靠随机数种子和随机算法,是可能被预测的。很多东西被黑客攻破与此有关。比如非常著名的美国所谓的标准随机数产生器的后门事件,简单来讲,就是“美国所谓的标准随机数产生器里面居然存在后门,通过某个常数,可以预测未来的随机数,从而攻破任何用此随机数产生器的加密设备。
Dual_EC_DRBG是美国国家标准技术研究院所制定的4个随机数标准算法之一。该算法使用了一个常数Q,如果该常数经过特殊选择,并且用来选择常数所使用的数据被保存,那么在知道该算法生成随机数前32个字节的情况下,可以预测未来所有生成的随机数。因此,如果该算法被植入后门,攻击者就可获知利用Dual_EC_DRBG算法生成的加解密密钥,从而使得保护的秘密泄露。2014年4月21日,美国国家标准技术研究院所宣布从随机数标准算法中删除Dual_EC_DRBG。
只依靠计算机程序,不依赖硬件和外部噪音能否产生真正的随机?
个人分析:
不可能。原因如下:种子是可选择的,产生序列的算法代码也是固定的,那么这个序列则是可以预测的,即使引入“时间”这种动态的变量,也是一个可以获取和预测的变量,那么最终的序列仍然可能被预测。这就是为何很多利用伪随机数进行加密而比较容易被破解的原因之一。综合而言,采用固定变量产生的信息是可能被预测的,这是我个人的理解。 当然,不能用我们大部分人攻不破而证明是“不可被预测”,也许黑客可以。D:)
我们举个例子:
public static void main(String args[])
{
Random rnd = new Random(10);
for(int i=0;i<10;i++)
System.out.println(rnd.nextInt());
}
运行两次的结果:
-1157793070
1913984760
1107254586
1773446580
254270492
-1408064384
1048475594
1581279777
-778209333
1532292428
-1157793070
1913984760
1107254586
1773446580
254270492
-1408064384
1048475594
15812