Skip to content

第3章:哈希、消息认证与认证加密

哈希的不同安全性质

密码学哈希把任意长度消息压缩为固定长度摘要。抗原像要求给定摘要难以找到对应输入,抗第二原像要求给定消息难以找另一消息同摘要,抗碰撞要求难以找到任意一对不同消息同摘要。

nn bit 理想摘要的碰撞搜索约在 2n/22^{n/2} 次样本达到常数成功概率,来自生日效应;原像搜索的通用成本约为 2n2^n。因此“摘要长度 n”不能直接称为 n bit 碰撞安全。

哈希公开可算,攻击者修改消息后可以同时修改摘要,所以单独发送消息和哈希不构成认证。

MAC 的伪造游戏

消息认证码使用共享密钥,验证方检查消息和标签。选择消息攻击下,攻击者可索取若干消息的标签,目标是为未查询过的新消息产生可接受标签。

HMAC 是标准的基于哈希的 MAC 构造。随意采用 H(km)H(k\|m) 可能受到特定迭代哈希的长度扩展攻击,不能用“密钥在前面”代替安全分析。

共享密钥的双方都能生成合法 MAC,因此 MAC 通常不能向第三方证明究竟是哪一方生成了消息。数字签名的验证与信任结构不同。

认证加密

认证加密同时提供机密性和密文完整性。AEAD 还允许关联数据:数据不加密,但受认证保护,例如协议版本、序列号和消息类型。

在适当安全前提和编码规则下,Encrypt-then-MAC 先加密,再对包含必要上下文的密文认证,是一种可分析的组合方式。验证应在接受和使用明文之前完成;不能先执行明文命令,再发现标签错误。

重放与上下文

有效标签不意味着消息新鲜。攻击者原封不动重放旧消息,通常不会违反单条消息的完整性定义。协议要使用序列号、随机挑战或时间窗口,并保存足够状态来拒绝重复。

同一字节串在不同协议中也可能有不同含义。域分离为不同用途加入明确标签或使用独立派生密钥,避免一个场景的有效数据被拿到另一个场景解释。

练习

  1. 为转账消息列出应被认证的字段,金额之外还需要哪些上下文?
  2. MAC 验证通过为何不能单独阻止重放?
  3. 128 bit 理想哈希的通用碰撞攻击为何大约只需 2642^{64} 次尝试?

上次更新: