首页
社区
课程
招聘
[原创]新型随机数生成方式
2015-7-19 20:52 5665

[原创]新型随机数生成方式

2015-7-19 20:52
5665
  现在生成随机数组一般都利用随机函数,随机函数都是由公式组成。由一个或几个公式经运算得到源源不断的随机函数值,公式中的系数至关重要,取不同的值对函数影响很大,有的参数值可能造成缺员、周期短小、有死点。优选参数需要做大量试验,运算量不是一般微机能承受的。并且由于其发生原理的原因,造成数据之间的相关性较大,一般是这次函数的输出值作为下一个函数值的种子,所以很难造出比较理想的,也就是随机性强的数组。
  这种新的随机函数的随机数发生方式完全不同,它完全是构造出来的,而不是由公式生成的,先将数组的元素备齐,然后对数据进行加工,首先在成员上实现了绝对均匀,数据加工也很简单只用洗牌算法(随机排序)即可。并且生成的数组是没有周期,也绝不会有死点。如果将老式随机函数看成是串行处理,它比较类似并行处理。
  随机排序的实现:用一个或多个老式随机函数来完成效率比较高。往往一个循环的随机排序就能达到足够的混乱程度。不使用随机函数,在交换序号的算式中使用一些随机性强的数据也一样可以生成随机数组但这样效率较低,一遍随机排序循环不一定令人满意,一般需要多次循环。
  数据的混乱程度有定律作保证。随机排序,相当于多种因素作用于数组数据,根据热力学第二定律,混乱程度只能增加而不可能做相反的变化。例如我们将围棋的黑白棋子混在一起,你拿棍子去搅动,只能是越来越混乱,而不能向相反的方向发展。
  虽然新型随机数发生方式有许多优点,它们能产生分布均匀,相互之间不相干的数据,但它同老式随机函数一样是可以控制的,你可以从多方面控制最终的数组形态,例如可以从 1)初始数组。2)排序方式。3)运算次数。等方面下手,只要条件一样结果也是相同的。新随机数生成方式对数据的处理是灵活的,一组数据加工好以后,还可以进行多次加工,每次将得到完全不同的结果。最大特点是数据之间没有关联,这一点可以和真随机数媲美。但比真随机数好用的多,因为它是可控的,而真随机数是不可控的。这样在密码学里就可以使用它们作为密钥数组,来完成数据加密。
  在密码学里一定要使用外部的变数来控制密钥数组的建立,否则只要读懂了程序秘密也就不存在了。外部的变数就是用户密码,用它们的衍生值来控制密钥数组的建立才能确保信息的安全。

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

收藏
免费 0
打赏
分享
最新回复 (6)
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2015-8-11 16:26
2
0
欢迎大家提意见。
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
没有姓名 2015-8-11 18:47
3
0
为了抵御暴力攻击,数组大小至少要2^80,那么整个数组至少要2^80*10bytes=10*2^40TBytes来保存,其他的我就不说了。
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2015-8-11 21:32
4
0
楼上过虑了,因为数组成员几乎是独立变量,即便是小数组暴力破解也不能成功。
雪    币: 67
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
没有姓名 2015-8-26 15:51
5
0
由一个或几个公式经运算得到源源不断的随机函数值,公式中的系数至关重要,取不同的值对函数影响很大,有的参数值可能造成缺员、周期短小、有死点。


并且由于其发生原理的原因,造成数据之间的相关性较大


它完全是构造出来的,而不是由公式生成的


。。。

我就不再一一列举了,感觉你应该是程序猿过来的吧,建议你先找本密码学的专业书籍看看“伪随机数生成器”的章节,有时间的话再看看“序列密码”的章节,不需要全部看完看懂,只要看看前言部分的介绍就好了。

为了简单起见,如果你可以找个虚拟机装个archlinux,然后执行pacman-key --init,思考为什么这个初始化过程要等那么久。
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2015-8-28 08:42
6
0
哈哈,不知道您想干什么?看那些东西有什么用处?
现在的随机函数,只能生成表面看上去像乱码的东西,实际种子和输出是显然的因果关系,它们的关联性是必然的,这就限制了其质量和使用,而我们的目的是得到一些随机性好的数组,老式随机函数基本上是做不到的,所以要改进提高。
雪    币: 69
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
soechin 2015-8-28 09:37
7
0
依照您的理论实作:

srand(time(NULL));
srand(rand());
srand(rand());
printf_s("%d\n", rand());

不谢。
游客
登录 | 注册 方可回帖
返回