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