百科问答小站 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 网友的相关建议: 
      

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




  

相关话题

  法律是否可能被代码化? 
  江苏一公司要求员工改用国产手机,称买苹果辞退买华为补贴,这类「支持国货」的行为值得提倡吗? 
  为什么现在的电脑应用程序这么吃内存(RAM)? 
  圣彼得堡悖论,期望与实际相差为何这么大? 
  这张图中能数出多少个三角形? 
  如何评价Remove China Apps在印度被追捧? 
  品胜是如何成为国内数码配件的龙头品牌的? 
  有哪些顶级水平的中国程序员? 
  大二学生,计算机科学与技术专业,学到数据结构和组原有点心态爆炸了,看不懂敲不出代码,还有救吗 ? 
  286 电脑究竟有多慢? 

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





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