博客专栏

EEPW首页 > 博客 > 筛子的点数,是随机的吗?

筛子的点数,是随机的吗?

发布人:电巢 时间:2022-12-02 来源:工程师 发布文章


打开微信,往一个8人群里发一个9分钱的拼手气红包。那么不管你发多少次,最后一个抢红包的人都必定能拿到两分钱,不信你可以试一试。显然,在分配红包金额这件事上,你手上的这台小型计算机并不是真的随机。那计算机是如何制造随机事件的?各种软件中的随机都是真的随机吗?

在计算机中生成随机事件的关键是输出一个随机数,然后再利用算法就能模拟出各式各样的随机事件。你刚才看到的拼手气红包背后就有这样一套算法。其中的随机数决定了你最后抢到的金额大小。如何才能得到这样的随机数呢?

1946年,计算机支付冯诺依曼提出了这么一套方案,编写一个随机数生成器,只要输入任意一个数字作为种子,计算机就能通过运算生成一个新的随机数字。然后再把这个数字作为输入值带入下一轮计算,重复这个过程,就能生成多个具有统计意义的随机数。


直到今天,你的手机电脑仍然在沿用这套随机数生成方案,只是把随机数生成器升级成了运算效果更好的线性反馈移位寄存器。随机种子的花样也更多了。从系统时间、鼠标位置到网络速度,硬盘读写速度,甚至是你聊天记录的本地文件都可以被拿来当做随机数生成的初始条件,决定最后的随机结果。这样得到的数字,乍看起来非常随机。但受到算法的限制,只要取样范围够大,数字排列早晚会陷入循环。所以这种方式产生的随机数只能叫做伪随机数。

以常用的梅森旋转算法为例,它生成随机数的循环周期是2的19937次方。哪怕全世界的计算机一起工作,直到太阳系毁灭的那一天,你也等不到这个循环。但无论循环周期有多长,只要知道一开始的随机种子,再用同一个随机数生成器,就能预测随机结果。


比如在1994年,飞利浦的一名员工就弄到了当时的互联网巨头Netscape的服务器随机种子,在输入当前时间加特定字符之后,他就成功解密了对方所有网络服务器的流量信息。

除了能完美预测伪随机结果,你甚至还能主动改变随机种子的数值,让所谓的随机事件变成百分之百发生的必然事件。


比如2014年,俄罗斯的一位数学家就拆解了一台旧老虎机,获取了老虎机采用的伪随机算法,然后设计了一套程序,只要用手机拍下其他人的****博过程,就能反推计算出老虎机所用的随机种子。有了这套方法,你只需要找出对应时间点拉下拉杆就能欧神附体,百发百中。最终被丢出****场关进局子。

说到底,虽然伪随机数应用广泛,但它毕竟不是真正的随机数,想要生成无法预测的真随机数,还得从硬件层面想办法。1999年,英特尔在其i810芯片组上集成了一枚真随机数生成器。它通过放大电路产生的热噪声,把电路中分子的不规则热运动作为数据来源,这才让计算机拥有了自主生成随机数的能力。类似的一些专门提供真随机数服务的公司,还会通过收集现实世界中的随机事件,比如大气噪音的振幅变化,或者是人工掷骰子转动轮盘的结果。再把它们转化为二进制或者十进制的数字,以此获得更高品质的随机数资源。通过这些方式获得的随机数几乎不可能预测,所以被称为真随机数。他们主要被应用于安全或者密码学领域,用来保护最重要的数据信息。

不过如果硬要抬杠,那么这种真随机数其实也不够随机。因为宏观现实世界里的一切随机现象仍然遵循物理学的必然规律,只是我们这些凡人无法参透罢了。如果拉普拉斯妖真的存在,那么理论上它就能知晓所有原子的分布和动量,算出任何色子的点数,破解一切加密的信息。如果想要实现绝对的随机,那就只能求助于量子力学了。


随着技术发展,如今的研究人员已经能够通过记录元素的衰变和放射情况,或者是探测真空中氩原子的噪音,或者统计出纠缠粒子出现的随机位,设计出更新型的随机数生成器。

在现有科学体系下,这种方式产生的数字没有规律,在物理和哲学层面上都绝对不可预测,是真正意义上的随机数。不过回归现实,用量子力学生成随机数,技术难度实在太高,用芯片自带的真随机数生成器,输出效率又太低。

你手上这台计算机现在用的,其实还是尾随基数。而且有时候过于随机,也不一定是件好事儿。如果没有软件算法为用户把控恰到好处的随机感,而是直接让这些随机数来决定结果。那么你很可能在听音乐的时候,连续三次都听到同一首曲子。抢红包的时候,每一次都是手气最差。玩游戏的时候连抽一百张卡都没有SSR。说白了,你感受到的随机根本就不是命运的捉弄,而是算法提前安排好的罢了。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词: 筛子

技术专区

关闭