【引入】
在标准伪随机生成器中,对扩展因子 $l(n)$ 的要求是很宽松的,只要求:
那么,如果一个伪随机生成器 $G$ 的扩展因子只有
即只能把一个 $n$ 比特的随机种子扩展成 $n+1$ 比特的字符串,只多产生 $1$ 个比特。
从实际角度看,这种扩展非常弱,因为它几乎没有节省多少真正随机性。但从理论角度看,这已经足够了。只要存在一个能扩展 1 比特的伪随机生成器,就可以构造出具有任意多项式扩展长度的伪随机生成器。
这一节的目标就是证明:如果存在一个扩展因子为 $l(n)=n+1$ 的伪随机生成器 $G_1$,那么对任意多项式 $\mathrm{poly}(\cdot)$,都可以构造一个把 $n$ 比特种子扩展成 $\mathrm{poly}(n)$ 比特输出的伪随机生成器 $G$。
【扩展因子的构造】
构造
Construction:设 $G_1$ 是一个确定性的多项式时间算法,它把长度为 $n$ 的字符串映射为长度为 $n+1$ 的字符串:
又设 $\mathrm{poly}(\cdot)$ 是一个多项式,定义新的生成器 $G$,给定输入种子 $s$,令 $s_0=s$,并记 $n=|s|$,然后重复执行 $\mathrm{poly}(n)$ 次。在第 $i$ 次迭代中,对当前种子 $s_{i-1}$ 应用 $G_1$,得到一个长度为 $n+1$ 的字符串:
其中,$\sigma_i \in \{0,1\}$ 是输出的第一个比特,而 $s_i$ 是剩下的 $n$ 比特后缀。也就是说,$\sigma_i$ 被作为最终输出的一部分,而 $s_i$ 被作为下一轮迭代的新种子。
最终,新的生成器 $G$ 输出所有额外比特的连接,即:
因此,$G$ 把一个 $n$ 比特的种子扩展成了 $\mathrm{poly}(n)$ 比特的字符串。
直观理解
上述构造可以理解为反复使用 $G_1$,具体构造如下图所示。

在每一次使用 $G_1$ 时:
- 输入当前的 $n$ 比特种子 $s_{i-1}$
- 得到一个 $n+1$ 比特的输出
- 把第一个比特 $\sigma_i$ 拿出来作为最终输出
- 把剩下的 $n$ 比特 $s_i$ 留作下一轮的新种子
也就是说,$G_1$ 每运行一次,就得到一个额外比特,同时更新种子,经过 $\mathrm{poly}(n)$ 次迭代后,就可以得到 $\mathrm{poly}(n)$ 个输出比特。
此外,由于 $\mathrm{poly}(n)$ 是多项式,并且 $G_1$ 是多项式时间算法,所以新构造的 $G$ 仍然是多项式时间算法。
【扩展因子正确性定理】
Theorem:设 $G_1$、$\mathrm{poly}(\cdot)$ 和 $G$ 如上述构造所定义,并且满足:
若 $G_1$ 是一个伪随机生成器,则 $G$ 也是一个伪随机生成器。
该定理说明,只要 $G_1$ 能安全地把 $n$ 比特扩展成 $n+1$ 比特,那么通过重复调用 $G_1$,就可以安全地把 $n$ 比特扩展成任意多项式长度 $\mathrm{poly}(n)$。
直观上看,$G$ 的伪随机性来自 $G_1$ 的伪随机性。如果 $G_1(U_n)$ 和真正的均匀分布 $U_{n+1}$ 在多项式时间内不可区分,那么一次调用 $G_1$ 的结果就可以被看成伪随机的。
而现在 $G$ 只是把 $G_1$ 调用了多项式次,因此可以直观地认为:
- 一次调用 $G_1$ 和一次真正随机过程不可区分
- 多项式次调用 $G_1$ 和多项式次真正随机过程也应该不可区分
- 所以 $G$ 的整个输出应该和真正的 $\mathrm{poly}(n)$ 比特均匀随机串不可区分
【定理证明】
证明思路
上述定理只需要证明 $G$ 是伪随机生成器,采用反证法。
假设 $G$ 不是伪随机生成器。那么,存在一个概率多项式时间算法 $D$,能够区分 $G(U_n)$ 和真正的均匀分布 $U_{\mathrm{poly}(n)}$。也就是说,存在某个多项式 $\mathrm{poly}(\cdot)$,使得对无穷多个 $n$,区分器 $D$ 的区分优势:
如果能从这个 $D$ 构造出另一个多项式时间算法 $D’$,使得 $D’$ 能够区分 $G_1(U_n)$ 和 $U_{n+1}$,那么就与 $G_1$ 是伪随机生成器这一假设矛盾。
因此,证明的核心任务是:根据区分 $G(U_n)$ 和 $U_{\mathrm{poly}(n)}$ 的算法 $D$,构造出区分 $G_1(U_n)$ 和 $U_{n+1}$ 的算法 $D’$。
证明
混合分布
定义混合分布 $H_n^0,H_n^1,\ldots,H_n^{\mathrm{poly}(n)}$,对于每个 $0\leq k\leq \mathrm{poly}(n)$,定义:
其中:
- $U_k^{(1)}$ 是一个均匀随机的 $k$ 比特字符串,$U_n^{(2)}$ 是一个均匀随机的 $n$ 比特字符串,二者相互独立
- $\operatorname{pref}_j(\alpha)$ 是字符串 $\alpha$ 位长为 $j$ 的前缀,即 $\alpha$ 的前 $j$ 个比特
- $x\cdot y$ 表示字符串 $x$ 和 $y$ 的连接
因此,$H_n^k$ 的含义是:前 $k$ 个比特是真正随机的,后面 $\mathrm{poly}(n)-k$ 个比特来自 $G(U_n)$ 的前缀。
也可以从构造过程本身来理解 $H_n^k$。在构造过程中,生成器 $G$ 是从初始种子 $s_0=s$ 出发,不断调用 $G_1$,依次得到:
其中,$\sigma_i$ 是第 $i$ 轮输出的额外比特,$s_i$ 是下一轮使用的新种子。
而在混合分布 $H_n^k$ 中,前 $k$ 个输出比特 $\sigma_1\cdots\sigma_k\in\{0,1\}^k$ 直接从 $\{0,1\}^n$ 中均匀随机选取,同时第 $k$ 轮后使用的种子 $s_k$ 也直接从 $\{0,1\}^n$ 中均匀随机选取,并且从第 $k+1$ 轮开始,继续按照原来的构造运行 $G_1$,即对于:
仍然令:
最后输出:
因此,$H_n^k$ 也可以理解为:前 $k$ 个比特是真正随机的,从第 $k+1$ 个比特开始,则由生成器 $G$ 从一个新的均匀随机种子 $s_k$ 继续生成。
上述过程如下图所示。

特别地,当 $k=0$ 时,有:
此时没有任何比特被替换为真正随机比特,所以整个输出都来自生成器 $G$。
当 $k=\mathrm{poly}(n)$ 时,有:
此时所有 $\mathrm{poly}(n)$ 个比特都是真正均匀随机的。
所以,这组混合分布把两个端点连接起来,即有:
这正是混合技术的基本思路:如果区分器 $D$ 能够区分两个端点分布 $H_n^{0}$ 和 $H_n^{\mathrm{poly}(n)}$,那么一定能够区分某一对相邻的混合分布 $H_n^k$ 和 $H_n^{k+1}$。
相邻混合分布
直观含义
混合分布 $H_n^k$ 和 $H_n^{k+1}$ 之间只差一个位置。
在 $H_n^k$ 中,前 $k$ 个比特是真随机的,从第 $k+1$ 个比特开始仍然由生成器 $G$ 产生;而在 $H_n^{k+1}$ 中,前 $k+1$ 个比特都是真随机的,从第 $k+2$ 个比特开始再由生成器继续产生。
因此,从 $H_n^k$ 到 $H_n^{k+1}$ 的变化,本质上就是把一次 $G_1$ 的输出 $G_1(U_n)$ 替换成真正的均匀随机串 $U_{n+1}$。
所以,如果区分器 $D$ 能够察觉这种替换,那么就可以利用 $D$ 构造出一个新的区分器 $D’$,从而区分 $G_1(U_n)$ 和 $U_{n+1}$。
前缀后缀记号
为了严格描述相邻混合分布的关系,引入记号 $\operatorname{pref}_j(\alpha)$ 表示字符串 $\alpha$ 的前 $j$ 个比特,$\operatorname{suff}_j(\alpha)$ 表示字符串 $\alpha$ 的后 $j$ 个比特。
对于任意 $x\in\{0,1\}^n$,设:
其中,$\sigma=\operatorname{pref}_1(G_1(x))$ 是 $G_1(x)$ 的第一个比特,$y=\operatorname{suff}_n(G_1(x))$ 是 $G_1(x)$ 的后 $n$ 个比特。
那么根据 $G$ 的构造,$G_1(x)$ 的第一个比特 $\sigma$ 会作为当前输出比特,而后 $n$ 个比特 $y$ 会作为下一轮种子继续运行,故有:
也就是:
更一般地,对于任意 $j\geq 0$,有:
也就是对于 $G(x)$ 的前 $j+1$ 个比特,可以分成两部分:一部分是调用 $G_1(x)$ 得到的第一个比特,另一部分是把 $G_1(x)$ 的后 $n$ 比特作为新种子后,继续运行 $G$ 得到的前 $j$ 个比特。
记号表示
在前缀记号与后缀记号的基础上,对于 $0\leq k\leq \mathrm{poly}(n)-1$,对相邻混合分布 $H_n^k$ 和 $H_n^{k+1}$ 进行形式化展开。
根据混合分布的定义,有:
由于 $\mathrm{poly}(n)-k=(\mathrm{poly}(n)-k-1)+1$,因此上式可以写为:
进一步,根据 $G$ 的构造,$G(U_n^{(2)})$ 的第一个输出比特来自 $G_1(U_n^{(2)})$ 的第一位,而之后的输出来自 $G_1(U_n^{(2)})$ 的后 $n$ 比特继续作为新种子,故有:
其中,$\equiv$ 表示两个随机变量具有相同分布。
类似地,对于 $H_n^{k+1}$,根据定义,有:
由于 $U_{k+1}^{(1)}$ 可以看成前 $k$ 个随机比特加上第 $k+1$ 个随机比特,而一个均匀的 $(n+1)$ 比特串 $U_{n+1}^{(3)}$ 可以分成第一位和后 $n$ 位,因此可以等价写为:
由此可以看出,$H_n^k$ 和 $H_n^{k+1}$ 的结构几乎完全相同,它们的区别只在于:
- $H_n^k$ 中间嵌入的是 $G_1(U_n^{(2)})$
- $H_n^{k+1}$ 中间嵌入的是 $U_{n+1}^{(3)}$
也就是说,从 $H_n^k$ 到 $H_n^{k+1}$,本质上就是把一次调用 $G_1$ 的输出替换成真正均匀随机的 $(n+1)$ 比特串。
区分器 $D’$ 的构造
辅助函数
为把相邻混合分布和 $G_1$ 的输出联系起来,定义辅助函数:
其中,$\alpha \in \{0,1\}^{n+1}$。该函数模拟了从第 $k+1$ 个位置开始继续生成的过程,即把输入 $\alpha$ 的第一个比特作为当前输出比特,并把 $\alpha$ 的后 $n$ 个比特作为新种子,继续运行 $G$。
因此,其值域为:
断言
Claim:对于每个 $k\in\{0,1,\ldots,\mathrm{poly}(n)-1\}$,有:
- $H_n^k$ 与分布 $U_k^{(1)}\cdot f_{\mathrm{poly}(n)-k}(G_1(U_n^{(2)}))$ 相同
- $H_n^{k+1}$ 与分布 $U_k^{(1)} \cdot f_{\mathrm{poly}(n)-k}(U_{n+1}^{(3)})$ 相同
证明:
先证明第一个结论。
由混合分布的定义:
再由前缀分解式,令 $j=\mathrm{poly}(n)-k-1$,可得:
因此:
进一步,根据辅助函数 $f_{\mathrm{poly}(n)-k}$ 的定义,有:
再证明第二个结论。
根据混合分布的定义,有:
其中,$U_{k+1}^{(1)}$ 可以分解为:
而一个均匀的 $(n+1)$ 比特随机串 $U_{n+1}^{(3)}$ 可以分解为:
其中,$\operatorname{pref}_1(U_{n+1}^{(3)})$ 是均匀随机的 1 比特,$\operatorname{suff}_n(U_{n+1}^{(3)})$ 是均匀随机的 $n$ 比特字符串,且二者相互独立。
故有:
根据辅助函数的定义,有:
综上,断言成立。
构造过程
由上面的断言可知,只要能够区分 $H_n^k$ 和 $H_n^{k+1}$,就能够区分 $G_1(U_n)$ 和 $U_{n+1}$。
下面构造新的概率多项式时间算法 $D’$。
算法 $D’$ 的输入是 $\alpha\in\{0,1\}^{n+1}$,它不知道 $\alpha$ 来自 $G_1(U_n)$,还是真正的均匀分布 $U_{n+1}$。
算法 $D’$ 的运行过程如下:
- 均匀随机选择一个整数 $k\in\{0,1,\ldots,\mathrm{poly}(n)-1\}$
- 均匀随机选择一个 $k$ 比特字符串 $\beta\in\{0,1\}^k$
- 计算 $f_{\mathrm{poly}(n)-k}(\alpha)$
- 将 $\beta$ 拼接在前面,得到 $\beta\cdot f_{\mathrm{poly}(n)-k}(\alpha)$
- 将该字符串输入给区分器 $D$,并输出 $D$ 的结果:
由于 $k$、$\beta$ 的选择可以在多项式时间内完成,辅助函数 $f_{\mathrm{poly}(n)-k}$ 只涉及运行 $G$ 和简单的字符串操作,而 $G$ 和 $D$ 都是多项式时间算法,所以 $D’$ 也是一个概率多项式时间算法。
这个构造的直观含义是,$D’$ 把自己的输入 $\alpha$ 嵌入到第 $k+1$ 个位置对应的那一次生成过程中,然后让 $D$ 去判断整个输出像不像真正随机:
- 如果 $\alpha=G_1(U_n)$,那么 $D$ 看到的是类似 $H_n^k$ 的分布
- 如果 $\alpha=U_{n+1}$,那么 $D$ 看到的是类似 $H_n^{k+1}$ 的分布。
因此,$D’$ 可以利用 $D$ 对相邻混合分布的区分能力,来区分 $G_1(U_n)$ 和 $U_{n+1}$。
此外,由于随机选择 $k$ 和 $\beta$ 可以在多项式时间内完成,$f_{\mathrm{poly}(n)-k}$ 的计算只需要调用 $G$ 和进行字符串操作。而 $G$ 本身由多项式次调用 $G_1$ 构成,$G_1$ 是多项式时间算法,且 $D$ 也是多项式时间算法。因此,$D’$ 是概率多项式时间算法。
区分器 $D’$ 的区分优势
断言
Claim:
(1)当 $D’$ 的输入来自 $G_1(U_n)$ 时,其接受概率为:
(2)当 $D’$ 的输入来自 $U_{n+1}$ 时,其接受概率为:
该断言说明:
- 当 $D’$ 的输入来自 $G_1(U_n)$ 时,它随机选择 $k$,于是平均来看,$D$ 看到的是所有 $H_n^k$ 的平均效果
- 当 $D’$ 的输入来自 $U_{n+1}$ 时,它随机选择 $k$,于是平均来看,$D$ 看到的是所有 $H_n^{k+1}$ 的平均效果
证明:
根据区分器 $D’$ 的构造,对于任意输入 $\alpha\in\{0,1\}^{n+1}$,算法 $D’$ 会先均匀随机选择 $k\in\{0,1,\ldots,\mathrm{poly}(n)-1\}$,再均匀随机选择 $U_k\in\{0,1\}^k$,最后输出:
因此,对任意 $\alpha$,有:
当 $\alpha=G_1(U_n)$ 时,由区分器 $D’$ 的构造断言可知:
所以:
当 $\alpha=U_{n+1}$ 时,由区分器 $D’$ 的构造断言可知:
所以:
区分优势计算
令 $d_k(n)$ 表示区分器 $D$ 在输入来自混合分布 $H_n^k$ 时输出 $1$ 的概率,即:
由混合分布端点可知 $H_n^0=G(U_n),H_n^{\mathrm{poly}(n)}=U_{\mathrm{poly}(n)}$,因此:
根据反证假设,区分器 $D$ 能够区分 $G(U_n)$ 和 $U_{\mathrm{poly}(n)}$,其区分优势为:
根据区分器 $D’$ 的接受概率断言,有:
因此,$D’$ 对 $G_1(U_n)$ 和 $U_{n+1}$ 的区分优势为:
注意到上式中的两个级数:
两式相减时,中间项抵消只剩下端点项:
故有:
即区分器 $D’$ 的区分优势等于原区分器 $D$ 的区分优势 $\Delta(n)$ 除以混合分布的个数 $\mathrm{poly}(n)$。
矛盾推出
根据反证假设,$G$ 不是伪随机生成器,因此存在概率多项式时间区分器 $D$,使得对某个多项式 $\mathrm{poly}’(n)$,与无穷多个 $n$,有:
根据区分优势计算可知:
因此,对无穷多个 $n$,有:
由于两个多项式的乘积仍然是多项式,所以 $\frac{1}{\mathrm{poly}(n)\cdot \mathrm{poly}’(n)}$ 仍然是一个不可忽略量,这说明 $D’$ 能够以不可忽略优势区分 $G_1(U_n)$ 和 $U_{n+1}$。
也就是说,$G_1(U_n)$ 和 $U_{n+1}$ 不是多项式时间不可区分的,但是这与 $G_1$ 是伪随机生成器的假设矛盾。因为如果 $G_1$ 是伪随机生成器,那么按照定义,输出分布 $G_1(U_n)$ 必须与真正的均匀分布 $U_{n+1}$ 在多项式时间内不可区分。
因此,反证假设不成立,$G$ 必须是伪随机生成器。