Alex_McAvoy

想要成为渔夫的猎手

伪随机生成器的适用性

【随机性放大】

伪随机生成器具有一个非常重要的性质:它们是高效的随机性放大器(Amplifiers/Expanders of Randomness)。也就是说,伪随机生成器只需要使用很少的真正随机性,例如一个随机选择的种子,就能够产生很长的序列,并且这些序列在任何高效观察者看来都像是真正随机的。

如果一个伪随机生成器 $G$ 输入一个 $n$ 比特的随机种子 $s\leftarrow U_n$,然后输出一个多项式长度的字符串:

那么虽然 $G(s)$ 不是真正均匀随机的,但对于任何多项式时间算法来说,它都无法有效区分 $G(s)$ 和真正的均匀随机串。

因此,在任何需要随机序列的高效应用中,都可以用伪随机序列 $G(U_n)$ 替代真正随机序列 $U_{\mathrm{poly}(n)}$,且这种替代造成的性能差异至多是可忽略的。

原因是,如果某个高效应用在替换后出现不可忽略的性能下降,那么说明该应用能够察觉真正随机序列和伪随机序列之间的差别。于是,这个应用本身就可以被改造成一个区分器。更具体地说:

  1. 当输入是真正随机序列时,应用表现较好
  2. 当输入是伪随机序列时,应用表现明显变差
  3. 那么可以利用这种性能差异判断输入究竟来自真正随机分布,还是来自伪随机生成器
  4. 这就构造出了一个能区分 $G(U_n)$ 和 $U_{\mathrm{poly}(n)}$ 的高效算法

但是这与伪随机生成器的定义矛盾。因为如果 $G$ 是伪随机生成器,那么任何多项式时间算法都不能以不可忽略优势区分 $G(U_n)$ 和 $U_{\mathrm{poly}(n)}$。

所以,只要 $G$ 是伪随机生成器,它的输出就可以安全地替代真正随机序列,并且不会造成不可忽略的性能损失。

【伪随机生成器的通用性】

伪随机生成器的一个重要优点在于它具有很强的通用性(Generality)。也就是说,一旦证明某个算法确实是伪随机生成器,就可以把它用于任何需要随机序列的高效应用中,而不需要针对每一个新的具体应用重新测试它的表现。

如果没有伪随机性的统一定义,那么每当把一个生成器用于某个新任务时,都必须重新分析:

  1. 这个任务是否会发现生成器输出中的规律
  2. 生成器在这个任务中的表现是否接近真正随机
  3. 是否存在某种特殊攻击能利用该任务的结构区分伪随机输出

而伪随机生成器的定义直接避免了这种逐个应用分析的麻烦,因为它保证只要应用是多项式时间的,那么它就不能有效区分伪随机序列和真正随机序列。

因此,伪随机生成器是一种通用的随机性替代品。

【在密码学中的意义】

伪随机生成器在密码学中极其重要,因为几乎所有密码学任务的实现都需要大量的高质量随机性(High-quality Randomness)

例如,密码学协议中常常需要随机密钥、随机挑战、随机选择的秘密值、随机化加密中的随机比特等。这些随机性不仅数量大,而且质量要求很高。

如果随机性质量不好,例如存在偏差、可预测性或重复使用,那么密码系统可能直接失去安全性。但是,真正高质量随机比特的生成、交换和共享通常代价较高。

伪随机生成器正好解决了这个问题,它允许只付出生成、交换或共享 $n$ 个真正随机比特的代价,却得到 $\mathrm{poly}(n)$ 个伪随机比特。

也就是说,只要双方共享一个短随机种子 $s\in\{0,1\}^n$,就可以通过伪随机生成器生成一段很长的伪随机序列 $G(s)$,这段序列在计算意义上可以当作真正随机序列使用。

因此,伪随机生成器把生成、交换或共享大量高质量随机比特的问题,转化成了生成、交换或共享少量真正随机种子的问题。

感谢您对我的支持,让我继续努力分享有用的技术与知识点!