TCS Homework 12

12.1

题目

问题 1.GG 是一个拉伸为 \ell 的伪随机生成器,满足 (n)2n\ell(n) \geq 2n(即对于输入长度 nn,输出长度至少为 2n2n)。

(a) 定义 GG'G(s)=G(s0s)G'(s) = G(s0^{|s|})GG' 是否一定是一个伪随机生成器?

(b) 定义 GG''G(s)=G(s1sn/2)G''(s) = G(s_1 \cdots s_{n/2}),其中 s=s1s2sns = s_1 s_2 \cdots s_n(假设 nn 为偶数)。GG'' 是否一定是一个伪随机生成器?

解答

伪随机生成器(PRG)的标准定义要求:

  1. 拉伸条件:输出长度严格大于输入长度,即 (n)>n\ell(n) > n
  2. 计算不可区分性:对于所有概率多项式时间(PPT)区分器 DD,区分器无法以不可忽略的优势区分生成器的输出与均匀随机字符串。

给定 GG 是 PRG 且满足 (n)2n\ell(n) \geq 2n,分析 GG'GG''

(a) G(s)=G(s0s)G'(s) = G(s0^{|s|}) 是否一定是伪随机生成器?

答案:否GG' 不一定是伪随机生成器。

解释:

  • GG' 的输入为 ss(长度 nn),计算 s0s=s0ns0^{|s|} = s0^n(长度 2n2n),然后应用 GG 得到输出 G(s0n)G(s0^n)
  • GG 是 PRG,因此当输入长度为 2n2n 时,输出长度为 (2n)4n\ell(2n) \geq 4n
  • 问题在于 GG' 的输入到 GG 的种子 s0ns0^n 不是均匀随机的:后 nn 位固定为 0,只有前 nn 位随机。因此,输入种子的熵仅为 nn 位(而非 2n2n 位)。
  • 尽管 GG 本身是 PRG,但当应用于一个非均匀分布(特别是后一半固定为 0)时,输出可能失去伪随机性。

反例构造:

  • 定义 G:{0,1}m{0,1}(m)G: \{0,1\}^m \to \{0,1\}^{\ell(m)} 如下(其中 (m)=2m\ell(m) = 2m 为简单起见):
    • 如果输入 xx 的后 m/2m/2 位全为 0,则输出 xx 的前 m/2m/2 位重复多次,使得输出长度为 2m2m(例如,输出 (x1xm/2)4(x_1 \cdots x_{m/2})^4)。
    • 否则,输出 H(x)H(x),其中 HH 是一个安全的 PRG(例如,基于密码学假设的标准 PRG)。
  • 验证 GG 是 PRG:
    • 当输入 xx 均匀随机时,后 m/2m/2 位全为 0 的概率为 2m/22^{-m/2}(可忽略)。
    • 以概率 12m/21 - 2^{-m/2},输出为 H(x)H(x),与均匀随机不可区分。
    • 以概率 2m/22^{-m/2},输出为重复模式,但此事件概率可忽略,因此整体计算不可区分性成立。
  • 现在考虑 G(s)=G(s0n)G'(s) = G(s0^n)(输入长度 nn,输出长度 (2n)=4n\ell(2n) = 4n):
    • 输入 s0ns0^n 的后 nn 位全为 0,因此 G(s0n)=(s1sn)4G(s0^n) = (s_1 \cdots s_n)^4(即 ss 重复四次)。
  • 区分器 DD 攻击 GG'
    • 输入 yy(长度 4n4n),检查 yy 是否每 nn 位块相同(即 y[1..n]=y[n+1..2n]=y[2n+1..3n]=y[3n+1..4n]y[1..n] = y[n+1..2n] = y[2n+1..3n] = y[3n+1..4n])。
    • 如果是,输出“伪随机”;否则输出“随机”。
  • 分析:
    • Pr[D(G(s))=1]=1\Pr[D(G'(s)) = 1] = 1(因为输出总是重复模式)。
    • Pr[D(r)=1]\Pr[D(r) = 1](其中 rr 均匀随机)为 rrnn 位块相同的概率,即 23n2^{-3n}(可忽略)。
    • 优势 Pr[D(G(s))=1]Pr[D(r)=1]=1negl(n)1\left| \Pr[D(G'(s)) = 1] - \Pr[D(r) = 1] \right| = |1 - \text{negl}(n)| \approx 1,不是可忽略函数。
  • 因此,GG' 不是 PRG。

此反例显示,存在 GG 是 PRG,但 GG' 不是 PRG。

(b) G(s)=G(s1sn/2)G''(s) = G(s_1 \cdots s_{n/2}) 是否一定是伪随机生成器?

答案:否GG'' 不一定是伪随机生成器。

解释:

  • GG'' 的输入为 ss(长度 nn),但仅使用前一半 s1sn/2s_1 \cdots s_{n/2}(长度 n/2n/2)作为 GG 的输入,输出 G(s1sn/2)G(s_1 \cdots s_{n/2})
  • GG 是 PRG,因此当输入长度为 n/2n/2 时,输出长度为 (n/2)2×(n/2)=n\ell(n/2) \geq 2 \times (n/2) = n
  • 问题在于拉伸条件:(n/2)\ell(n/2) 可能等于 nn(例如,如果 (m)=2m\ell(m) = 2m,则 (n/2)=n\ell(n/2) = n),此时输出长度等于输入长度 nn,违反 PRG 的拉伸要求(输出必须严格长于输入)。
  • 即使计算不可区分性可能成立(因为输出分布等同于 GG 在输入长度 n/2n/2 时的输出),拉伸不足本身已导致 GG'' 不符合 PRG 定义。

反例构造:

  • (m)=2m\ell(m) = 2m(满足 (m)2m\ell(m) \geq 2m)。
  • 定义 G:{0,1}m{0,1}2mG: \{0,1\}^m \to \{0,1\}^{2m}G(z)=zH(z)G(z) = z \| H(z),其中 HH 是一个安全的 PRG。则 GG 是 PRG,因为输出包含真随机部分。
  • 现在 G(s)=G(s1sn/2)=s1sn/2H(s1sn/2)G''(s) = G(s_1 \cdots s_{n/2}) = s_1 \cdots s_{n/2} \| H(s_1 \cdots s_{n/2})(长度 nn)。
  • 输入长度 nn,输出长度 nn,拉伸为 n/n=1nn/n = 1 \not> n,不满足拉伸条件。
  • 此外,统计距离大:输出分布的支持集大小最多 2n/22^{n/2}(因为输入到 GG 只有 n/2n/2 位),而输出空间大小为 2n2^n,统计距离至少 12n/2/2n=12n/21 - 2^{n/2} / 2^n = 1 - 2^{-n/2}(不是可忽略函数),因此存在区分器(无界)有显著优势。

此反例显示,当 (n/2)=n\ell(n/2) = n 时,GG'' 不满足 PRG 的拉伸要求。即使在某些 GG 下计算安全,但由于“necessarily”要求对所有 GG 成立,而存在反例,因此 GG'' 不一定是 PRG。

12.2

题目

一个密钥函数族 FkF_k 被称为伪随机置换(PRP),如果满足以下条件:

  • 给定密钥 kk,函数 Fk()F_k(\cdot) 和其逆函数 Fk1()F_k^{-1}(\cdot) 是高效可计算的;
  • 对于任意多项式时间的敌手 A\mathcal{A}

Pr(AFk(),Fk1()(1n)=1)Pr(Afn(),fn1()(1n)=1)negl(n),\left| \Pr\left( \mathcal{A}^{F_k(\cdot), F_k^{-1}(\cdot)} (1^n) = 1 \right) - \Pr\left( \mathcal{A}^{f_n(\cdot), f_n^{-1}(\cdot)} (1^n) = 1 \right) \right| \leq \text{negl}(n),

其中 fnf_n 是一个随机置换。

考虑以下加密方案:

  1. 均匀采样密钥 kk
  2. 对于明文 x{0,1}n/2x \in \{0, 1\}^{n/2}(假设 nn 为偶数),加密算法 Enck\text{Enc}_k 采样随机数 r{0,1}n/2r \in \{0, 1\}^{n/2},并输出 Fk(rx)F_k(r \| x)

假设 FkF_k 是一个 PRP:

(a) 展示解密算法 Deck\text{Dec}_k 如何工作。
(b) 证明该加密方案在 CPA(选择明文攻击)下是安全的。

解答

(a) 解密算法 Deck\text{Dec}_k 的工作方式

给定密文 cc(长度为 nn,因为 FkF_k 的输出长度是 nn),解密算法 Deck\text{Dec}_k 执行以下步骤:

  1. 计算逆置换:使用密钥 kk 计算 m=Fk1(c)m = F_k^{-1}(c)。这里 mm 是一个长度为 nn 的字符串。
  2. 解析明文:将 mm 分为两部分:
    • n/2n/2 位是随机数 rr(在加密过程中生成),
    • n/2n/2 位是原始明文 xx
      m=rxm = r \| x
  3. 输出明文:输出后 n/2n/2 位作为明文 xx

形式化定义

Deck(c)=后 n/2 位 的 Fk1(c).\text{Dec}_k(c) = \text{后 } n/2 \text{ 位} \text{ 的 } F_k^{-1}(c).

正确性验证

  • 加密时,Enck(x)=Fk(rx)\text{Enc}_k(x) = F_k(r \| x)
  • 解密时,Fk1(c)=Fk1(Fk(rx))=rxF_k^{-1}(c) = F_k^{-1}(F_k(r \| x)) = r \| x
  • 提取后 n/2n/2 位直接得到 xx,故解密正确恢复明文。

(b) 证明加密方案是 CPA 安全的:

目标是证明该方案满足 IND-CPA 安全性(选择明文攻击下的密文不可区分性)。假设 FkF_k 是 PRP,如果存在一个多项式时间敌手 A\mathcal{A} 能以不可忽略的优势攻破该加密方案的 CPA 安全,则可以构造一个敌手 D\mathcal{D} 来攻破 PRP 的安全性,从而导出矛盾。

敌手 D\mathcal{D} 的构造(用于攻击 PRP):
敌手 D\mathcal{D} 拥有访问预言机 O()\mathcal{O}(\cdot)O1()\mathcal{O}^{-1}(\cdot) 的能力,这些预言机要么是 Fk()F_k(\cdot)Fk1()F_k^{-1}(\cdot)(真实 PRP),要么是随机置换 fn()f_n(\cdot)fn1()f_n^{-1}(\cdot)D\mathcal{D} 模拟加密方案的环境给 A\mathcal{A},具体步骤如下:

  • 步骤 1:模拟加密预言机。
    • A\mathcal{A} 查询加密预言机(输入明文 x{0,1}n/2x \in \{0,1\}^{n/2}):
      • D\mathcal{D} 采样随机数 r{0,1}n/2r \leftarrow \{0,1\}^{n/2}
      • 查询自己的预言机 O\mathcal{O} 得到 c=O(rx)c = \mathcal{O}(r \| x)
      • cc 返回给 A\mathcal{A} 作为密文。
        补充说明: 这完美模拟了 Enck()\operatorname{Enc}_k(\cdot),因为真实方案中 Enck(x)=Fk(rx)\operatorname{Enc}_k(x) = F_k(r \| x)
  • 步骤 2:处理挑战阶段。
    • A\mathcal{A} 输出两个等长的明文 x0,x1{0,1}n/2x_0, x_1 \in \{0,1\}^{n/2}
    • D\mathcal{D} 采样随机比特 b{0,1}b \leftarrow \{0,1\} 和随机数 r{0,1}n/2r \leftarrow \{0,1\}^{n/2}
    • 查询预言机 O\mathcal{O} 得到挑战密文 c=O(rxb)c^* = \mathcal{O}(r \| x_b)
    • cc^* 发送给 A\mathcal{A}
  • 步骤 3:处理 A\mathcal{A} 的输出。
    • A\mathcal{A} 继续访问加密预言机(但不能查询 cc^* 的解密),并最终输出一个猜测比特 bb'.
    • 如果 b=bb' = b,则 D\mathcal{D} 输出 1(猜测预言机是真实 PRP);否则输出 0(猜测预言机是随机置换)。

分析 D\mathcal{D} 的优势:

  • 情况 1:预言机是真实 PRP(即 O=Fk\mathcal{O} = F_k)。
    此时,D\mathcal{D} 完美模拟了加密方案的 CPA 游戏。如果 A\mathcal{A} 以不可忽略的优势攻破 CPA 安全,则:

    Pr[DFk(),Fk1()(1n)=1]=Pr[A 成功]12+1poly(n).\Pr\left[\mathcal{D}^{F_k(\cdot),F_k^{-1}(\cdot)}(1^n) = 1\right] = \Pr[\mathcal{A} \text{ 成功}] \geq \frac{1}{2} + \frac{1}{\operatorname{poly}(n)}.

    其中 1poly(n)\frac{1}{\operatorname{poly}(n)} 是不可忽略的函数(因为 A\mathcal{A} 是成功的 CPA 敌手)。
  • 情况 2:预言机是随机置换(即 O=fn\mathcal{O} = f_n)。
    此时,D\mathcal{D} 使用随机置换 fnf_n 模拟加密。设 A\mathcal{A} 向加密预言机查询的总次数为 q(n)q(n)(多项式次),挑战密文为 c=fn(rxb)c^* = f_n(r \| x_b)
    • 如果 A\mathcal{A} 在查询中曾输入过点 rxbr \| x_b 到预言机,则它可完美计算 cc^* 并猜中 bb(成功概率为 1)。
    • 否则,由于 fnf_n 是随机置换,且 rr 在挑战阶段是新鲜随机的(未被查询过),A\mathcal{A} 无法获得 xbx_b 的任何信息(密文 cc^*x0x_0x1x_1 上分布相同),因此成功概率最多为 12\frac{1}{2}
    • 敌手 A\mathcal{A} 查询到点 rxbr \| x_b 的概率至多为 q(n)2n/2\frac{q(n)}{2^{n/2}}(因为 rrn/2n/2 位随机数,空间大小为 2n/22^{n/2})。
      因此:

    Pr[Dfn(),fn1()(1n)=1]Pr[A 查询 rxb]1+Pr[A 未查询 rxb]12q(n)2n/2+12.\Pr\left[\mathcal{D}^{f_n(\cdot),f_n^{-1}(\cdot)}(1^n) = 1\right] \leq \Pr[\mathcal{A} \text{ 查询 } r \| x_b] \cdot 1 + \Pr[\mathcal{A} \text{ 未查询 } r \| x_b] \cdot \frac{1}{2} \leq \frac{q(n)}{2^{n/2}} + \frac{1}{2}.

    由于 q(n)q(n) 是多项式而 2n/22^{n/2} 是指数函数,q(n)2n/2\frac{q(n)}{2^{n/2}} 是可忽略函数 negl(n)\operatorname{negl}(n),故:

    Pr[Dfn(),fn1()(1n)=1]12+negl(n).\Pr\left[\mathcal{D}^{f_n(\cdot),f_n^{-1}(\cdot)}(1^n) = 1\right] \leq \frac{1}{2} + \operatorname{negl}(n).

  • 比较两种情况:
    D\mathcal{D} 作为 PRP 敌手的优势为:

    Pr[DFk(),Fk1()(1n)=1]Pr[Dfn(),fn1()(1n)=1](12+1poly(n))(12+negl(n))=1poly(n)negl(n).\left| \Pr\left[\mathcal{D}^{F_k(\cdot),F_k^{-1}(\cdot)}(1^n) = 1\right] - \Pr\left[\mathcal{D}^{f_n(\cdot),f_n^{-1}(\cdot)}(1^n) = 1\right] \right| \geq \left( \frac{1}{2} + \frac{1}{\operatorname{poly}(n)} \right) - \left( \frac{1}{2} + \operatorname{negl}(n) \right) = \frac{1}{\operatorname{poly}(n)} - \operatorname{negl}(n).

    该优势是不可忽略的(因为 1poly(n)\frac{1}{\operatorname{poly}(n)} 主导 negl(n)\operatorname{negl}(n)),但这与 FkF_k 是 PRP 的假设矛盾(PRP 要求优势可忽略)。

结论: 不存在多项式时间敌手 A\mathcal{A} 能以不可忽略的优势攻破该加密方案的 CPA 安全。因此,该方案是 CPA 安全的。


TCS Homework 12
https://xiao-ao-jiang-hu.github.io/2025/05/31/tcs/tcs-hw-12/
作者
wst
发布于
2025年5月31日
许可协议