Lecture 5:数字签名、哈希与消息认证码¶
学习目标¶
完成本讲后,应当能够:
- 区分机密性、完整性、数据来源认证与不可否认性;
- 说明数字签名、密码学哈希函数和消息认证码的作用与限制;
- 区分原像抗性、第二原像抗性和碰撞抗性;
- 解释生日攻击为何使 \(n\) 位哈希的碰撞安全强度约为 \(n/2\) 位;
- 说明 MAC 变长消息问题、填充预言攻击与认证加密的关系。
1. 完整性与数字签名¶
仅加密消息可以隐藏内容,但不自动保证消息未被篡改,也不证明消息来自谁。完整性(integrity)机制可检测未授权修改;数据来源认证(data origin authentication)用于确认消息来源;不可否认性(non-repudiation)旨在支持事后证明发送者执行过某项操作。
数字签名(digital signature)使用非对称密钥:签名者用私有签名密钥生成签名,验证者用公开验证密钥检查签名与消息是否匹配。它可提供完整性和来源认证;在密钥归属、系统流程和法律环境都满足要求时,也可支持不可否认性。
RSA 的简化教学形式为:
验证者检查 \(S^e\bmod n\) 是否等于 \(h(M)\)。实际方案须对消息摘要使用标准化签名编码与填充,不能将“私钥加密、公钥解密”当作签名的一般定义。许多签名算法并非 RSA。
2. 密码学哈希函数¶
密码学哈希函数(cryptographic hash function)把任意长度输入映射为固定长度摘要。哈希函数本身不含密钥,因此不能单独证明是谁生成了摘要,也不能单独提供认证。
常见安全性质包括:
- 原像抗性(preimage resistance):给定摘要 \(y\),难以找到 \(x\) 使 \(h(x)=y\);
- 第二原像抗性(second-preimage resistance):给定 \(x\),难以找到 \(x'\ne x\) 使 \(h(x')=h(x)\);
- 碰撞抗性(collision resistance):难以找到任意两个不同输入 \(x,x'\) 使 \(h(x)=h(x')\)。
固定长度输出意味着碰撞必然存在;安全目标是让攻击者难以找到碰撞。对于理想的 \(n\) 位摘要,穷举碰撞的工作量约为 \(2^{n/2}\),这是生日悖论(birthday paradox)的结果。原像搜索的通用工作量则约为 \(2^n\)。
MD5 与 SHA-1 已出现实用碰撞攻击,不应再用于需要碰撞抗性的安全用途。SHA-2 与 SHA-3 是课件讨论的后续系列。签名通常对消息摘要而非任意长度原文直接签名,以获得固定长度输入并提升效率。
3. 哈希的构造概念¶
课件介绍了迭代式哈希结构:将消息切分为固定大小分组,加入填充和消息长度,再通过压缩函数反复更新内部状态。Merkle–Damgård 是一种经典迭代结构;sponge(海绵结构)通过吸收输入、再挤出输出构造可变长度摘要。
不能简单地把分组密码或普通哈希结果当成认证标签:公开算法的哈希任何人都能计算,若没有秘密密钥,攻击者篡改消息后也能重新计算摘要。
4. 消息认证码¶
消息认证码(Message Authentication Code,MAC)是使用共享秘密密钥的认证机制。发送方计算 \(T=\operatorname{MAC}_K(M)\),并发送消息和标签;接收方使用同一密钥重新计算标签并比较。没有密钥的第三方不能轻易伪造有效标签。
MAC 提供消息完整性和共享密钥持有者之间的来源认证,但双方都能生成标签,因此通常不提供不可否认性。数字签名验证密钥是公开的,适合需要第三方验证的场景,但计算成本通常较高。
| 机制 | 需要密钥 | 谁能验证 | 主要用途 | 是否支持不可否认性 |
|---|---|---|---|---|
| 普通哈希 | 否 | 任何人 | 摘要、变化检测 | 否 |
| MAC | 共享秘密 | 持有共享密钥者 | 完整性、来源认证 | 否 |
| 数字签名 | 私钥签名、公钥验证 | 任何持有公钥者 | 完整性、来源认证 | 可支持 |
CBC-MAC 的限制¶
课件用零初始向量的 CBC 链展示一种 MAC 构造,最后一个密文分组作为标签。若消息长度可变,未经规范化设计的 CBC-MAC 可能被伪造;不能把对固定长度消息成立的构造直接用于任意长度消息。实际系统应使用经过分析的 MAC 方案,例如 HMAC 或符合标准的 CMAC。
HMAC(Keyed-Hash Message Authentication Code)通过密钥、内外填充值与哈希函数构造标签:
其中 \(K'\) 是按哈希规范处理后的密钥,\(ipad\) 与 \(opad\) 是固定填充值。
5. 加密与认证的组合¶
需要同时保护机密性与完整性时,简单地自行组合加密和 MAC 容易产生错误。填充预言攻击(padding oracle attack)利用系统对填充错误的不同响应,逐步推测明文;错误信息或响应时间差异都可能形成预言。
认证加密(Authenticated Encryption,AE)把加密与完整性认证作为一个经过设计的整体。课件举例为 GCM(Galois/Counter Mode),它同时提供密文和认证标签。应优先使用标准化认证加密接口,并确保 nonce/IV 按算法要求唯一或正确生成。
复习重点¶
- 加密不等于完整性,哈希也不等于认证;
- 哈希负责摘要,MAC 使用共享密钥,数字签名使用私钥签名与公钥验证;
- \(n\) 位哈希的通用碰撞搜索约为 \(2^{n/2}\);
- 共享密钥双方都能生成 MAC,所以 MAC 不提供不可否认性;
- 不要自行拼装加密与认证,使用标准化 MAC 或认证加密方案。