首页
社区
课程
招聘
真随机数的获得
发表于: 2019-1-20 09:54 9210

真随机数的获得

2019-1-20 09:54
9210
  现在人们习惯于从随机的物理现象中获取随机数,这需要一些专门的设备比较繁琐和高成本。其实利用本地资源就可以方便地生成无穷无尽的优质随机数。
  随机数就是一些互不相干的乱码而已,前面的帖子【利用热力学第二定律建造真随机数】中已用实例证明,随机数是可以从无到有的,也就是可以凭空产生的,这也不难理解,对某些符合条件的有规律数组,只要将其随机排序,就能生成能通过NIST检测的数组,甚至不借助随机函数都是可以完成数组建造的,并且一个能通过NIST检测的数组,如果用不同的方式对其随机排序,就能生成新的能通过NIST检测的数组,这样就可以源源不断的产生随机数组了,并且是真随机数组的发生器,前面已经提到,现实中不存在真随机数组,数组一旦形成就不符合真随机数的定义了,所以真随机数是存在于其发生器中的,如果发生器能生成看上去是乱码的数组,并且你不能预测出下一个生成值,并且没有重复那么它就是真随机数发生器。这里也可看出变质的真随机数组是可再生资源,对使用过的数组不要轻易舍弃,对其进行随机排序就能产出新的随机数组。如果使用一个或多个随机函数能更好的实现随机排序的完成,提高建造效率。这是为什么呢?实际是将随机函数所蕴藏的随机性转移到了数组中,随机函数并不影响元素的数值,只影响到数组的重新排列,也就是对数组进行洗牌而已。尤其是一些优秀的随机函数周期非常大TM19937周期为10的6000次方,利用这
些你可以造就无穷无尽的真随机数组。
  从优秀随机函数中截取一段数组(最好大于1M),对其进行随机排序,排好后放入库中,并重新排序...依次生成无穷无尽的随机数组。
  上述方法是非常实用的,因为这些的数组是某种程度上可控的,在确定的条件下生成特定的数组,取决于设定的初始条件和方法,你可以复现这些数组,如果两地通讯使用完全一样的密钥数组就可以约定产生,而不需要传递密钥了。
  前面的帖子【利用热力学第二定律建造真随机数】中可以看到,在决定排序位置的数据只是利用了一些含随机因素的变量,利用随机函数和这些的组合将使效率大为提高,排序是综合效果的体现关系相当复杂,最终使得数组中的数据之间没有任何关系都是相互独立的。根据熵增加原理被排序数组只能向着混乱的方向发展,并且是不可逆的,这也是随机数生成的根本原因。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 35
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2019-1-20 17:12
0
雪    币: 35
活跃值: (1959)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
伪随机为什么叫伪随机?因为只要知道随机函数的随机种子,其生成的数据就是可以预测的,即使纯基于随机数实现各种变换的随机算法都会有有同样的问题。
据我所知,某些高强度的加密中使用的随机种子会结合一些可预测性比较难的物理参数或者人机交互来规避这个问题,比如硬盘随机寻道时间、获取进程CPU切换消耗时间、当前鼠标指针下的屏幕颜色、主机名等等,通过这样产生随机种子同时结合一个靠谱的随机算法基本上无法破解。
2019-1-20 20:00
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
好像得到了随机种子就什么都掌握了,实际没那么简单,也许是多个随机函数,并且严重和参与运算的参数形式有关及排序次数这些都不是明显得出结论的,要是参数里有用户密码或其衍生值,你怎么预测呢?而种子一般也是由用户密码算出来的,所以不要做出错误的判断,得到错误的结论。
2019-1-20 21:24
0
雪    币: 248
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼主及各位的优秀评论,看完后感觉对随机种子的生成有了新的认识. 
2019-1-29 15:37
0
游客
登录 | 注册 方可回帖
返回
//