计算机如何生成随机数字

dice-random-numbers

计算机为从密码到视频游戏和赌博的所有事物生成随机数。 有两类随机数 - “真正的”随机数和伪随机数 - 这个差别对于加密系统的安全性是重要的。

计算机可以通过观察一些不可预测的外部数据(如鼠标移动或扇形噪声),并从中创建数据来生成真正的随机数字。 这被称为熵。 其他时候,他们使用算法产生“伪随机”数字,所以结果是随机的,即使它们不是。

这个话题最近变得更具争议性,很多人质疑英特尔的内置硬件随机数发生器芯片是否值得信赖。 要理解为什么它不值得信赖,你必须了解随机数字是如何被初始化的,以及它们被用于什么。

什么随机数用于

随机数已被使用了数千年。 无论是掷硬币还是掷骰子,目标都是让结果随机化。 计算机中的随机数生成器是相似的 - 它们是试图实现不可预知的随机结果。

随机数字生成器可用于许多不同的目的。 除了为了赌博而产生随机数字或在计算机游戏中产生不可预知的结果等显而易见的应用之外,随机性对于密码学是重要的。

密码学 要求攻击者无法猜测的数字。 我们不能一次又一次地使用相同的数字。 我们希望以非常不可预测的方式生成这些数字,所以攻击者无法猜测它们。 这些随机数字对于安全加密是非常重要的,无论您是在加密自己的文件还是 在Internet上 使用 HTTPS 网站。

video-poker-gambling-randomness

真随机数

您可能想知道一台电脑如何能够实际生成一个随机数字。 这个“随机性”来自哪里? 如果它只是一个计算机代码,那么计算机生成的数字是不是可以预测的?

我们通常将计算机产生的随机数分成两种类型,这取决于它们是如何生成的:“真”随机数和伪随机数。

为了产生一个“真实”的随机数,计算机测量在计算机外发生的某种类型的物理现象。 例如,计算机可以测量一个原子的放射性衰变。 根据量子理论,当放射性衰变发生时无法确切知道,所以这基本上是来自宇宙的“纯粹的随机性”。 攻击者无法预测何时会发生放射性衰变,所以他们不知道随机值。

对于更多的日常例子,计算机可以依靠大气噪声,或者简单地使用按键盘上的按键的确切时间作为不可预测的数据或熵的来源。 例如,您的计算机可能会注意到,您在下午2点后正好按下了一个键0.23423523秒。 抓住足够的与这些按键相关的特定时间,你将有一个熵源,你可以用它来产生一个“真正的”随机数。 你不是一个可预测的机器,所以攻击者无法猜测你按下这些键时的确切时刻。 Linux上/ dev / random设备产生随机数,“阻塞”,直到收集足够的熵返回一个真正的随机数才返回结果。

linux-generate-random-data

伪随机数字

伪随机数是“真”随机数的替代。 计算机可以使用种子值和算法来生成似乎是随机的数字,但实际上这是可预测的。 计算机不会从环境中收集任何随机数据。

在任何情况下,这都不是一件坏事。 例如,如果您正在玩视频游戏,那么在该游戏中发生的事件是否由“真实”随机数或伪随机数引起并不重要。 另一方面,如果您使用加密,则不需要使用攻击者可以猜到的伪随机数。

例如,假设攻击者知道伪随机数生成器使用的算法和种子值。 假设一个加密算法从这个算法得到一个伪随机数,并用它来产生一个加密密钥,而不增加任何额外的随机性。 如果攻击者知道了足够多的话,他们可以反向工作,并确定加密算法在这种情况下必须选择的伪随机数,从而破坏加密。

pseudorandom-numbers

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

为了使开发人员更容易,并帮助生成安全的随机数,英特尔芯片包括一个称为RdRand的基于硬件的随机数发生器。 该芯片在处理器上使用熵源,并在软件请求时向软件提供随机数。

这里的问题是随机数发生器本质上是一个黑盒子,我们不知道里面发生了什么。 如果RdRand包含一个NSA后门,政府将能够打破由该随机数发生器提供的数据生成的加密密钥。

这是一个严重的问题。 在2013年12月,FreeBSD的开发人员不再支持直接使用RdRand作为随机源,他们不能相信它。 RdRand设备的输出将被输入到另一个算法中,该算法会增加额外的熵,确保随机数发生器中的任何后门都无关紧要。 Linux已经以这种方式工作,进一步随机化来自RdRand的随机数据,所以即使存在后门也不能预测。 英特尔首席执行官Brian Krzanich在最近的AMA(“Ask Me Anything”)上没有回答有关这些问题的问题。 [ 来源 ]

当然,这可能不仅仅是英特尔芯片的问题。 FreeBSD的开发者也通过名字叫出了Via的芯片。 这个争议显示了为什么产生真正随机的,不可预测的随机数是如此重要。

intel


为了产生“真实”的随机数,随机数发生器收集“熵”,或从周围的物理世界看似随机的数据。 对于不需要随机的随机数,他们可能只是使用算法和种子值。

图片来源: Flickr 上的 rekre89,Flickr上的 Lisa Brewster,Flickr上的 Ryan Somma,Flickr 上的Huangjiahui

计算机如何生成随机数

dice-random-numbers

计算机生成随机数,从加密到视频游戏和赌博。 有两类随机数 - “真”随机数和伪随机数 - 这些差异对加密系统的安全性很重要。

这个话题最近变得更有争议,许多人质疑英特尔的内置硬件随机数发生器芯片是否值得信赖。 要理解为什么它可能不值得信任,你必须了解如何生成随机数。

使用什么随机数

随机数已经使用了数千年。 无论是翻转硬币还是滚动骰子,目标都是将最终结果留给随机机会。 计算机中的随机数生成器是类似的 - 它们试图实现不可预测的随机结果。

随机数发生器可用于许多不同的目的。 除了明显的应用程序,例如为了赌博目的生成随机数或在计算机游戏中创建不可预测的结果,随机性对于密码学是重要的。

密码 需要攻击者无法猜到的数字。 我们不能反复使用相同的数字。 我们想以非常不可预测的方式生成这些数字,所以攻击者不能猜测它们。 这些随机数字是安全的加密必不可少的,无论你是加密自己的文件或者只是使用 HTTPS 在互联网上的网站。

video-poker-gambling-randomness

真随机数

你可能想知道计算机如何实际生成一个随机数。 这个“随机性”来自哪里。 如果它只是一段计算机代码,计算机生成的数字是否可能是可预测的?

我们通常将计算机生成的随机数组合成两种类型,取决于它们如何生成:“真”随机数和伪随机数。

为了生成“真实”随机数,计算机测量在计算机外部发生的某种类型的物理现象。 例如,计算机可以测量原子的放射性衰变。 根据量子理论,没有办法确定何时会发生放射性衰变,所以这本质上是来自宇宙的“纯随机性”。 攻击者不能预测何时会发生放射性衰变,因此他们不知道随机值。

对于更多的日常例子,计算机可以依赖于大气噪声或只是使用确切的时间,你按键盘上的键作为不可预测的数据或熵的来源。 例如,您的计算机可能会注意到您在下午2点之后正好按了一个键,时间为0.23423523秒。 抓住足够的与这些按键相关的特定时间,你会有一个熵的来源,你可以用来生成一个“真正的”随机数。 你不是一个可预测的机器,所以攻击者不能猜到你按这些键的精确时刻。 Linux上的/ dev / random设备 ,生成随机数,“块”,直到它收集足够的熵返回真正的随机数不返回结果。

linux-generate-random-data

伪随机数

伪随机数是“真”随机数的替代。 计算机可以使用种子值和算法来生成似乎是随机的但实际上是可预测的数字。 计算机不从环境收集任何随机数据。

这在所有情况下都不一定是坏事。 例如,如果你在玩视频游戏,那么游戏中发生的事件是否由“真实”随机数或伪随机数字来表示并不重要。 另一方面,如果你使用加密,你不想使用伪随机数,攻击者可以猜测。

例如,假设攻击者知道伪随机数生成器使用的算法和种子值。 假设一个加密算法从这个算法得到一个伪随机数,并使用它来生成一个加密密钥,而不增加任何额外的随机性。 如果攻击者知道的足够,他们可以向后工作,并确定加密算法必须选择的伪随机数,在这种情况下,打破加密。

pseudorandom-numbers

NSA和英特尔的硬件随机数发生器

为了使开发人员更容易,并帮助生成安全的随机数,英特尔芯片包括一个称为RdRand的基于硬件的随机数生成器。 该芯片在处理器上使用熵源,并在软件请求时向软件提供随机数。

这里的问题是,随机数生成器本质上是一个黑盒子,我们不知道它里面发生了什么。 如果RdRand包含一个NSA后门,政府将能够打破只使用由随机数生成器提供的数据生成的加密密钥。

这是一个严重的关注。 在2013年12月,FreeBSD的开发者删除了对使用RdRand直接作为随机源的支持,表示他们不能信任它。 [ ]所述RdRand器件的输出将被馈送到另一个算法,增加了附加熵,从而确保在随机数发生器的任何后门不会有问题。 Linux已经以这种方式工作,进一步随机化来自RdRand的随机数据,所以即使有后门,它也是不可预测的。 [ 来源 ]在最近的AMA(“问我任何”),Reddit上,英特尔首席执行官Brian Krzanich没有回答有关这些问题的问题。 [ 来源 ]

当然,这可能不只是英特尔芯片的问题。 FreeBSD的开发人员也用名字命名Via的芯片。 这个争论说明为什么生成真正随机的和不可预测的随机数是如此重要。

intel


为了产生“真”随机数,随机数发生器收集“熵”或来自围绕它们的物理世界的似乎随机的数据。 对于不真正需要的是随机的随机数,他们可能只是使用一个算法和种子值。

图片来源: rekre89在Flickr上丽莎布鲁斯特在Flickr上瑞安索马在Flickr上在Flickr上huangjiahui

赞 (0)
分享到:更多 ()