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. 用概率描述攻击者的知识
为了表达“没有额外信息”,将消息和密钥视为随机变量,而不预设消息均匀出现。
| 对象 | 空间 | 随机变量 | 具体取值 |
|---|---|---|---|
| 明文 | |||
| 密钥 | |||
| 密文 |
一次加密对应实验
可以是任意消息分布;密钥由 独立于消息生成。若加密使用随机性,计算概率时也包括这部分随机性。攻击者可以知道 ,我们要求密文在其已有知识之上不再提供帮助。
例题:单字母移位密码的先验与后验
设消息只有 两种,概率分别为 0.7、0.3;密钥独立地从 均匀选择。
要得到密文 B,明文为 时必须用密钥 1,明文为 时必须用密钥 2。因此
由 Bayes 公式,
同理,。密文没有改变这两个消息的概率。此处只处理单个字母,不能据此断言对整个字符串反复使用同一移位量也安全。
5. 完美保密(Perfect Secrecy)
前面的直觉可以直接写成“后验分布等于先验分布”,要求对所有消息分布都成立。
定义:完美保密
私钥加密方案 在消息空间 上完美保密,如果对 上任意概率分布、任意 ,以及任意满足 的密文 ,都有
密钥独立于消息生成;概率包括密钥生成和加密算法的随机性。
这要求随机变量 与 独立。攻击者即使不受计算资源限制,也无法利用密文改善对消息的判断。密文分布不必均匀,关键是它不能随着明文改变。
另一种刻画直接比较不同固定明文产生的密文分布,避免逐一讨论所有先验分布。
定理:相同密文分布的刻画
记 。方案完美保密,当且仅当对所有 和所有 ,
这里两边各自按同一密钥生成规则采样,不是要求同一个固定密钥将两条明文加密成同一密文。等价性的证明在 Lecture 3 中展开。
6. 用区分游戏表达安全性
若不同明文产生相同的密文分布,那么攻击者即使自己选择候选明文,也无法判断密文加密了哪一条。挑战者(Challenger)用来执行真实的密钥生成与加密,攻击者(Adversary)尝试区分。
定义:完美不可区分性
对方案 和任意攻击者 ,定义窃听实验 :
- 选择两条合法消息 ,并保留自己的状态。
- 挑战者独立生成 、均匀比特 ,返回 。
- 根据 和保留的状态输出猜测 ;实验在 时输出 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
随机猜测本来就能以 的概率获胜,因此安全要求是密文不能提高成功率。若某个攻击者成功率低于 ,翻转其输出就会高于 ;对所有攻击者要求成功率至多 ,也就等价于恰好 。
此处只允许选择两条挑战消息,没有额外的加密查询接口,因此仍是窃听安全实验。完美保密与完美不可区分等价,下一讲证明这一点并构造满足定义的方案。