随机数的性质
随机性
顾名思义, 就是生成的随机数数列具有杂乱无章的性质的性质, 即, 无规律性, 生成的序列应该无统计数偏差。
例如:
若生成的序列为 1, 2, 3, 4, 5, 6 ....
这样的与序列相关的, 异或是 1, 2, 3, 1, 2, 3, 1, 2, 3
这样的周期性的, 异或是 6, 1, 6, 2, 6, 6 , 1, 6
这样某一个或者几个特殊元素优于其他元素大概率出现的, 则是不具有随机性的表现。
不可预测性
不可以预测性指的是, 在得知已经生成了的随机序列和随机算法的情况下, 也无法预测接下来随机的结果会是什么的性质。
要满足该性质,那么必然要满足, 从后一个或者多个随机数中, 无法反推出随机数生成器的内部状态的性质。
如果一个随机数生成器能满足不可预测性, 那么它一定是满足随机性的。
不可重现性
不可重现性指的是, 在至少具备了所有相同的初始条件下, 通过生成器两次或者多次生成的随机数数列不相同, 即, 没有办法重现某次输出的随机数列。
仅使用软件无法实现具有不可重现性的随机数生成器。
如果一个随机数生成器能满足不可重现性, 那么它一定是满足不可预测性的。
真随机?
只具备随机性和不可预测性的随机数叫做伪随机数, 具备不可重现性的随机数叫做真随机数。
计算机科学中使用的随机算法
在一般编程语言中, 都会提供两类随机, 例如Java提供了java.util.Random
, 但是它并不能用于密码和安全相关的用途, Java另外提供了 java.security.SecureRandom
类用于实现这个用途。
安全相关的用途应该使用安全的随机算法, 不可以直接使用普通的随机