首页
社区
课程
招聘
真随机数发生
发表于: 2018-12-8 09:20 8519

真随机数发生

2018-12-8 09:20
8519
  我们希望建造真随机数组,有两种方法一种是采集,一种是自造。
一、采集法建造真随机数
  这需要有产生随机数的物理环境,例如环境噪声,宇宙射线计数等等需要专门的设备在此就不讨论了,利用计算机本身的一些随机事件,也能采集到真随机数,但是效率太低,不能快速的得到大量的随机数,所以不适于应用。
二、自造方法
  真随机数并不神秘,只是些分布均匀的乱码而已。要办到这些需要现成的随机源,例如庞大的乱码库,优良的随机函数,优良的随机函数也是现成的随机源,有时没有乱码库,使用优良的随机函数是最实际的选择,让随机性通过定律和运算转移到我们的数组中。我们可以通过运算将有规律的数据变成无规律的乱码,利用热力学第二定律可知,如果用外部因素对数组秩序进行干扰,数组的混乱程度只会增加不会向相反的方向发展。所以我们对分布均匀的有序数组做随机排序,最终能够生成符合要求的随机数组。我们可以利用随机函数来实现数组的随机排序(这相当于利用多种外部因素改造数组秩序),这样建造的随机数组是不依赖于任何算式的,并且数组数据之间是没有任何关系的。要想建造性能优良的真随机数组,规模是不能太小的,否则无法实现统计学意义上的指标,这样建造的数组都是较大的,并且是同时建造,如果让其一个一个的输出则更像个随机函数了,可以有其种子,但是没有周期,并且是可控的,比那些采自物理运动的随机数据更好控制。实践证明不止用顺序数组可以建造真随机数组,我们截取一段伪随机数组应用随机排序也可以建造,同样规模也不能太小。
  澄清一个概念——真随机数组
  真随机数都是以数组形式出现的,真随机数的定义是:看起来像是乱码,不可预测,不可重复产生的数组。所以现实中真随机数组是不存在的,因为存在的数组都是可以重复的,并且是已知的。
  真随机数只存在于其生成机制中,如果它的生成数组看上去是乱码,你不能预测其下一个数值,并且整体上不重复,那它就是个真随机数发生器。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 1
支持
分享
最新回复 (15)
雪    币: 914
活跃值: (2288)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
2
只要是你代码跑出来的,都不是随机数
2018-12-8 09:44
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
关键看怎么跑了,自然界能做到的计算机都能做到。
2018-12-8 14:30
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
4
这个世界上唯一的真随机数只存在于量子物理的世界中。。。
2018-12-9 07:45
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
楼上的认识太偏颇,您扔骰子也能产生真随机数的,不信你试试看。
2018-12-9 09:24
0
雪    币: 1221
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
sjdkx 楼上的认识太偏颇,您扔骰子也能产生真随机数的,不信你试试看。
投骰子也会因为骰子制作时质量分布不均匀导致无法产生真正的随机数
2018-12-9 11:08
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
你用经过检测的等概率骰子就可以了。
2018-12-9 13:57
0
雪    币: 9
活跃值: (319)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
可能神经衰弱浑身乏力也会生成伪随机数,呵呵
2018-12-10 07:51
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
可能不可能,需用数据说话,满嘴跑舌头想怎么说就怎么说可不行。
本帖子的论点都是有试验基础的。随机排序后能通过NIST检测才算是较合格的随机数组。
2018-12-11 10:35
0
雪    币: 10845
活跃值: (1054)
能力值: (RANK:190 )
在线值:
发帖
回帖
粉丝
10
随机扰乱顺序,是否会导致:扰乱后的序列的每个数字出现的次数 与扰乱之前的出现次数一样?
例如:扰乱前是:0x00000000-0xffffffff
对这2^32个数字扰乱顺序 得到一个新序列
不论这个序列有多么“真随机” 都会存在一个问题:当使用完了2^32-1个数字之后 我完全可以预测 剩下的那个数字一定就是那个从未出现过的数字。所以,这个序列不可以当做真随机序列来使用。(因为我可以预测它的下一个数字了)
以上只是一种极端的例子,能够让安全问题得以凸显。
但即便不是这样极端的场景,也同样有类似问题。
所以,通过将一定已知序列随机扰乱顺序来获得随机序列,是不安全的。
2018-12-12 15:00
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
11
楼上过虑了,有自然规律做保证,你什么也预测不了。
例如你的盘子里放着由几种颜色的沙子,你拿个铲子去搅动,你别指望还会回到最初的状态了。热力学第二定律告诉我们,沙子只能向着颜色混乱的方向发展,而不可能相反。
2018-12-12 22:47
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
12
@看场雪    看你的帖子,对随机数组的认识有问题,你的认识好像是,在序列中相邻的数组元素都不一样,所以你才有那种言论,事实上元素的各种排列都可能出现,双联的三联的....只是出现的概率有所不同。
2018-12-14 17:11
0
雪    币: 10845
活跃值: (1054)
能力值: (RANK:190 )
在线值:
发帖
回帖
粉丝
13

谢谢楼主回复
我对本帖的大部分内容都同意 只是对这句话有不同理解

 

 

我的观点是:不能对已知分布均匀的有序数组做随机排序
最好是:对分布未知、不可预测的数组做随机排序

 

因为分布均匀(或者分布有规律)的数组 会出现我上面回帖中所述的安全风险

 

不过 这里面引入了一个悖论
既然已经是分布未知、不可预测的数组了,干嘛还需要随机排序呢?
我认为答案是:这个被随机排序之前的数组的随机性不是很理想,希望再增强一下
所以 ‘随机排序’这一招 不能用在一个‘已知分布均匀’的数组上

 

另外 楼主还提到了一个概念:在序列中相邻的数组元素 是否一样
我补充说明一下,在我的观点中 从未提及过 相邻元素是否需要一样或不一样
这和我的观点毫无关系,也不重要

2018-12-16 09:40
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
14
@看场雪
1)为什么要对有序数组做随机排序?
是因为要凭空建造随机数组,而有序数组是被加工的原料,以达到各元素尽量的数量上一致。
2)你说的 悖论,乱码数组不需要再随机排序了,因为已经是乱码数组了。
随机排序是为了生成新的未知数组,例如截取一段伪随机数组,对其进行随机排序,就可以产生新的数组,并且是无法反算回去的,目的是生成可控的随机数据。

目的都是为了生成真随机数组,方法各有差别而已。实际上不管数组原始状态如何,只要组成数组的元素是均匀的,经随机排序后都能生成真随机数组。


2018-12-16 13:55
0
雪    币: 1563
活跃值: (272)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
15
生成随机数的方法不少,只要能收集到随机的元素。可以有一个收集random因素的pool 然后每次发生随机数时候可以基于里面的内容进行生成。比如某些包的package number,或者周围的一些噪声声波信息,或者是一些cpu某时刻使用的信息等等。都会收集到一个random pool之中。
2018-12-31 11:54
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
16
靠搜集随机信息形成随机数效率太低,这里的方法是利用现有资源创造随机数,实际也是利用现有的随机因素,并且是取之不尽用之不绝的。
2018-12-31 14:52
0
游客
登录 | 注册 方可回帖
返回
//