随机数产生器(random number generator)

本文介绍了随机数生成器的两类——真随机和伪随机,重点讨论了伪随机数发生器(PRNG)的工作原理和潜在的安全问题,如 Dual_EC_DRBG 的后门事件。同时,解释了为什么软件实现的随机数易被预测,并以 UNIX 内核的 /dev/random 为例,说明如何利用硬件噪声产生真随机数。最后,指出了在工程实践中伪随机数的广泛应用及其质量评估标准。
摘要由CSDN通过智能技术生成

随机数产生器

随机数产生器一般分为真正的随机和伪随机(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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值