首页
社区
课程
招聘
[讨论]关于随机数
发表于: 2014-12-25 14:53 6889

[讨论]关于随机数

2014-12-25 14:53
6889
常看到有人讨论随机数,也看到不少所谓的新方法新理论,以下提出一些个人观点,以供参考。

有一段路,被涂成黑白两色,每隔1米颜色切换。有一个人走在这条路上(初始位置不确定),每走Pi(圆周率)米,查看脚下路面颜色,黑色记1,白色记0,于是,这个人就可以无限采集比特串了。
这是电路产生随机数的最简单方法之一。
直接使用电路提供的随机数,通常效果不是很好,主要表现在两方面:一是物理材料难免会有偏差,例如不能保证每次都能精确的以走Pi(圆周率)米来取值,导致随机性会不好;二是速度会比较慢。
实际使用随机数时,通常取两段电路产生的随机数,一段做明文,一段做密钥,做加密运算,将结果作为输出的随机数第一包,然后将密钥中的bit位做一次置换做新的密钥(具体置换方式由具体算法确定),继续加密,得到的输出做随机数的第二包,如此继续,直到产生的随机数多到一定程度,这时使用电路重新生成两段随机数,换掉初始的明文和密钥。

自然界无法产生绝对的随机数。但人们可以从符合随机性原理的方式设计随机数。通过电路模拟随机原理,产生随机种子,通过软件设计逻辑上更理想的随机数。从这里可以看见随机数生成算法与密码算法的天然联系。好的密码算法通常都可以作为随机数生成算法,随机性的好坏,通常也可以作为验证密码算法好坏的指标之一。

所以,随机数生成算法的研究,其实无非是两点:一是寻找更容易实现的随机性原理;二是寻找更好的加密算法。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看了楼主的帖子,顿时涨了不少见识,多谢分享。
2014-12-25 15:29
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
  LZ的方法还用到Pi(圆周率),这是难于做到的。
  这样就简单了,设想有大量的黑子和白子放在一个容器里,搅合搅合,随便拾取,黑子计一个1白子计一个0,随机数不就有了吗。这种方法计算机是很容易模拟的。
2014-12-25 16:44
0
雪    币: 62
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
在路上的人,也可能使用车,轮胎是圆的,所以使用的是Pi(圆周率)。

你说的方法,我不知道怎么用电路模拟。
2014-12-25 17:15
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
  我没研究过用电路模拟,我说是用程序模拟,具体方法你可以看看我的帖子“新型随机函数的制作”和“乱排随机函数源码举例”。
有一段路,被涂成黑白两色,每隔1米颜色切换。有一个人走在这条路上(初始位置不确定),每走Pi(圆周率)米,查看脚下路面颜色,黑色记1,白色记0,于是,这个人就可以无限采集比特串了。

  你说完全是规律性的行为,得到的比特串也是固定的东西,毫无随机可言。  
2014-12-25 18:52
0
雪    币: 62
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
逻辑处理总是规律性行为,你的方法也一样。

产生随机数的根本是保证物理上随机,然后经过电路和软件不断放大这种随机。
2014-12-26 19:14
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
我的方法能得到乱码,不管它什么随机不随机的。
而你说的方法,多次走pi米,只能得到周期性的变化,太不随机了?
2014-12-27 13:37
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
通常的(伪)随机数算法是给定一个种子就能生成一个(伪)随机序列,只要序列足够长,随机性就会比较好,并不需要“物理上的随机”,因为实际上取得“随机的种子”难度是很大的,而且也没有必要。所谓越好的生成算法(或者生成器)就是生成的序列越接近“真”随机序列。
至于物理上的随机。对于电路来说,可以取某个物理量值作为种子,比如当前的电流值,它一定是符合某种分布的随机量。
至于你说的那个pi方法。随机的根本实际上是初始位置随机,那么这个种子又从哪里来呢?如果是人选的,那么这就不能称之为随机。所以说生成的仍然是一个伪随机序列,而且这个伪随机数生成器的质量有待商榷。
至于加密方面,生成的密文随机性越好加密算法的性能越好,密钥的随机性越好生成算法越好。所以。。。最后一句话我没太看懂,难道寻找好的加密算法能成为寻找好的随机算法的方法么?。。。这两个难度好像差不多诶。。。
我现在只有一些关于密码学的远古的记忆了,应该有很多说错的地方。
2014-12-28 02:24
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
  楼上说的随机种子难求吗?系统时间、开机以来的cpu脉动数等都是现成可利用的随机种子,不用什么电流。
  随机函数再好也解决不了相邻输出数据之间的关联问题。而乱排随机函数就没有此缺陷,另一特点是绝没有死点,而后者是一般随机函数需要回避的。
2014-12-28 10:30
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最后补充一下。楼主的算法实际上就是(k*n mod 2)这个性能是非常不好的。
2014-12-28 11:17
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
所谓的系统时间、CPU脉动数就是所谓的“真”随机么。至于电流这个我只是顺着楼主的思路来说。好的算法是不依赖种子的好坏,我只是想表达这点。至于所谓的乱排,现在没有时间去研究这个。大概看了一下,应该是一种对种子的HASH。
2014-12-28 11:18
0
雪    币: 62
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
用硬件产生随机数种子,用软件(密码算法)产生随机数,这是业界一般做法。

利用系统时钟等做种子,种子空间不够大,一般使用在安全要求不是太高的地方也没有问题。

使用当前电路的电流值做随机种子,电路实现会复杂,至少数字电路实现会比较复杂。

前面介绍的方法,随机性确实部分依赖于初值,但初值是由电子元器件误差及用户人为操作综合决定,使用k*n mod 2这个算法主要是电路实现简单,且放大效果还不错。其实这个问题还是有很多值得研究的地方。例如,把“1米”换成“1米左右”,把“Pi(n)米”换成“Pi(n)米左右”,如果这里的“左右”指正态分布,那么如何该选择n?标记“0”“1”的时候,0,1状态该持续多久才认为是0,1?这些都是比较复杂的问题。
2014-12-29 11:26
0
雪    币: 84
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
。。。。
2014-12-29 11:51
0
雪    币: 74
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
关键是生成算法的保密,种子是否“真”随机不重要。
2014-12-29 16:26
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
15
楼上说的没错,但算法是公开的,种子就需要保护了,真不真的无所谓。
2014-12-29 20:26
0
游客
登录 | 注册 方可回帖
返回
//