Lec 2 对称加密:从 PRF 构造
MIT 6.5610 (Spring 2026) · Lecture 2 · 2026-02-04
关键词:加密语法、完美保密、一次性密码本、计算不可区分性、CPA 安全、伪随机函数、ChaCha20、MAC
TL;DR
一次性密码本实现单消息完美保密,却要求与消息等长且绝不复用的密钥;多消息场景必须转向计算安全而非分布完全相同。
CPA 安全允许攻击者自适应查询加密并选择挑战消息,仍要求其不能显著优于随机猜测;这也迫使加密算法使用随机 nonce。
PRF 将短密钥扩展为随机函数外观,构造 ( r , m ⊕ F k ( r ) ) (r,m\oplus F_k(r)) ( r , m ⊕ F k ( r )) ;它只提供机密性,完整性仍需 MAC 或 AEAD。
0. 一句话主线
本讲沿着"安全定义的演化 "展开:从 Shannon 的完美保密(OTP)出发,发现它无法多次复用 → 放宽到计算不可区分性 → 得到现代标准 CPA 安全 → 用**伪随机函数(PRF)**这一"魔法"把不可达的理想(无限随机密码本)变为可高效计算的真实方案。
1. 加密方案的语法(Syntax)
定义
定义 1(对称加密方案 · Symmetric Encryption Scheme )
由密钥空间 { K λ } \{K_\lambda\} { K λ } 、消息空间 { M λ } \{M_\lambda\} { M λ } 、密文空间 { C λ } \{C_\lambda\} { C λ } 与两个算法 ( E n c , D e c ) (\mathrm{Enc}, \mathrm{Dec}) ( Enc , Dec ) 组成:
E n c λ : K λ × M λ → C λ , D e c λ : K λ × C λ → M λ . \mathrm{Enc}_\lambda : K_\lambda \times M_\lambda \to C_\lambda, \qquad \mathrm{Dec}_\lambda : K_\lambda \times C_\lambda \to M_\lambda. Enc λ : K λ × M λ → C λ , Dec λ : K λ × C λ → M λ .
正确性 :对每个 λ \lambda λ 、每个 m ∈ M λ m \in M_\lambda m ∈ M λ 、每个 k ∈ K λ k \in K_\lambda k ∈ K λ ,
D e c λ ( k , E n c λ ( k , m ) ) = m . \mathrm{Dec}_\lambda(k, \mathrm{Enc}_\lambda(k, m)) = m. Dec λ ( k , Enc λ ( k , m )) = m .
语法只规定"能正确解密",完全没说安全 。安全是本讲真正要打磨的东西。
2. 安全定义的三次迭代(Take 1 → 2 → 3)
Take 1:完美保密(单消息)
定义
定义 2(Take 1 · 完美保密)
对每个 λ \lambda λ 、每对消息 m 0 , m 1 ∈ M λ m_0, m_1 \in M_\lambda m 0 , m 1 ∈ M λ :
E n c ( k , m 0 ) ≡ E n c ( k , m 1 ) , k ← R K λ , \mathrm{Enc}(k, m_0) \equiv \mathrm{Enc}(k, m_1), \quad k \xleftarrow{R} K_\lambda, Enc ( k , m 0 ) ≡ Enc ( k , m 1 ) , k R K λ ,
其中 ≡ \equiv ≡ 指两个分布完全相同 :∀ c , Pr k [ E n c ( k , m 0 ) = c ] = Pr k [ E n c ( k , m 1 ) = c ] \forall c,\ \Pr_k[\mathrm{Enc}(k,m_0)=c] = \Pr_k[\mathrm{Enc}(k,m_1)=c] ∀ c , Pr k [ Enc ( k , m 0 ) = c ] = Pr k [ Enc ( k , m 1 ) = c ] 。
例
满足 Take 1 的方案:一次性密码本(One-Time Pad, OTP ,Vernam 1917)
取 K λ = M λ = { 0 , 1 } λ K_\lambda = M_\lambda = \{0,1\}^\lambda K λ = M λ = { 0 , 1 } λ :
E n c ( k , m ) = k ⊕ m , D e c ( k , c ) = k ⊕ c . \mathrm{Enc}(k,m) = k \oplus m, \qquad \mathrm{Dec}(k,c) = k \oplus c. Enc ( k , m ) = k ⊕ m , Dec ( k , c ) = k ⊕ c .
Shannon 证明了它满足完美保密。
但 OTP 一旦复用密钥就崩 :
看到两个密文 c 1 , c 2 c_1, c_2 c 1 , c 2 ,攻击者算 c 1 ⊕ c 2 = m 1 ⊕ m 2 c_1 \oplus c_2 = m_1 \oplus m_2 c 1 ⊕ c 2 = m 1 ⊕ m 2 ,泄露两明文的异或;
看到一个已知明文 m m m 的密文 c c c ,立刻恢复密钥 k = c ⊕ m k = c \oplus m k = c ⊕ m 。
🔎 核心观察 :密文是密钥的函数,因此会泄露密钥信息 。我们需要"即便看到很多密文也安全"的方案。
Take 2:多消息完美保密(不可达)
定义
定义 6 前身(Take 2)
对所有 ℓ \ell ℓ 、所有 ( m 1 , … , m ℓ ) (m_1,\dots,m_\ell) ( m 1 , … , m ℓ ) 与 ( m 1 ′ , … , m ℓ ′ ) (m_1',\dots,m_\ell') ( m 1 ′ , … , m ℓ ′ ) :
( E n c ( k , m 1 ) , … , E n c ( k , m ℓ ) ) ≡ ( E n c ( k , m 1 ′ ) , … , E n c ( k , m ℓ ′ ) ) . (\mathrm{Enc}(k,m_1),\dots,\mathrm{Enc}(k,m_\ell)) \equiv (\mathrm{Enc}(k,m_1'),\dots,\mathrm{Enc}(k,m_\ell')). ( Enc ( k , m 1 ) , … , Enc ( k , m ℓ )) ≡ ( Enc ( k , m 1 ′ ) , … , Enc ( k , m ℓ ′ )) .
⚠️ 两个不可达性结论 :
确定性加密下,重复加密同一消息会被识别 → 必须允许 Enc 随机化 (相应地把正确性改为以概率 1 成立,对 Enc 的硬币取概率)。
即便随机化,多次完美保密仍不可达 ——直觉:每条密文都泄露一点 k k k 的信息,密文足够多后 k k k 的全部信息都被泄出。
计算不可区分性:打破不可达
密码学的"魔法"在于放宽要求 :不要求两侧分布完全相同,只要求对多项式时间敌手看起来相同 。
定义
定义 4(可忽略 · Negligible ) μ : N → N \mu:\mathbb{N}\to\mathbb{N} μ : N → N 可忽略:对每个 c c c ,存在 n c n_c n c ,使 ∀ n > n c \forall n > n_c ∀ n > n c 有 μ ( n ) < n − c \mu(n) < n^{-c} μ ( n ) < n − c 。
定义
定义 5(计算不可区分 · Computational Indistinguishability ,记作 ≈ \approx ≈ )
分布族 A = { A λ } A=\{A_\lambda\} A = { A λ } 与 B = { B λ } B=\{B_\lambda\} B = { B λ } 计算不可区分,若对每个 PPT 区分器 D \mathcal{D} D ,存在可忽略 μ \mu μ ,使
∣ Pr [ D ( a ) = 1 ] − Pr [ D ( b ) = 1 ] ∣ ≤ μ ( λ ) , a ← A λ , b ← B λ . \big|\Pr[\mathcal{D}(a)=1] - \Pr[\mathcal{D}(b)=1]\big| \le \mu(\lambda),\quad a\leftarrow A_\lambda,\ b\leftarrow B_\lambda. Pr [ D ( a ) = 1 ] − Pr [ D ( b ) = 1 ] ≤ μ ( λ ) , a ← A λ , b ← B λ .
🔎 "优势"视角 :玩一个游戏——以 1 2 \tfrac12 2 1 概率给 D \mathcal{D} D 来自 A A A 或 B B B 的样本,约定 A A A 时输出 0 算赢、B B B 时输出 1 算赢。则
Pr [ W ] = 1 2 + 1 2 ( Pr [ D ( b ) = 1 ] − Pr [ D ( a ) = 1 ] ) . \Pr[W] = \tfrac12 + \tfrac12\big(\Pr[\mathcal{D}(b)=1]-\Pr[\mathcal{D}(a)=1]\big). Pr [ W ] = 2 1 + 2 1 ( Pr [ D ( b ) = 1 ] − Pr [ D ( a ) = 1 ] ) .
括号内即区分优势 ;要它可忽略,等价于 Pr [ W ] \Pr[W] Pr [ W ] 仅比抛硬币的 1 2 \tfrac12 2 1 多出可忽略量。
Take 3:计算版多消息安全
定义
定义 6(Take 3) 把 Take 2 里的 ≡ \equiv ≡ 换成 ≈ \approx ≈ :
( E n c ( k , m 1 ) , … ) ≈ ( E n c ( k , m 1 ′ ) , … ) . (\mathrm{Enc}(k,m_1),\dots) \approx (\mathrm{Enc}(k,m_1'),\dots). ( Enc ( k , m 1 ) , … ) ≈ ( Enc ( k , m 1 ′ ) , … ) .
这已经很强,但"黄金标准"更强——还允许敌手自适应地选消息 、甚至索要任意密文的解密 (抗选择密文攻击 CCA )。本讲聚焦其中的 CPA 安全 。
3. CPA 安全:现代标准(Chosen-Plaintext Attack)
定义
定义 7(CPA 安全 · 抗自适应选择明文攻击)
方案 ( E n c , D e c ) (\mathrm{Enc},\mathrm{Dec}) ( Enc , Dec ) CPA 安全,若对每个 PPT 敌手 A \mathcal{A} A 存在可忽略 μ \mu μ ,使其在下述游戏中获胜概率至多 1 2 + μ ( λ ) \tfrac12 + \mu(\lambda) 2 1 + μ ( λ ) :
挑战者选密钥 k ← K λ k \leftarrow K_\lambda k ← K λ 。
学习阶段 :A ( 1 λ ) \mathcal{A}(1^\lambda) A ( 1 λ ) 选 m i m_i m i ,得到 c i ← E n c λ ( k , m i ) c_i \leftarrow \mathrm{Enc}_\lambda(k,m_i) c i ← Enc λ ( k , m i ) ;可重复多项式次。
挑战阶段 :A \mathcal{A} A 选 m 0 , m 1 m_0, m_1 m 0 , m 1 ;挑战者掷 b ← { 0 , 1 } b \leftarrow \{0,1\} b ← { 0 , 1 } ,回 c ← E n c ( k , m b ) c \leftarrow \mathrm{Enc}(k, m_b) c ← Enc ( k , m b ) 。
A \mathcal{A} A 输出 b ′ b' b ′ ,当 b ′ = b b' = b b ′ = b 时获胜。
:::
🔎 直觉:即使敌手能先随意点播 任意明文的加密(学习阶段),仍无法在挑战阶段分辨加密的是 m 0 m_0 m 0 还是 m 1 m_1 m 1 。这要求 Enc 必须随机化——否则学习阶段查一下 m 0 , m 1 m_0, m_1 m 0 , m 1 的密文,挑战时比对即可。
4. 构造 CPA 安全方案 4.1 理想版:无限随机密码本 观察:若密钥是一个真正随机函数 F : { 0 , 1 } λ → { 0 , 1 } F:\{0,1\}^\lambda \to \{0,1\} F : { 0 , 1 } λ → { 0 , 1 } (相当于无限长密码本),则可每次取一段新鲜的"伪密码本":
E n c ( F , m ) = ( r , F ( r ) ⊕ m ) , D e c ( F , ( c 1 , c 2 ) ) = F ( c 1 ) ⊕ c 2 , \mathrm{Enc}(F, m) = (r,\ F(r) \oplus m),\qquad \mathrm{Dec}(F,(c_1,c_2)) = F(c_1) \oplus c_2, Enc ( F , m ) = ( r , F ( r ) ⊕ m ) , Dec ( F , ( c 1 , c 2 )) = F ( c 1 ) ⊕ c 2 ,
r ← R { 0 , 1 } λ r \xleftarrow{R} \{0,1\}^\lambda r R { 0 , 1 } λ 。只要加密次数远小于 2 λ / 2 2^{\lambda/2} 2 λ /2 ,由生日界几乎不会出现 r r r 重复(一旦 r r r 不重,每条都退化为一次性 OTP,安全)。
⚠️ 问题:真正的随机函数无法存储/计算。于是引入它的高效"赝品"——PRF 。
4.2 伪随机函数(PRF) 定义 8(伪随机函数 · Pseudorandom Function, PRF )
函数族 { F λ } \{F_\lambda\} { F λ } ,F λ : K λ × X λ → Y λ F_\lambda : K_\lambda \times X_\lambda \to Y_\lambda F λ : K λ × X λ → Y λ ,是 PRF,若对每个 PPT 敌手 A \mathcal{A} A 存在可忽略 μ \mu μ ,对每个 λ \lambda λ :
∣ Pr [ A F λ ( k , ⋅ ) ( 1 λ ) = 1 ] − Pr [ A R λ ( ⋅ ) ( 1 λ ) = 1 ] ∣ ≤ μ ( λ ) , \Big| \Pr\big[\mathcal{A}^{F_\lambda(k,\cdot)}(1^\lambda)=1\big] - \Pr\big[\mathcal{A}^{R_\lambda(\cdot)}(1^\lambda)=1\big] \Big| \le \mu(\lambda), Pr [ A F λ ( k , ⋅ ) ( 1 λ ) = 1 ] − Pr [ A R λ ( ⋅ ) ( 1 λ ) = 1 ] ≤ μ ( λ ) ,
其中 k ← R K λ k \xleftarrow{R} K_\lambda k R K λ ,R λ : X λ → Y λ R_\lambda : X_\lambda \to Y_\lambda R λ : X λ → Y λ 为真随机函数;A \mathcal{A} A 对其预言机(F λ ( k , ⋅ ) F_\lambda(k,\cdot) F λ ( k , ⋅ ) 或 R λ R_\lambda R λ )有自适应 查询权。具体可设 X = { 0 , 1 } n , Y = { 0 , 1 } m X=\{0,1\}^n,\ Y=\{0,1\}^m X = { 0 , 1 } n , Y = { 0 , 1 } m 。
🔎 PRF vs PRG :PRG 保证"输入随机时单个输出像随机";PRF 更强——只要密钥随机抽取,所有输出(无论输入怎么选)整体看像随机函数 。PRF 是带密钥的、可被任意点播的随机外观映射。
4.3 用 PRF 构造 CPA 安全加密
定理
构造 :设 F λ : K λ × X λ → { 0 , 1 } m ( λ ) F_\lambda : K_\lambda \times X_\lambda \to \{0,1\}^{m(\lambda)} F λ : K λ × X λ → { 0 , 1 } m ( λ ) 为 PRF。
E n c λ ( k , m ) = ( r , m ⊕ F ( k , r ) ) , r ← R X λ ; D e c λ ( k , ( r , c ) ) = F ( k , r ) ⊕ c . \mathrm{Enc}_\lambda(k,m) = (r,\ m \oplus F(k,r)),\quad r \xleftarrow{R} X_\lambda; \qquad \mathrm{Dec}_\lambda(k,(r,c)) = F(k,r)\oplus c. Enc λ ( k , m ) = ( r , m ⊕ F ( k , r )) , r R X λ ; Dec λ ( k , ( r , c )) = F ( k , r ) ⊕ c .
该方案 CPA 安全。
证明思路(归约) :用真随机函数 R R R 替换 F ( k , ⋅ ) F(k,\cdot) F ( k , ⋅ ) 。
由 PRF 定义,"用 F F F "与"用 R R R "两个世界对任意 PPT 敌手计算不可区分(否则该敌手即破 PRF)。
在"用 R R R "的世界里,只要挑战与各次查询的 r r r 互不相同,F ( k , r ) F(k,r) F ( k , r ) 被替换为新鲜均匀的 R ( r ) R(r) R ( r ) ,密文退化为一次性 OTP,对 b b b 完全无信息。
r r r 发生碰撞的概率由生日界控制(查询数 ≪ 2 ∣ X ∣ / 2 \ll 2^{|X|/2} ≪ 2 ∣ X ∣/2 时可忽略)。
综合两步,敌手优势可忽略。(下一讲会具体量化 两边敌手成功概率的关系。)
🔎 这是密码学最常用的"混合论证 / 归约 "骨架:先用理想对象(R R R )替换真实对象(F F F ),借不可区分把误差吸收进可忽略项,再在理想世界里直接证安全。
5. 实例与扩展
例
PRF 实例:流密码 ChaCha20(TLS 中使用)
F k ( i ) = C h a C h a 20 k ( nonce , i ) , F_k(i) = \mathrm{ChaCha20}_k(\text{nonce}, i), F k ( i ) = ChaCha20 k ( nonce , i ) ,
i i i 为计数器;将 F k ( i ) F_k(i) F k ( i ) 与明文流逐段异或得密文流(即计数器模式 counter mode 的思想)。下一讲展开 ChaCha20 细节。
用 PRF 保证完整性:MAC
加密保证机密性,但不保证密文未被篡改 。可用同一 PRF 构造消息认证码(Message Authentication Code, MAC ) :对消息(这里记作密文 c c c )附加标签
tag = F ( k , c ) . \text{tag} = F(k, c). tag = F ( k , c ) .
验证时重算比对。公钥设定下的对应物即数字签名(signature) ,本课后续展开。
⚠️ 工程提醒 :机密性与完整性要分别 保证。加密 + MAC 的正确组合是 Encrypt-then-MAC ;实践中直接用 AEAD (如 ChaCha20-Poly1305、AES-GCM)一并搞定,避免手工拼装出错。
6. 小结(定义演化脉络)
完美保密(单消息, OTP) → 多消息完美保密(不可达) → 计算不可区分(≈) → CPA 安全(现代标准)
Shannon 必须随机化 放宽到 PPT 视角 允许自适应点播
OTP 完美但不可复用;现代加密用 PRF + 随机 nonce 复现"无限密码本"。
安全的关键放宽是 ≡ → ≈ \equiv \to \approx ≡→≈ (信息论 → 计算论)。
归约证明 = "理想替换 + 不可区分吸收误差"。
落地务必用 AEAD 同时保机密性与完整性。
我的理解
先写安全游戏再选构造,能迫使设计者明确对手能查询什么、成功事件是什么,以及系统究竟承诺了什么。