Appearance
第3章:哈希、消息认证与认证加密
哈希的不同安全性质
密码学哈希把任意长度消息压缩为固定长度摘要。抗原像要求给定摘要难以找到对应输入,抗第二原像要求给定消息难以找另一消息同摘要,抗碰撞要求难以找到任意一对不同消息同摘要。
bit 理想摘要的碰撞搜索约在 次样本达到常数成功概率,来自生日效应;原像搜索的通用成本约为 。因此“摘要长度 n”不能直接称为 n bit 碰撞安全。
哈希公开可算,攻击者修改消息后可以同时修改摘要,所以单独发送消息和哈希不构成认证。
MAC 的伪造游戏
消息认证码使用共享密钥,验证方检查消息和标签。选择消息攻击下,攻击者可索取若干消息的标签,目标是为未查询过的新消息产生可接受标签。
HMAC 是标准的基于哈希的 MAC 构造。随意采用 可能受到特定迭代哈希的长度扩展攻击,不能用“密钥在前面”代替安全分析。
共享密钥的双方都能生成合法 MAC,因此 MAC 通常不能向第三方证明究竟是哪一方生成了消息。数字签名的验证与信任结构不同。
认证加密
认证加密同时提供机密性和密文完整性。AEAD 还允许关联数据:数据不加密,但受认证保护,例如协议版本、序列号和消息类型。
在适当安全前提和编码规则下,Encrypt-then-MAC 先加密,再对包含必要上下文的密文认证,是一种可分析的组合方式。验证应在接受和使用明文之前完成;不能先执行明文命令,再发现标签错误。
重放与上下文
有效标签不意味着消息新鲜。攻击者原封不动重放旧消息,通常不会违反单条消息的完整性定义。协议要使用序列号、随机挑战或时间窗口,并保存足够状态来拒绝重复。
同一字节串在不同协议中也可能有不同含义。域分离为不同用途加入明确标签或使用独立派生密钥,避免一个场景的有效数据被拿到另一个场景解释。
练习
- 为转账消息列出应被认证的字段,金额之外还需要哪些上下文?
- MAC 验证通过为何不能单独阻止重放?
- 128 bit 理想哈希的通用碰撞攻击为何大约只需 次尝试?