计算机如何产生随机数

计算机为从密码学到电子游戏和赌博的所有东西生成随机数。随机数有两类——“真”随机数和伪随机数,两者的区别对于加密系统的安全性非常重要。...

计算机如何产生随机数

计算机为从密码学到电子游戏和赌博的所有东西生成随机数。随机数有两类——“真”随机数和伪随机数,两者的区别对于加密系统的安全性非常重要。

计算机可以通过观察一些外部数据(如鼠标移动或风扇噪音,这是不可预测的)并从中创建数据来生成真正的随机数。这就是所谓的熵。另一些时候,他们通过使用一种算法生成“伪随机”数,这样结果看起来是随机的,即使它们不是。

这个话题最近争议更大,很多人质疑英特尔内置的硬件随机数发生器芯片是否值得信赖。要理解为什么它可能不可信,首先必须了解随机数是如何生成的,以及它们的用途。

随机数是用来做什么的

随机数已经使用了几千年。无论是掷硬币还是掷骰子,目标都是把最终结果留给随机的机会。计算机中的随机数发生器是类似的——它们试图得到一个不可预测的随机结果。

相关:什么是加密,它是如何工作的?

随机数生成器有许多不同的用途。除了为赌博目的生成随机数或在电脑游戏中产生不可预测的结果等明显的应用之外,随机性对于密码学来说也很重要。

密码学需要攻击者猜不到的数字。我们不能一次又一次地使用相同的数字。我们希望以一种非常不可预测的方式生成这些数字,以便攻击者无法猜到它们。这些随机数对于安全加密是必不可少的,无论你是加密自己的文件还是仅仅使用互联网上的HTTPS网站。

计算机如何产生随机数

真随机数

你可能想知道计算机是如何产生一个随机数的。这种“随机性”从何而来。如果只是一段计算机代码,难道计算机生成的数字不可能是可预测的吗?

我们通常将计算机生成的随机数分为两类,具体取决于它们的生成方式:“真”随机数和伪随机数。

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

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

计算机如何产生随机数

伪随机数

伪随机数是“真”随机数的另一种选择。计算机可以使用一个种子值和一个算法来生成看似随机但实际上是可预测的数字。计算机不会从环境中收集任何随机数据。

这不一定在任何情况下都是坏事。例如,如果你在玩一个电子游戏,游戏中发生的事件是由“真”随机数还是伪随机数引起的其实并不重要。另一方面,如果使用加密,则不希望使用攻击者可以猜到的伪随机数。

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

计算机如何产生随机数

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

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

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

这是一个严重的问题。2013年12月,FreeBSD的开发人员取消了直接使用RdRand作为随机性来源的支持,称他们无法信任它。[来源]RdRand设备的输出将被输入到另一个增加额外熵的算法中,确保随机数生成器中的任何后门都不重要。Linux已经以这种方式工作了,它进一步将来自RdRand的随机数据随机化,这样即使有后门也无法预测。[来源]在最近一次关于Reddit的AMA(“问我任何事”)中,英特尔首席执行官布莱恩•克扎尼奇(briankrzanich)没有回答有关这些问题的问题。[来源]

当然,这可能不仅仅是英特尔芯片的问题。FreeBSD的开发者也直呼Via芯片的名字。这场争论说明了为什么产生真正随机且不可预测的随机数是如此重要。

计算机如何产生随机数


为了生成“真”随机数,随机数生成器从周围的物理世界收集“熵”或看似随机的数据。对于实际上不需要随机的随机数,它们可以只使用一个算法和一个种子值。

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

  • 发表于 2021-04-08 00:19
  • 阅读 ( 191 )
  • 分类:互联网

你可能感兴趣的文章

什么是rng?给玩家上的一课

... 虽然听起来很简单,但实际上计算机在生成随机数时遇到了麻烦。这是因为计算机是按照指令设计的,这与随机性相反。你不能只是告诉机器“想出一个随机数”,因为给出如何随机选择的指令是一个...

  • 发布于 2021-03-19 11:50
  • 阅读 ( 201 )

如何在google表单中生成随机数

...他范围,但RANDBETWEENfunction是一种更简单的方法。 相关:计算机如何生成随机数 单击要**随机数的单元格,然后键入=randbween(<Low>,<High>),但将<Low>和<High>替换为希望随机...

  • 发布于 2021-04-02 23:54
  • 阅读 ( 245 )

微分振荡器

...其他形式的技术分析,如价格行为分析和图表模式。 如何使用微分振荡器的示例 下面的苹果公司(Apple Inc.)周线图中有一个微分振荡器。零线交叉用垂直线和箭头标记。买入和卖出信号将发生在当天收盘时,当信号发生或...

  • 发布于 2021-06-01 15:13
  • 阅读 ( 197 )

随机rsi-stochrsi定义

... 最高RSI=过去14个期间(或回顾期)的最高RSI读数。 如何计算随机rsi StochRSI基于RSI读数。RSI有一个输入值,通常是14,它告诉指示器在计算中使用了多少个数据周期。这些RSI水平然后用于StochRSI公式。 记录14个周期的RSI水平...

  • 发布于 2021-06-02 15:11
  • 阅读 ( 239 )

随机振荡器

...第一个,也可以说是最重要的,交易信号通道确定。 如何使用随机振荡器的示例 随机振子包含在大多数绘图工具中,可以很容易地应用于实践中。使用的标准时间段为14天,但可以根据具体分析需要进行调整。随机振荡的计...

  • 发布于 2021-06-02 15:56
  • 阅读 ( 179 )

chande动量振荡器定义

...的较高收盘价之和ssl=N个周期的较低收盘价之和​ 如何计算chande动量振荡器 计算N个周期内较高收盘价的总和。 计算N个周期内的下限收盘价之和。 从N个周期的较高收盘价之和中减去N个周期的较低收盘价之和。 将N个周期...

  • 发布于 2021-06-09 22:10
  • 阅读 ( 165 )

触发线

...指标的确认或过滤,贸易信号是不可靠的。 触发线是如何计算的? 触发线是MACD(或其他指标)计算的移动平均值。 计算指示器最后“n”个值的EMA以创建触发线。9是常用的“n”值。 触发线告诉你什么? 触发线提供了...

  • 发布于 2021-06-10 03:40
  • 阅读 ( 207 )

macd与随机:一种双交叉策略

...右侧显示的近乎完美的十字。 你可能会注意到MACD和随机数接近同时交叉的几个例子:例如2008年1月,3月中旬和4月中旬。在这么大的一张图上,它们甚至看起来是在同一时间交叉的,但是当你仔细观察时,你会发现它们实际...

  • 发布于 2021-06-10 18:11
  • 阅读 ( 143 )

信号线定义和使用

...的三周期简单移动平均(SMA)(在本例中称为%K)。 如何计算信号线 找到您正在使用的指示器的信号线的公式。通常,公式是指标的EMA或SMA。 计算指标或将其添加到图表软件中的图表中。 计算指示器的EMA或SMA。或者,将适...

  • 发布于 2021-06-10 23:52
  • 阅读 ( 128 )

随机游走指数

...希望利用这种方法,可能结合其他形式的技术分析。 如何使用随机游走索引的示例 苹果公司(Apple Inc.)的日线图上有一个30周期的RWI指标。 当价格下跌时,红线或RWI Low位于顶部。 当价格上涨时,绿线或RWI High位于顶部。...

  • 发布于 2021-06-11 01:28
  • 阅读 ( 269 )
M420390558890
M420390558890

0 篇文章

相关推荐