1. 现代密码学的三个原则

Lecture 1 中的古典密码不断经历设计、攻破和修改。要摆脱仅凭经验判断安全的方式,需要明确目标、前提以及前提如何推出结论。

原则要回答的问题
形式化安全定义(Formal Definitions)攻击者能做什么,怎样才算攻击成功?
精确假设(Precise Assumptions)安全结论依赖哪些尚未证明的命题?
严格的安全证明(Proofs of Security)为什么在这些假设下,方案满足指定定义?

三者构成条件性的安全保证:

1.1 形式化定义的作用

首先要把“安全”变成精确的数学要求。定义既指导方案设计,也使分析、比较和使用方案有共同标准;在相应接口与模型下,满足同一安全定义的组件才有依据互相替换。

定义必须同时说明保护目标、攻击者能力与判定标准。仅写“攻击者无法破解”没有说明这些内容。

1.2 精确假设

安全证明可能依赖某个计算问题很难,因此必须清楚说明困难性的含义和适用范围。

常见假设包括大整数分解困难、单向函数存在等。单向函数的直觉是:计算 容易,但给定相应分布下的 ,找到满足 的原像很难;不一定要求找到最初的 。

也是尚未证明的命题,但它本身不能直接保证某个具体加密方案安全。明确假设有助于研究其可信度、比较方案,以及判断假设失效后的影响。

1.3 安全证明与归约

证明通常不直接分析所有攻击者,而是说明:任何有效攻击,都可以被转化为解决某个困难问题的有效算法。

这里 是归约算法,将假想的攻击者 当作子程序使用。若 成立,右侧不可能发生,因此左侧也不能发生。

证明提供的保证受定义、假设和实现约束。真实攻击超出模型、底层假设失效,或代码未正确实现算法,都可能使实际系统失去安全性。

2. “保护明文”应该是什么意思

安全定义首先要确定保护目标。只关注某一种恢复任务,可能遗漏其他有价值的信息。

不充分的要求问题
无法恢复密钥令 ,密钥虽未泄露,明文却完全公开
无法恢复整条明文即使只恢复其中 90% 或关键敏感部分,也可能造成严重泄露
无法恢复任意一个字符仍可能知道工资低于某个阈值、两项数据是否相同等整体性质

合适的目标是:无论攻击者已经知道哪些关于明文的信息,密文都不应提供额外信息。

先验分布表示观察密文前的判断,后验分布表示观察后的判断。例如,原本认为某条消息出现的概率为 0.7,看到密文后变成 0.9,就已经获得了额外信息;不必等到完全确定明文才算泄露。

3. 威胁模型:攻击者有什么能力

同一个方案可能抵抗一种攻击,却无法抵抗另一种攻击。除计算能力外,还需要规定攻击者能得到哪些信息、访问哪些接口。

模型攻击者能获得的信息或能力
唯密文攻击(Ciphertext-only)观察密文,知道算法、公开参数及明文先验分布
已知明文攻击(Known-plaintext)额外获得同一密钥下的若干明文—密文对
选择明文攻击(CPA)能自行选择明文,取得同一密钥下的对应密文
选择密文攻击(CCA)还能够查询允许的密文的解密结果;不能直接查询挑战密文本身

加密 oracle(预言机)是保存秘密密钥的黑盒接口,允许提交 并得到 ;解密 oracle 类似。算法公开不代表攻击者知道接口内部使用的密钥。

在对应的标准模型中,上述能力逐步增强。抵抗更强模型的方案,也应能抵抗其包含的较弱攻击。具体安全定义还必须说明查询次数、查询时机和计算资源限制。

4. 用概率描述攻击者的知识

为了表达“没有额外信息”,将消息和密钥视为随机变量,而不预设消息均匀出现。

对象空间随机变量具体取值
明文
密钥
密文

一次加密对应实验

可以是任意消息分布;密钥由 独立于消息生成。若加密使用随机性,计算概率时也包括这部分随机性。攻击者可以知道 ,我们要求密文在其已有知识之上不再提供帮助。

5. 完美保密(Perfect Secrecy)

前面的直觉可以直接写成“后验分布等于先验分布”,要求对所有消息分布都成立。

定义:完美保密

私钥加密方案 在消息空间 上完美保密,如果对 上任意概率分布、任意 ,以及任意满足 的密文 ,都有

密钥独立于消息生成;概率包括密钥生成和加密算法的随机性。

这要求随机变量 与 独立。攻击者即使不受计算资源限制,也无法利用密文改善对消息的判断。密文分布不必均匀,关键是它不能随着明文改变。

另一种刻画直接比较不同固定明文产生的密文分布,避免逐一讨论所有先验分布。

定理:相同密文分布的刻画

记 。方案完美保密,当且仅当对所有 和所有 ,

这里两边各自按同一密钥生成规则采样,不是要求同一个固定密钥将两条明文加密成同一密文。等价性的证明在 Lecture 3 中展开。

6. 用区分游戏表达安全性

若不同明文产生相同的密文分布,那么攻击者即使自己选择候选明文,也无法判断密文加密了哪一条。挑战者(Challenger)用来执行真实的密钥生成与加密,攻击者(Adversary)尝试区分。

定义:完美不可区分性

对方案 和任意攻击者 ,定义窃听实验 :

  1. 选择两条合法消息 ,并保留自己的状态。
  2. 挑战者独立生成 、均匀比特 ,返回 。
  3. 根据 和保留的状态输出猜测 ;实验在 时输出 1,否则输出 0。

若对所有攻击者(包括计算能力不受限的攻击者),都有

则称方案完美不可区分。概率包括挑战位、密钥、加密和攻击者的全部随机性。

实验的交互过程如下,实线为请求,虚线为回复:

sequenceDiagram
    participant A as 攻击者 A(计算能力不受限)
    participant C as 挑战者
    A->>C: 两条合法消息 m₀, m₁
    Note over C: 生成 k ← Gen,抽均匀比特 b
    C-->>A: c ← Enc_k(m_b)
    Note over A: 只能分析 c,没有其他接口
    A->>C: 猜测 b′
    Note over A,C: b′ = b 时实验输出 1

随机猜测本来就能以 的概率获胜,因此安全要求是密文不能提高成功率。若某个攻击者成功率低于 ,翻转其输出就会高于 ;对所有攻击者要求成功率至多 ,也就等价于恰好 。

此处只允许选择两条挑战消息,没有额外的加密查询接口,因此仍是窃听安全实验。完美保密与完美不可区分等价,下一讲证明这一点并构造满足定义的方案。