跳转至

第 8 章:PRF、CPA 和 CCA 安全

密钥函数

\(F: \{0, 1\}^k \times \{0, 1\}^*\to \{0, 1\}^*\)

那么有多少种 F 呢?如果长度为 n,那么可以有 \((2^n)^{2^n}\) 种。

\(R_k\) 是随机的一个 \(F_k\)。所以如果 \(a \neq b\)\(R_k(a)\) 的值对于 \(R_k(b)\) 没有意义。

看起来 \(R_k\) 很强。如果要拿它作加密函数的话,得让 \(c := \langle r, R_k(r) \oplus m \rangle\),其中 r 不能重复。

伪随机函数 PRF

对于函数 F,如果同时满足:

  • \(F: \{0, 1\}^n \times \{0, 1\}^n \to \{0, 1\}^n\)
  • 对于所有 PPT 分辨者 D,\(|\Pr[D^{F_k(\cdot)}(1^n) = 1] - \Pr[D^{f(\cdot)}(1^n) = 1] |\leq negl(n)\),其中 f 是从 \(F_n\) 中随机取到的某个函数;

那么 F 是个 PRF。

使用 PRF 加密

  • \(Enc_k(m): c := \langle r, F_k(r) \oplus m \rangle, r \leftarrow \{0, 1\}^n\)
  • \(Dec_k(c): c = \langle r, s \rangle, m := F_k(r) \oplus s\)

安全性证明

现在有一个很厉害的对手 A,可以打掉上面使用 PRF 加密的 CPA 安全的系统 \(\Pi\)。现在构造一个分辨器 D:

  • \(c := \langle r, g(r) \oplus m \rangle\);D 有访问 g 的权限。

那么如果 A 猜对就输出 1,否则输出 0。

当给 D 一个随机函数 f:\(\Pr[D^{f(\cdot)}(1^n) = 1] = \Pr[{PrivK^{cpa}}_{A, \Lambda} = 1] \leq 1 / 2 + q(n) / 2^n\),A 最多访问 q(n) 次加密操作。\(\Lambda\) 是上面使用 PRF 加密的系统。

当给 D PRF \(F_k\)\(\Pr[D^{F_k(\cdot)}(1^n) = 1] = \Pr[{PrivK^{cpa}}_{A, \Pi} = 1]\)

所以 \(\Pr[{PrivK^{cpa}}_{A, \Pi} = 1] > 1/2 + negl(n)\) 当且仅当 \(|\Pr[D^{F_k(\cdot)}(1^n) = 1] - \Pr[D^{f(\cdot)}(1^n) = 1] | > negl(n)\)

伪随机序列 PRP

块加密

\(F: \{0, 1\}^n \times \{0, 1\}^l \to \{0, 1\}^l\),密钥长度为 n, 块大小为 l。F 是一个双射。

混淆与扩散

混淆:打乱明文、密文、密钥之间的依赖关系。

扩散:明文或密钥哪怕只变 1 个 bit 都能影响密文的所有比特,破坏明文统计特性(雪崩效应)。

置换排列网络

这是混淆扩散范式的一种变体。

  • S 盒
  • 主密钥会生成子密钥,子密钥和中间结果作异或。

每一轮有三个步骤:

  • 消息与子密钥异或。
  • 消息被分割,并通过 S 盒。
  • 消息混合排列(位重新排序)。

注意 S 盒必须是可逆的,否则没法解密;并且需要达成雪崩效应:S 盒 1 比特变至少引起 2 比特的变化。

费斯妥网络 Feistel Network

S 盒不用可逆,因为加密和解密算出来的密钥是相同的。

CCA 不可区分实验

定义一个实验 \(PrivK^{cca}(n)\)

  • \(k \leftarrow Gen(1^n)\)
  • 对手有访问 \(Enc_k(\cdot)\)\(Dec_k(\cdot)\) 的权限。
  • 对手:输出等长明文 \(m_0, m_1\)
  • 挑战者:在 0 和 1 中选择一个 \(b\),发送 \(c \leftarrow Enc_k(m_b)\)
  • 对手仍然有有访问 \(Enc_k(\cdot)\)\(Dec_k(\cdot)\) 的权限,除了不能访问 \(Dec_k(c)\)
  • 对手:猜 \(b\) 的取值 \(b'\)

\(PrivK^{cca} = 1\) 如果 \(b = b'\)(猜对),否则 \(PrivK^{cca} = 0\)