电脑取随机数是什么原理,是真正的随机数吗?
2016-09-18 18:47
375 查看
作者:王納米
链接:https://www.zhihu.com/question/20423025/answer/15097735
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
首先,「真随机」也有不同的含义,若想要「真正的真随机」目测只能靠量子力学了。一般的所谓真随机不是指这个,而是指统计意义上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面说的也是这种。
答案是,计算机系统可以产生统计意义上的真随机数。
大部分程序和语言中的随机数(比如 C 中的,MATLAB 中的),确实都只是伪随机。是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。
直观来想,计算机是一种可确定,可预测的的设备,想通过一行一行的确定的代码自身产生真随机,显然不可能。但是,我们或许可以迂回一下……
实现方法简单说就是软硬结合,或者说,引入系统外的变量(把软件,代码,算法想象成一个封闭的系统)。
一个典型的例子就是 UNIX 内核中的随机数发生器(/dev/random),它在理论上能产生真随机。即这个随机数的生成,独立于生成函数,这时我们说这个产生器是非确定的。
具体来讲,UNIX 维护了一个熵池,不断收集非确定性的设备事件,即机器运行环境中产生的硬件噪音来作为种子。
比如说:时钟,IO 请求的响应时间,特定硬件中断的时间间隔,键盘敲击速度,鼠标位置变化,甚至周围的电磁波等等……直观地说,你每按一次键盘,动一下鼠标,邻居家 wifi 信号强度变化,磁盘写入速度,等等信号,都可能被用来生成随机数。
更具体的,内核提供了向熵池填充数据的接口:
比如鼠标的就是
内核子系统和驱动调用这个函数,把鼠标的位置和中断间隔时间作为噪音源填充进熵池。
所以,结论是,程序和算法本身不能产生真随机,但是计算机系统作为整体可以迂回产生统计意义上的真随机。
参考:
内核源码在/drivers/char/random.c
Windows 中也有相对的随机数生成器,基本的思想是一致的
如果要求更高的话,也有专用的设备,可收集附近的电磁场等环境噪音来产生随机数
原文:https://www.zhihu.com/question/20423025
链接:https://www.zhihu.com/question/20423025/answer/15097735
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
首先,「真随机」也有不同的含义,若想要「真正的真随机」目测只能靠量子力学了。一般的所谓真随机不是指这个,而是指统计意义上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面说的也是这种。
答案是,计算机系统可以产生统计意义上的真随机数。
大部分程序和语言中的随机数(比如 C 中的,MATLAB 中的),确实都只是伪随机。是由可确定的函数(常用线性同余),通过一个种子(常用时钟),产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。
直观来想,计算机是一种可确定,可预测的的设备,想通过一行一行的确定的代码自身产生真随机,显然不可能。但是,我们或许可以迂回一下……
实现方法简单说就是软硬结合,或者说,引入系统外的变量(把软件,代码,算法想象成一个封闭的系统)。
一个典型的例子就是 UNIX 内核中的随机数发生器(/dev/random),它在理论上能产生真随机。即这个随机数的生成,独立于生成函数,这时我们说这个产生器是非确定的。
具体来讲,UNIX 维护了一个熵池,不断收集非确定性的设备事件,即机器运行环境中产生的硬件噪音来作为种子。
比如说:时钟,IO 请求的响应时间,特定硬件中断的时间间隔,键盘敲击速度,鼠标位置变化,甚至周围的电磁波等等……直观地说,你每按一次键盘,动一下鼠标,邻居家 wifi 信号强度变化,磁盘写入速度,等等信号,都可能被用来生成随机数。
更具体的,内核提供了向熵池填充数据的接口:
比如鼠标的就是
void add_mouse_randomness(__u32 mouse_data)
内核子系统和驱动调用这个函数,把鼠标的位置和中断间隔时间作为噪音源填充进熵池。
所以,结论是,程序和算法本身不能产生真随机,但是计算机系统作为整体可以迂回产生统计意义上的真随机。
参考:
内核源码在/drivers/char/random.c
Windows 中也有相对的随机数生成器,基本的思想是一致的
如果要求更高的话,也有专用的设备,可收集附近的电磁场等环境噪音来产生随机数
原文:https://www.zhihu.com/question/20423025
相关文章推荐
- 电脑取随机数是什么原理,是真正的随机数吗?转自知乎.
- 中国的电脑何时像手机一样普及,电脑真正意义上地普及后,挑战和机遇是什么?
- 电脑工作原理是什么?
- 手机扫电脑浏览器页面里的二维码后,电脑中该页面自动跳转,什么原理
- pv是什么的真正含义?
- XP系统电脑开机桌面上什么文件都没有啦怎么办
- 女人真正想要的是什么?
- WebSocket 是什么原理?为什么可以实现持久连接?
- C/C++语言中让电脑随机的在某个范围中的任一随机数
- FPGA实现任意分频 为所欲为——教你什么才是真正的任意分频
- 什么是真正的APM(一)
- 今天公司的电脑被强制安装了Windows XP Service Pack 2,觉得没有什么太大的变化!
- 通过Volley我们能学到什么?(3) — 缓存原理
- 什么是真正的生活!?
- 一点开某个链接就中毒了、账号和密码就泄露了?可能吗?可能的话原理是什么?
- 什么是Hijax?Hijax的原理及优缺点介绍
- 什么才是真正程序员?
- 垃圾回收机制中,引入计数是如何实现的,内部原理是什么,怎么维持对象引用的
- 什么是真正的相声?
- 我是初学者,谁能帮帮我,看看我电脑出了什么问题