百科问答小站 logo
百科问答小站 font logo



工程上存在那么多不确定情况,为什么计算机不能利用它们产生真随机数,而只能根据逻辑产生伪随机数? 第1页

  

user avatar   s.invalid 网友的相关建议: 
      

题主很聪明。


没错,计算机的确使用这些东西产生了真随机数——在Linux下,你只需访问/dev/random就可以使用它。


不过,如果你真的在工程中用过这个/dev/random,你就会知道……这玩意儿可不是一般的慢。

它产生真随机数的速度,比你在键盘上乱敲都快不了多少。任何使用了这玩意儿的算法,都会有肉眼可查的明显延迟——哪怕你仅仅用它产生一个简单密码。


这是因为,它需要利用系统“熵池”收集的随机性才能产生真随机数;而“熵池”累计随机bit的速度极其有限。

简单说,系统可能利用当前进程数、IO错误次数、用户键入等等“客观”随机过程选择随机bit;但这类东西往往若干毫秒甚至若干分钟才会更新一次……


举例来说,假如你敲键盘是绝对随机的;键盘上有26个字母以及10个数字。那么你每敲一下键盘,就相当于在36个不同可能中选择了其中一个。

换句话说,你的每次击键产生了ln(36)个随机bit。两次击键才有一个多字节的随机二进制信息产生——注意前提是你的击键是绝对随机、而且每个按键几率均等的。否则产生的随机位数还要更低。


假如你每分钟能击键1000次,那么借助你不间断的键入活动,计算机大概可以得到500多个字节/分钟的随机信息。

相对于内存访问动辄几十G字节/秒的恐怖速率,这个产生速度可真是比蜗牛惨太多了。


大多时候,随机值的产生速率比它是不是真随机重要得多。对很多算法,我们往往只是需要一个“随机值”,并不需要它“真随机”。


甚至,哪怕我们的确需要“无法预测的随机性”,我们也无法容忍真随机数的低速率。

比如说,我们想用一台服务器支持数万人同时玩牌类游戏;如果依靠/dev/random,那么恐怕很多用户就不得不排队“等随机数”。

为了减少等待,我们就不得不想办法加速熵池;然而计算机内部的“真随机性”就那么点点,而且严重依赖于用户活动——于是,要么用户老老实实等上几分钟的随机数,要么我们就得降低熵池的质量,使得“真随机数”不再随机。


因此,虽然的确可以利用计算机运行的不确定性产生真随机数,但它的产生效率实在太低,实在难以利用。


而一个质量足够好的伪随机数生成算法完全可以做到不可预测同时分布良好,并且还有极高的生成效率。再借助真随机数初始化它的“种子”,就可以以极高效率得到足够完美的随机序列了。


综上:

1、计算机完全可以产生真随机数,借助用户活动或硬件不稳定性即可(甚至有专门制造的真随机数产生器,可以利用分子热运动的随机性输出随机序列)

2、但是,仍然无法利用算法本身产生真随机数


学艺不精者很容易在这里出现迷惑。他们会觉得数字电路就和随机性无关,只要一见别人说“计算机内部产生真随机数”就兴致勃勃来杠上一番。


但事实上:

1、算法无法产生真随机数

2、计算机完全可以借助用户活动、复杂的硬件结构本身的噪音(比如机箱风扇的震动引起硬盘寻道速率变化)等等得到真随机数

这两者完全可以同时存在。


补充一句:热噪声本质上是海量微观粒子彼此间量子交互、并经混沌演化后投射到宏观世界的某种统计量。哪怕量子随机性被破,它都还有一道“海量粒子构成的混沌系统”构成的双保险。这显然是把比单纯的量子随机更安全的锁。


经典物理的混沌解释只是一种解释

如果人类能对自然“言出法随”,这样解释了,热噪声就必须按“三体”这样的混沌原理出现的话,它当然只能是经典的混沌系统,当然比不上量子随机性。

可惜的是,自然界懒得理你们人类的错误解释。它就是要让微观粒子遵循量子论,然后才在宏观上表现出热噪声的随机性——而你们人类还绞尽脑汁都找不出差别。

当然,热噪声系统容易受外界干扰(以宏观层面的干涉来影响宏观层面的统计值),所以在使用中需要小心滤除。在这点上,它的确不如纯粹的量子系统安全。但这和“它的本质是经典的因此比不过天生高贵的量子系统”完全是两回事(这个论调的荒诞程度和量子速读无非五十步笑百步罢了)。


user avatar   bug-zhang 网友的相关建议: 
      

看来你需要了解大名鼎鼎的熔岩灯随机数墙。长这样:

美国IT公司 Cloudflare 的旧金山总部,有一面由100盏熔岩灯(lava lamp)组成的墙。这面墙位于接待处附近,每一位踏入公司大门的人,都没法不注意到它,因为这些诞生于上世纪 60 年代的灯具,拥有着艳丽且奇幻的色彩,玻璃容器内形状不定的液蜡还会不时地上下浮动,极易让人联想到流动的熔岩。不过,这一切不只与办公室装饰相关。这些变幻莫测的熔岩灯,还是 Cloudflare 提供的网络安全服务的一部分。

因为要处理海量的加密流量,它需要使用到大量的随机数。这些随机数都是伪随机数生成器产生的。伪随机数生成器产生的随机数能被预测和破解。那么如何减少随机数的可预测性?Cloudflare 披露了它的方法——使用熔岩灯。熔岩灯的名字源于内部不定形状的蜡滴的缓慢流动,让人联想到熔岩的流动。Cloudflare 利用摄像头监视熔岩灯,拍摄视频和照片,然后将其转变成无法预测的随机比特流,再用它生成密钥。


user avatar   Ivony 网友的相关建议: 
      

其实除了产生效率的问题,很多真随机数的均匀性是很难被严格证明的。而很多时候,均匀性比不可预测性更重要……




  

相关话题

  如何评价姜新文老师提出的NP=P这篇文章? 
  怎么找到姚班或者ACM班或者其他高校计算机巨强的男生做男朋友呀? 
  教材上说铁路订票系统是实时操作系统,可是服务器的Linux不是分时操作系统吗? 
  非计算机专业学生怎么走上计算机技术之路? 
  「传输自动生成代码并执行、生成所需文件」能否成为未来的下载方式? 
  遇到西交大一附院这种事情学生应该怎么办? 
  华为出售 X86 服务器业务,你怎么看?会对华为产生哪些影响? 
  算法研究属于数学专业还是计算机专业? 
  怎样让自己的 PC 拥有强大的功能和极高的效率? 
  如何正确地用 Test Driven Development 实现算法? 

前一个讨论
透明物体和白色物体,一个透过所有光,一个反射所有光,为什么一个看起来是透明的,一个看起来是白色的?
下一个讨论
西周时期怎么进行分封的?





© 2024-11-09 - tinynew.org. All Rights Reserved.
© 2024-11-09 - tinynew.org. 保留所有权利