电脑随机数是如何生成的?
不论是维持着你余额宝安全的加密过程还是你在玩《战地4》,电脑都会产生随机数。目前有两类随机数——“真”随机数和伪随机数——两者的区别关乎加密系统的安全度。
对于随机数的讨论日渐升温,许多人怀疑英特尔内置于各种硬件内的随机数生成芯片是不是靠得住。要理解为什么这种随机数不太可靠,你必须理解随机数的生成原理。
随机数的作用
加密法要求数字不能被攻击者猜到,不能多次使用同样的数字。所以需要一种机制产生攻击者无法预测的数字,这些随机数对加密法至关重要,无论你是加密文件还是访问https协议网站,都需要用到随机数。
真随机数
如果电脑是靠代码生成随机数,是不是意味着随机数可以被预测?
根据随机数的生成原理,我们把电脑随机数分为两类:“真”随机数和伪随机数。
要生成一个“真”随机数,电脑会检测电脑外部发生的某种物理现象。比如说,电脑可以测量某个原子的放射性衰变。根据量子理论,原子衰变是随机而不可测的,所以这就是宇宙中的“纯粹”随机性。攻击者永远无法预测原子衰变的发生时间,也就不可能猜出随机值。
伪随机数
伪随机数这个概念是相对于“真”随机数而言。电脑通过发送种子数值,运用算法产生某个看起来像随机数的数字,但是实际上这个数字是可以预测的。因为电脑没有从环境中收集到任何随机信息。
虽然是伪随机数,但是并不是所有领域都不需要伪随机数。比如,如果你在玩电子游戏,那么游戏过程中是靠伪随机数还是真随机数并不重要。另一方面,如果你的应用正在加密,情况就不同了,因为你不希望攻击者能够猜到你的随机数。
NSA和Intel的硬件随机数生成器
为了帮助程序开发者更简单的生成随机数,也为了帮助生成安全的随机数,Intel的芯片组中包括一个硬件随机数生成器,名叫RdRand,这块芯片利用处理器的熵源向软件提供随机数。
问题是这个随机数生成器是个黑盒,我们不清楚里面的工作原理。如果RdRand藏有NSA的后门,那么政府就可以破译依靠随机数生成器提供的唯一数据产生的密钥。
这个问题非常严重。在2013年12月,FreeBSD的开发者们取消了对直接采用RdRand作为随机数源的支持,理由是无法信任Intel。RdRand设备的输出结果会用另一套加密算法增加额外熵,确保随机数服务器中即便有后门程序也不会产生影响。Linux已经这么做了,在RdRand的随机数基础上再次进行随机处理,以确保后门程序不可能从中作祟。Intel总裁Brian Krzanich在Reddit上没有直接回答关于是否装有后门的问题。
当然这不是Intel一家的问题,FreeBSD的开发者们也点了Via芯片的名。从这场争论中我们可以看出为什么不可预测的真随机数如此重要。
而随机数生成器生成“真”随机数只需要搜集熵或者从真实世界搜集看似随机的数据。对于某些不需要真正随机的应用,随机生成器可能会通过算法和种子数值算出随机数。
转载:http://blog.sae.sina.com.cn/archives/2949
相关推荐
- atime、mtime、ctime区别
- Posted on 04月27日
- memcache的increment用法
- Posted on 02月15日
- PHP实现文件下载功能
- Posted on 08月17日
- 思考构建一个现代网站,需要考虑的东西
- Posted on 03月04日