跳转至

Defining Security

现代密码学着重于三方面:

  • 定义:安全性的数学定义;
  • 构造:如何构造安全的密码系统;
  • 证明:如何证明密码系统的安全性。

Pseudo-random Functions and Permutations

首先要讨论的是伪随机数函数,对于对称加密来说这是一个基础的概念,简称为 PRF(pseudo-random function)。

依然尝试采取 Cryptography Game 的方式来进行描述,如下图所示:

Kerckhoffs's principle

A cryptographic system should be secure even if everything about the system, except the key, is public knowledge.

也就是说,我们不能依赖于 PRF 本身的保密性,而是依赖于密钥的保密性,所以我们需要一族 PRF \(\{F_k\}\),选取依赖于密钥 \(k\)。改进后的 Cryptography Game 如下:

但这个 Game 依然有问题,它的难度太大了,并且存在 \(K = D = C = \{0, 1\}^n\)\(F_k(x) = k \oplus x\) 这种即使对手全知全能也无法区分的情况。所以在 Game 中我们赋予对手可以多次请求 \(x\) 的能力,答案由 Oracle 给出。

\(\mathcal{L}\) 是为了避免在 \(b = 0\) 时,若对手重复请求相同的 \(x\) 输出结果不一致的情况。这个 Game Advantage 定义如下:

\[ \operatorname{Adv}^{\mathsf{PRF}}_{\{F_k\}_K}(A) = 2 \cdot \left\lvert \Pr[A^{\mathcal{O}_{F_k}} \text{ wins}] - \frac{1}{2} \right\rvert. \]

引理

\(A\) 是一个 PRF Game 的对手,\(b'\) \(A\) 所选择的 bit \(b\) 是真实的 bit,那么有

\[ \operatorname{Adv}^{\mathsf{PRF}}_{\{F_k\}_K}(A) = \left\lvert \Pr[b' = 1 \mid b = 1] - \Pr[b' = 1 \mid b = 0] \right\rvert. \]

PRF 相关的还有 PRP(pseudo-random permutation),其定义域和陪域都是 \(D\),并且函数是双射。PRP Game 的定义与 PRF Game 类似,如下:

显然这个 Game Advantage 定义与 PRF Game 的类似,如下:

\[ \operatorname{Adv}^{\mathsf{PRP}}_{\{F_k\}_K}(A) = 2 \cdot \left\lvert \Pr[A^{\mathcal{O}_{F_k}} \text{ wins}] - \frac{1}{2} \right\rvert. \]

而因为排列是可逆的,所以也可以定义一个 Game,其中的 Oracle 给出了敌手请求元素的逆元素。所以 PRP Game Advantage 也可以定义为

\[ \operatorname{Adv}^{\mathsf{PRP}}_{\{F_k\}_K}(A) = 2 \cdot \left\lvert \Pr[A^{\mathcal{O}_{F_k}, \mathcal{O}_{F_k^{-1}}} \text{ wins}] - \frac{1}{2} \right\rvert. \]

这样的一个问题便自然而然地产生了:在定义域和陪域一致的情况下,一个敌手能够区分 PRF PRP 吗?首先我们需要定义什么叫“区分”,因为敌手在这两个 Game 中的行为是一样的,均是输出一个 bit,所以我们认为的区分应当是这两者的 Advantage 的差异,也就是对

\[ \left\lvert \operatorname{Adv}^{\mathsf{PRF}}_{\{F_k\}_K}(A; q) - \operatorname{Adv}^{\mathsf{PRP}}_{\{F_k\}_K}(A; q) \right\rvert, \]

进行分析。

PRP-PRF Switching Lemma

\(A\) 是一敌手,\(\{F_k\}_K\) 是一族伪随机置换,定义域和陪域均为 \(D\),那么有

\[ \left\lvert \operatorname{Adv}^{\mathsf{PRF}}_{\{F_k\}_K}(A; q) - \operatorname{Adv}^{\mathsf{PRP}}_{\{F_k\}_K}(A; q) \right\rvert < \frac{q^2}{\lvert D \rvert}, \]

其中 \(q\) 是敌手的查询次数。

Proof

\(A\) PRF Game 中,记 \(E\) Oracle 对两个不同输入值返回了相同输出值的事件,那么有

\[\begin{align} \Pr[A \text{ wins the } \mathsf{PRF} \text{ Game}] & = \Pr[A \text{ wins the } \mathsf{PRF} \text{ Game} \mid E] \cdot \Pr[E] \\ & + \Pr[A \text{ wins the } \mathsf{PRF} \text{ Game} \mid \neg E] \cdot \Pr[\neg E] \\ & \leqslant \Pr[E] + \Pr[A \text{ wins the } \mathsf{PRF} \text{ Game} \mid \neg E] \\ & = \Pr[E] + \Pr[A \text{ wins the } \mathsf{PRP} \text{ Game} \mid \neg E]. \end{align}\]

而根据生日攻击,\(\Pr[E] \leqslant q^2 / 2 \lvert D \rvert\)。不失一般性,假定 \(A\) 胜利的概率至少为 \(1/2\)

\[\begin{align} & \left\lvert \operatorname{Adv}^{\mathsf{PRF}}_{\{F_k\}_K}(A; q) - \operatorname{Adv}^{\mathsf{PRP}}_{\{F_k\}_K}(A; q) \right\rvert \\ = & \left\lvert 2 \cdot \left\lvert \Pr[A \text{ wins the } \mathsf{PRF} \text{ Game}] - \frac{1}{2} \right\rvert - 2 \cdot \left\lvert \Pr[A \text{ wins the } \mathsf{PRP} \text{ Game}] - \frac{1}{2} \right\rvert \right\rvert \\ = & \left\lvert 2 \cdot \Pr[A \text{ wins the } \mathsf{PRF} \text{ Game}] - 1 - 2 \cdot \Pr[A \text{ wins the } \mathsf{PRP} \text{ Game}] + 1 \right\rvert \\ \leqslant & 2 \cdot \Pr[E] \\ \leqslant & \frac{q^2}{\lvert D \rvert}. \end{align}\]

One-Way Functions and Trapdoor One-Way Functions

离散对数问题实际上就是一种单向函数,给敌手一个公开的函数,并要求其进行逆向的操作,如离散对数问题中为给出 \(f(x) = g^x\) 要求其求出 \(x\)。对应的 Game 如下:

这个 Game Advantage 定义如下:

\[ \operatorname{Adv}^{\mathsf{OWF}}_F(A) = \Pr[A \text{ wins the } \mathsf{OWF} \text{ game}]. \]

再考虑 RSA 问题,这其中的单向函数是 \(F_{N, e} (x) = x^e \pmod N\),但这其中存在一个值 \(d\) 使得这个函数能够被高效地逆向,这种函数称为陷门单向函数,这里的 \(d\) 就是陷门。

Security of Encryption

现在我们来定义对称加密算法和公钥加密算法的安全性,有以下三点需要定义:

  • 敌手的目标;
  • 允许的攻击类型;
  • 计算模型。

第一点对应的是 Game 的胜利条件,第二点对应的是敌手能够获取的 Oracle 类型,第三点略微复杂,最后阐述。

为了进行定义,先给出一些符号定义,\(\mathbb{P}\) 为明文空间,\(\mathbb{C}\) 为密文空间,\(\mathbb{K}\) 为密钥空间。对于对称加密,记 \(k \in \mathbb{K}\) 为密钥;而对于公钥加密,记密钥对为 \((\mathfrak{pt}, \mathfrak{st})\),其中 \(\mathfrak{pt}\) 为公钥,\(\mathfrak{st}\) 为私钥。而密钥生成的记号分别记作 \(k \gets \operatorname{KeyGen}()\) \((\mathfrak{pt}, \mathfrak{st}) \gets \operatorname{KeyGen}()\)。加密为 \(c \gets e_k (m)\) \(c \gets e_{\mathfrak{pt}} (m)\),解密为 \(m \gets d_k (c)\) \(m \gets d_{\mathfrak{st}} (c)\)。并且我们假定解密算法始终是有效的,也就是说,对于对称加密而言,

\[ \forall k \in \mathbb{K}, \forall m \in \mathbb{P}, d_k (e_k (m)) = m. \]

对于公钥加密而言是类似的。

One-Way Security

出于不希望敌手获得特定密文对应的明文的考虑,单向安全性(one-way security)的提出是非常自然的。对于对称加密而言,其基本形式可以用如下的 Game 来描述:

等价的,对于公钥加密,其 Game 可以描述为:

\(c^*\) Challenge ciphertext,这样的攻击为被动攻击(passive attack,上述的两个 Game 记为 \(\mathsf{OW-PASS}\). 自然,其对于密码系统 \(\Pi\) Advantage 定义为 \(\operatorname{Adv}^{\mathsf{OW-PASS}}_\Pi (A) = \Pr[A \text{ wins}]\)

显然这是一个比较弱的安全性定义,因为敌手没有任何可以利用的 Oracle。所以一般来说,即使是最低要求的 Game,我们也会给敌手一个加密 Oracle。这样的攻击被称为选择明文攻击(chosen-plaintext attack,因为我们给了敌手一个加密的黑盒,但没有解密的黑盒。对于对称加密而言,其 Game 可以描述为:

如此的 Game 记为 \(\mathsf{OW-CPA}\),而注意到对于公钥加密而言,拥有公钥便可以进行加密,所以其 \(\mathsf{OW-CPA}\) Game \(\mathsf{OW-PASS}\) Game 是一样的。\(\mathsf{OW-CPA}\) Advantage 定义也与 \(\mathsf{OW-PASS}\) 类似,为 \(\operatorname{Adv}^{\mathsf{OW-CPA}}_\Pi (A) = \Pr[A \text{ wins}]\)

更复杂的攻击是选择密文攻击(chosen-ciphertext attack,在这种攻击中,敌手同时拥有加密和解密的 Oracle,不过显然我们要求其不能够解密 Challenge ciphertextGame 的描述如下:

这样的 Game 记为 \(\mathsf{OW-CCA}\)Advantage 定义为 \(\operatorname{Adv}^{\mathsf{OW-CCA}}_\Pi (A) = \Pr[A \text{ wins}]\)

但单向安全性太“暴力”了,它要求敌手能直接破解密文,而无法衡量敌手可以攻破的程度。但在实际中,攻破一部分密文也是十分重要的,所以我们需要有能够衡量敌手无法获得任何与明文相关的信息的安全性定义。

Perfect Security

Perfect security,又称 information-theoretic security,是一种非常强的安全性定义,它描述的是即便敌手拥有无限的计算能力,也无法获得任何关于明文的信息,这其实就和 Perfect Secrecy 是一样的。

Definition

(Perfect Secrecy) 一个密码系统拥有 perfect secrecy,如果对于所有的明文 \(m \in \mathbb{P}\) 和所有的密文 \(c \in \mathbb{C}\),有

\[ \Pr[P = m \mid C = c] = \Pr[P = m], \]

另一个描述 perfect secrecy 的方式如下:

Lemma

一个密码系统拥有 perfect secrecy,如果对于所有的明文 \(m \in \mathbb{P}\) 和所有的密文 \(c \in \mathbb{C}\),有

\[ \Pr[C = c \mid P = m] = \Pr[C = c]. \]

Perfect secrecy 的一个重要性质是,对于任何的密码系统,其密钥空间至少要和密文空间一样大。事实上,我们有如下的定理:

Lemma

若一个密码系统拥有 perfect secrecy,那么有

\[ \# \mathbb{K} \geqslant \# \mathbb{C} \geqslant \# \mathbb{P}. \]
Proof

首先 \(\# \mathbb{C} \geqslant \# \mathbb{P}\) 是显然的,因为加密算法一定是一个单射。
假定所有密文都有可能出现,也就是 \(\forall c \in \mathbb{C}, \Pr[C = c] > 0\),那么对于任意明文 \(m \in \mathbb{P}\),有

\[ \Pr[C = c \mid P = m] = \Pr[C = c] > 0, \]

而对于任一明文 \(m\),这就意味着对于任意的密文 \(c\),都存在着密钥 \(k\) 使得 \(e_k (m) = c\),所以 \(\# \mathbb{K} \geqslant \# \mathbb{C}\)

接下来便是 Shannon's Theorem,其给出了 perfect secrecy 的一个充要条件:

Theorem

\((\mathbb{P}, \mathbb{C}, \mathbb{K}, e_k (\cdot), d_k (\cdot))\) 是一个密码系统,并且 \(\# \mathbb{K} = \# \mathbb{C} = \# \mathbb{P}\)。那么这个密码系统拥有 perfect secrecy 当且仅当:

  • 每个密钥 \(k\) 被使用的概率相同,均为 \(1 / \# \mathbb{K}\)
  • 对于每个明文 \(m\) 和密文 \(c\),存在唯一的密钥 \(k\) 使得 \(e_k (m) = c\)

问题在于公钥加密中,某个公钥会被使用多次,而非一次一密;并且在现代密码学中会追求使用较小的密钥去加密大量的明文。所以 perfect security 是一个过于严格的安全性定义,而且在实际中很难实现。

Semantic Security

语义安全性(semantic security)是一个类似于 perfect security 的安全性定义,但是其要求敌手只有多项式时间的计算能力。正式来说,对于所有明文空间上的概率分布,如果敌手可以在多项式时间内计算出给定密文对应的明文,那么其也可以在没有密文的情况下计算出这一明文。也就是说,是否拥有密文对于敌手计算明文没有任何帮助。