跳转至

Lecture 5:数字签名、哈希与消息认证码

学习目标

完成本讲后,应当能够:

  • 区分机密性、完整性、数据来源认证与不可否认性;
  • 说明数字签名、密码学哈希函数和消息认证码的作用与限制;
  • 区分原像抗性、第二原像抗性和碰撞抗性;
  • 解释生日攻击为何使 \(n\) 位哈希的碰撞安全强度约为 \(n/2\) 位;
  • 说明 MAC 变长消息问题、填充预言攻击与认证加密的关系。

1. 完整性与数字签名

仅加密消息可以隐藏内容,但不自动保证消息未被篡改,也不证明消息来自谁。完整性(integrity)机制可检测未授权修改;数据来源认证(data origin authentication)用于确认消息来源;不可否认性(non-repudiation)旨在支持事后证明发送者执行过某项操作。

数字签名(digital signature)使用非对称密钥:签名者用私有签名密钥生成签名,验证者用公开验证密钥检查签名与消息是否匹配。它可提供完整性和来源认证;在密钥归属、系统流程和法律环境都满足要求时,也可支持不可否认性。

RSA 的简化教学形式为:

\[ S=h(M)^d\bmod n \]

验证者检查 \(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)通过密钥、内外填充值与哈希函数构造标签:

\[ \operatorname{HMAC}_K(M)=H((K'\oplus opad)\parallel H((K'\oplus ipad)\parallel M)) \]

其中 \(K'\) 是按哈希规范处理后的密钥,\(ipad\) 与 \(opad\) 是固定填充值。

5. 加密与认证的组合

需要同时保护机密性与完整性时,简单地自行组合加密和 MAC 容易产生错误。填充预言攻击(padding oracle attack)利用系统对填充错误的不同响应,逐步推测明文;错误信息或响应时间差异都可能形成预言。

认证加密(Authenticated Encryption,AE)把加密与完整性认证作为一个经过设计的整体。课件举例为 GCM(Galois/Counter Mode),它同时提供密文和认证标签。应优先使用标准化认证加密接口,并确保 nonce/IV 按算法要求唯一或正确生成。

复习重点

  1. 加密不等于完整性,哈希也不等于认证;
  2. 哈希负责摘要,MAC 使用共享密钥,数字签名使用私钥签名与公钥验证;
  3. \(n\) 位哈希的通用碰撞搜索约为 \(2^{n/2}\);
  4. 共享密钥双方都能生成 MAC,所以 MAC 不提供不可否认性;
  5. 不要自行拼装加密与认证,使用标准化 MAC 或认证加密方案。