电脑随机数是如何生成的?

  不论是维持着你余额宝安全的加密过程还是你在玩《战地4》,电脑都会产生随机数。目前有两类随机数——“真”随机数和伪随机数——两者的区别关乎加密系统的安全度。



  对于随机数的讨论日渐升温,许多人怀疑英特尔内置于各种硬件内的随机数生成芯片是不是靠得住。要理解为什么这种随机数不太可靠,你必须理解随机数的生成原理。

  随机数的作用

  随机数的使用历史已经有数千年。无论是抛硬币还是摇色子,目的是让随机概率决定结果。电脑中的随机数生成器的目的也是如此——生成随机不可预测的结果。

  加密法要求数字不能被攻击者猜到,不能多次使用同样的数字。所以需要一种机制产生攻击者无法预测的数字,这些随机数对加密法至关重要,无论你是加密文件还是访问https协议网站,都需要用到随机数。



  真随机数

  如果电脑是靠代码生成随机数,是不是意味着随机数可以被预测?

  根据随机数的生成原理,我们把电脑随机数分为两类:“真”随机数和伪随机数。

  要生成一个“真”随机数,电脑会检测电脑外部发生的某种物理现象。比如说,电脑可以测量某个原子的放射性衰变。根据量子理论,原子衰变是随机而不可测的,所以这就是宇宙中的“纯粹”随机性。攻击者永远无法预测原子衰变的发生时间,也就不可能猜出随机值。

  举个更实际的例子,电脑会根据环境中的噪音或者采取你敲击键盘的精确时间作为随机数据或熵的生成依据。举个例子,你的电脑监测到你某天下午2点以后敲击键盘的精确时间是0.23423523秒,有足够的这些特定长数字你就能得到一个熵源,也就可以生成“真”随机数。由于人不是机器,所以攻击者无法掌握你的敲击时间。Linux中的/dev/随机设备生成随机数,“阻拦”访问直到熵积累量足够才返回一个真随机数。



  伪随机数

  伪随机数这个概念是相对于“真”随机数而言。电脑通过发送种子数值,运用算法产生某个看起来像随机数的数字,但是实际上这个数字是可以预测的。因为电脑没有从环境中收集到任何随机信息。

  虽然是伪随机数,但是并不是所有领域都不需要伪随机数。比如,如果你在玩电子游戏,那么游戏过程中是靠伪随机数还是真随机数并不重要。另一方面,如果你的应用正在加密,情况就不同了,因为你不希望攻击者能够猜到你的随机数。

  举个例子,如果攻击者掌握了某随机数生成器使用的种子数值和加密算法,如果随机数生成器完全依靠种子数值和加密算法生成密文,这个过程中不添加任何额外随机性,如果攻击者掌握的情报足够多,他们可以逆推来确定加密算法一定会用到的伪随机数,也就能破译密文。



  NSA和Intel的硬件随机数生成器

  为了帮助程序开发者更简单的生成随机数,也为了帮助生成安全的随机数,Intel的芯片组中包括一个硬件随机数生成器,名叫RdRand,这块芯片利用处理器的熵源向软件提供随机数。

  问题是这个随机数生成器是个黑盒,我们不清楚里面的工作原理。如果RdRand藏有NSA的后门,那么政府就可以破译依靠随机数生成器提供的唯一数据产生的密钥。

  这个问题非常严重。在2013年12月,FreeBSD的开发者们取消了对直接采用RdRand作为随机数源的支持,理由是无法信任Intel。RdRand设备的输出结果会用另一套加密算法增加额外熵,确保随机数服务器中即便有后门程序也不会产生影响。Linux已经这么做了,在RdRand的随机数基础上再次进行随机处理,以确保后门程序不可能从中作祟。Intel总裁Brian Krzanich在Reddit上没有直接回答关于是否装有后门的问题。

  当然这不是Intel一家的问题,FreeBSD的开发者们也点了Via芯片的名。从这场争论中我们可以看出为什么不可预测的真随机数如此重要。



  而随机数生成器生成“真”随机数只需要搜集熵或者从真实世界搜集看似随机的数据。对于某些不需要真正随机的应用,随机生成器可能会通过算法和种子数值算出随机数。

(0)

相关推荐

  • 电脑Excel表格如何生成随机整数

    如果我们需要使用到随机整数,那么怎么操作呢?今天小编跟大家分享下电脑Excel表格如何生成随机整数.具体如下:1. 首先我们打开电脑中的Excel表格,进入主界面之后点击一个单元格,输入:=RANDB ...

  • 电脑excel表格如何生成国际象棋的棋盘

    excel表格是我们现在经常使用的办公软件之一,今天小编跟大家分享的是电脑excel表格如何生成国际象棋的棋盘.具体如下:1. 首先我们打开电脑中的excel表格,进入主界面之后选中8行8列,并对长和 ...

  • 怎么在Win10电脑中设置禁止生成系统错误内存转储文件

    今天给大家介绍一下怎么在Win10电脑中设置禁止生成系统错误内存转储文件的具体操作步骤.1. 打开电脑,进入桌面,找到此电脑图标,右键,在打开的菜单中,选择属性选项.2. 在打开的窗口中,点击左侧的高 ...

  • win7电脑打开浏览器自动生成TEMP文件夹怎么办

    win7电脑打开浏览器自动生成TEMP文件夹怎么办

  • 电脑Excel表格如何随机生成随机数

    Excel是现在经常使用的办公软件,今天小编跟大家分享的是电脑Excel表格如何随机生成随机数.具体如下:1.首先我们需要在电脑中打开一份Excel表格,2. 进入主界面之后我们点击上方的公式选项.3 ...

  • 电脑excel2016自动生成随机数据怎么使用

    excel是我们经常使用的数据处理工具,接下来小编就教大家怎样使用自动生成随机数据的功能方法/步骤11. 首先我们打开电脑进入到电脑桌面然后在桌面上找到excel的图标,接下来点击图标新建一个exce ...

  • 电脑excel软件随机抽奖器怎么生成

    excel是我们经常使用的数据处理工具之一,除了简单的处理数据之外我们还可以使用excel来生成一个随机抽奖器,接下来小编就教大家怎样制作.具体如下:1. 首先我们打开电脑进入到桌面,然后找到exce ...

  • 如何在电脑excel文档内完成日期的批量生成

    当我们在使用电脑的时候,可以通过excel软件来处理一些数据,那么如果想要在excel中,批量生成日期的话,应如何操作呢?接下来就由小编来告诉大家.具体如下:1. 第一种方法,下拉生成日期,根据需要的 ...

  • matlab怎么生成正态分布随机数

    有时候我们在使用matlab进行数学运算的时候,想生成正态分布随机数,怎么生成呢,下面来分享一下方法 操作方法 01 第一步我们首先需要知道matlab中可以使用randn函数生成正态分布随机数,在命 ...