密码学学习笔记(三):MAC - 消息认证码

Message authentication codes - MACs消息认证码是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证。它可以用来检查在消息传递过程中,其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为消息来源的身份验证,确认消息的来源。-- 《百度百科》

MAC的工作原理

  • Alice和Bob生成并共享密钥K
  • Alice使用K在消息M上生成标签T,并将M和T一起发送给Bob
  • Bob使用K检查T是否根据M和K进行验证
  • 目标:M的真实性或完整性
  • 真实性:M源自Alice
  • 完整性:M在从Alice到Bob的过程中未被修改

如果没有钥匙我们能验证真实性吗?

想象一个不需要密钥的校验和算法(Checksum),对手能否在不被抓到的情况下更改消息?

  • CheckSum算法是公共的,因此将M更改为M',然后使用该算法生成新标签T',并将(M,T)替换为(M',T')

这被称为错误检测代码

  • 示例:MD5 散列/摘要、CRC码
  • 无法提供对抗性攻击的真实性保证
  • 但可以针对不受控制的通信或存储错误提供错误检测能力
  • 示例:一个简单的奇偶校验码(所有M位的异或)可以提供多达1位错误的错误检测

形式语法

MAC方案是3种算法的集合:

  • 密钥生成算法(随机)
  • 输入:安全参数𝑛, 输出:𝑛-位键𝐾

 

  • MAC(生成)算法(可能是随机的)
  • 输入:键𝐾, 消息𝑀, 输出:MAC标签𝑇

 

  • 验证算法(确定性)
  • 输入:键𝐾, 消息𝑀, 标签𝑇, 输出:验证状态位𝑉

MAC安全

对手可能具备的能力:

  • 被动对手:窃听(M,T)
  • 主动对手:选择自己选择的消息并查看标签:选择消息攻击Chosen-Message Attack(CMA)
  • 对手可能的目标:
  • 破坏完整性/真实性:诱骗Bob接受非Alice发送的信息:伪造

UF-CMA安全

UF-CMA:unforgeability under chosen message attack - 选择消息攻击下的不可伪造性

  • CMA:对手可以进行MAC查询
  • UF:对手通过在新消息上伪造标签获胜
  • UF-CMA安全:没有一个可行的对手拥有不可忽视的UF-CMA优势(即赢得UF-CMA比赛的概率)

 伪码格式:

常见MAC使用方式

MAC不需要是随机的。在实践中,大多数MAC都是确定性的,因此验证只需运行MAC算法即可。

  • 密钥生成(随机):𝐾 ← 𝐾𝑒𝑦𝐺𝑒𝑛(𝑛)
  • MAC(生成)(确定性):𝑇 ← 𝑀𝐴𝐶𝐾 𝑀
  • 验证(确定性):
  • 给定(𝐾, 𝑀, 𝑇) 运行MAC算法并检查输出是否是相同的标签,即以下条件是否成立
  • 𝑇 = 𝑀𝐴𝐶𝐾 𝑀

构建MAC

  • MAC标签需要对对手不可预测
  • 使用伪随机函数(PRF)

𝑀𝐴𝐶 𝐾, 𝑀 ≜ 𝑃𝑅𝐹(𝐾, 𝑀)

  • 可以表明,如果PRF是安全的,则MAC是UF-CMA
  • 问题:只能发送MAC固定长度的消息

原始的CBC-MAC

  • 使用类似CBC的结构
  • 无需IV
  • 函数不需要是可逆的
  • 未披露中间值
  • 如果是,MAC将被伪造:给定消息的MAC,其前缀的MAC将被显示

原始的CBC-MAC不属于UF-CMA

  • 易受长度扩展攻击
  • 对手:

 

安全的CBC-MAC

  • 属于UF-CMA安全
  • 需要提前知道消息长度

  •  属于UF-CMA安全
  •  消息长度不需要事先知道,但具有更长的密钥(K,K')

MAC和Replay攻击

如果(M,T)被窃听并重放回Bob,它将再次验证

  • 例如,从Alice到Bob的命令(例如远程API调用)
  • 因此MAC无法抵御重放攻击
  • 实用解决方案:使用计数器或时间戳

总结:

  • MAC在对称密钥设置中提供真实性/完整性
  • 预期的安全级别:所选消息下的不可伪造性攻击(UF-CMA),无法通过错误检测代码实现
  • CBC-MAC是一种基于伪随机函数的安全构造,HMAC是另一个基于散列函数的函数
  • MAC不提供防止重放攻击的保护
  • MAC不提供不可否认性

注:缩写的密码原语可以看之前的笔记,都有介绍过

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值