浅谈随机数发生器

本文探讨了随机数发生器的两大类:真随机数发生器(TRNG)和伪随机数发生器(PRNG)。TRNG利用物理现象如热噪声、混沌电路和宇宙射线来生成不可预测的随机数。而PRNG通过算法计算得出,如平方取中法、同余法和梅森旋转算法。虽然伪随机数在某些场景下可预测,但其广泛应用于各种编程语言中。
摘要由CSDN通过智能技术生成

      今天在微博上到一篇如何使用随机数的文章,让我回忆起刚上大一时学C语言时,书后有道调用rand()函数的练习题,当时觉得好神奇,想知道它是怎么实现的,大二时候学Java又遇到了random()函数,恰巧当时上机课我有机会问老师,遗憾的是老师只是告诉我那是伪随机数,课后查查资料才了解。如今来一篇关于随机数发生器博文来回忆一下神奇的随机数。

     众所周知,我们平时所使用的无论什么编程语言都会提供一个随机数函数,而且它是伪随机数(Pseudo Random Number),它是由算法计算得出的,是可以预测的,也就是说当随机种子相同时,对于同一个随机函数,得出的随机数列是固定不变的,亚裔唯一图灵奖得主姚期智就是研究的就是伪随机数生成论;与之对应的就是真随机数(True Random Number)它是真正的随机数,无法预测且无周期性;还有一种是产生随机数的发生器是密码学伪随机数发生器(Cryptographically Secure Pseudo-Random Number Generator)常用的算法有 MD5 ,SHA1 等标准, 这里不做过多讨论,说说最基本的前两种:


一、真随机数发生器

    像无法实现永动机一样,想要实现真随机数靠程序是永远无法实现的,很多情况下只能看老天的眼色,比如布朗运动,量子效应,放射性衰变等。第一个真随机数发生器是1955年由Rand公司创造的,而在1999年,intel发布Intel810芯片组时,就配备了硬件随机数发生器,基于IntelRNG的真随机数生成器可以生成满足独立性和分布均匀性的真随机数,目前大部分芯片厂商都集成了硬件随机数发生器,只要安装相应驱动,了解读取寄存器地址,可以直接调用发生器。Intel810RNG的原理大概是:利用热噪声(是由导体中电子的热震动引起的)放大后,影响一个由电压控制的振荡器,通过另一个高频振荡器来收集数据。TRNG的类型主要有:

1.基于电路的TRNG:

i.振荡器采样:就是上述Intel采用的方式。

ii.直接放大电路噪声:利用电路中各种噪声,如上述的热噪声作为随机源,由于强度小,所以先要对其放大,然后对一定时间内超过阈值的数据进行统计,这样就产生的随机数。.

iii.电路亚稳态:亚稳态表示触发器无法在规定时间内达到一个可确认状态,一定条件下,触发器达到两个稳态的几率为50%,所以先使电路进入亚稳态,之后根据状态转化为随机数。

iv.混沌电路:不可预测,对初始条件的敏感的依赖性。以及混沌电路在芯片中易于实现的特点,可以产生效果不错的随机数。

2.基于其他物理源的TRNG

如宇宙射线,粒子衰变,空气噪声等作为随机源,来产生随机数。

3.其他物理信息TRNG

人为可以产生随机数吗?当然能!听说一个HR拆选简历的方式是往天上一扔,掉在桌子上的简历就通过,这个HR确认懂随机啊,而且是真随机。这类随机生活中随处可见,掷骰子,抓麻将&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值