前段时间开始对可验证的随机函数(VRF)产生兴趣,在几个知名的公链项目中起到了很大的作用,比如 Dfinity、Algorand、Cardano 等,都在研究和实践。看了几篇文章,发现涉及的内容比较多,所以打算一边输入一边整理和输出。
这篇文章主要来分析下,什么是随机性和随机数,它是如何产生的,有什么作用等等。
什么是随机性?
随机性在生活中随处可见,依靠随机性,也可能有很多用例。比如掷骰子,博彩,抽签,歌曲随机播放,短信验证码等等。
那什么是随机性呢?
维基百科中这样定义:
/中文版
随机性(英语:Randomness)这个词是用来表达目的、动机、规则或一些非科学用法的可预测性的缺失。
/英文版
随机性是事件中缺乏模式或可预测性。事件、符号或步骤的随机序列没有顺序,也没有遵循可理解的模式或组合。
这里想吐槽下,中文版给的定义是认真的吗,完全不知所云。英文版给出的定义更容易被接受,随机性是一个没有规律不可预测的状态。
不过在维基百科中,也通过一个例子来说明,频率某些时候或许不是完全随机性的。例如,当掷出两个骰子时,任何特定掷骰的结果都是不可预测的,但是 7 的总和将是 4 的两倍。
也就是说,在这种情况中,随机性是对结果不确定性的度量,而不是随意性。
随机性有哪些标准?
那随机性都有哪些呢,想刚所说的掷骰子,是否不能称之为随机性呢?
根据密码学原理,随机性检验可以分为三个标准:
1、统计学伪随机性。
统计学伪随机性指的是在给定的随机样本中,1的数量大致等于0的数量。比如“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。
满足这类要求的随机性,“一眼看上去”是随机的。
2、密码学安全伪随机性。
其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。
(没太看懂,是指的不可预测其他部分吗?)
3、真随机性。
其定义为随机样本不可重现。实际上衹要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。但实际上,这也只是非常接近真随机数的伪随机数,一般认为,无论是本地辐射、物理噪音、抛硬币……等都是可被观察了解的,任何基于经典力学产生的随机数,都只是伪随机数。
随机性最简单的表现方式就是随机数,比如掷骰子,1 和 6 在下一轮中,是不可预测的。
什么是随机数?
随机数在不同领域有不同的解释,可以简单理解为随机的数字,在讨论单个数字时,随机数是从一组可能的值中提取的,每个可能的值是同样可能的,即均匀分布。
相应的,随机数也分为三类:
伪随机数:满足第一个条件的随机数。
密码学安全的伪随机数:同时满足前两个条件的随机数。可以通过密码学安全伪随机数生成器计算得出。
真随机数:同时满足三个条件的随机数。
随机数可用于各种目的,例如生成数据加密密钥,模拟和建模复杂现象以及从较大数据集中选择随机样本。它们也在美学上被用于例如文学和音乐中,并且当然在游戏和赌博中受欢迎。
随机数是如何生成的?
浅谈真随机和伪随机
随机性有什么用处?
参考
https://en.wikipedia.org/wiki/Randomness
https://www.random.org/randomness/
网友评论