当前位置: 首页 > news >正文

消息认证码(message authentication code)MAC

概述
消息认证码(message authentication code)是一种确认完整性并进行认证的技术,简称为MAC。

使用消息认证码可以确认自己收到的消息是否就是发送者的本意,也就是说,使用消息认证码可以判断消息是否被篡改,以及是否有人伪装成发送者发送了该消息。

消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。

消息认证码的使用步骤:
以Alice银行和Bob银行的故事为例,
(1)发送者Alice与接收者Bob事先共享密钥;
(2)发送者Alice根据汇款请求消息计算MAC值(使用共享密钥)
(3)发送者Alice将汇款请求消息和MAC值两者发送给接收者Bob
(4)接收者Bob根据收到的汇款请求消息计算MAC值(使用共享密钥)
(5)接收者Bob将自己计算的MAC值和从Alice处收到的MAC值进行对比
(6)如果两个MAC值一致,则接收者Bob就可以判定汇款请求的确来自Alice(认证成功);
如果不一致,则可以判定消息不是来自Alice(认证失败)

MAC的密钥配送问题

在消息认证码中,需要发送者和接收者之间共享密钥,而这个密钥不能被主动攻击者Mallory获取。如果这个密码落入Mallory手中,则Mallory也可以计算出MAC值,从而就能够自由地进行篡改和伪装攻击,这样一来消息认证码就无法发挥作用了。

实际上,对称密码地密钥配送问题在消息认证码中也同样会发生,要解决密钥配送问题,需要像对称密码一样使用一些共享密钥地方法,如公钥密码、密钥分配中心,或者使用其他安全的方式发送密钥等。

MAC的应用实例
(1)IPsec
IPsec是对互联网基本通信协议——IP协议(Internet Protocol)增加安全的一种方式。在IPsec中,对通信内容的认证和完整性校验都是采用MAC来完成的。
(2)SSL/TLS
SSL/TLS是我们在网上购物等场景中使用的通信协议。SSL/TLS中对通信内容的认证和完整性校验也使用了消息认证码。
(3)SecOC
Security Onboard Communication,是AUTOSAR组织为实现ECU间通信安全提出的标准,主要包含基于MAC的身份验证和基于Freshness的放重放攻击

对MAC的攻击
重放攻击
举例如下

  • Mallory 窃听到Alice银行与Bob银行之间的通信

    Mallory到Alice银行向Mallory自己在Bob银行中的账户M-2653汇款100万元。
    于是Alice银行生成了下列汇款请求信息:
    “向账户M-2653汇款100万元”
    Alice银行为该汇款请求信息计算出正确的MAC值,然后将MAC和消息一起发送给Bob银行

  • Bob银行用收到的消息自行计算MAC值,并将计算结果与收到的MAC值进行对比。由于两个MAC值相等,因此Bob银行判断该消息是来自Alice银行的合法汇款请求,于是向Mallory的账户M-2653汇款100万元。

  • Mallory窃听了Alice银行发给Bob银行的汇款请求消息以及MAC值,并保存在自己的计算机中

  • Mallory将刚刚保存下来的汇款请求消息以以及MAC值再次发给Bob银行

  • Bob银行用收到的消息自行计算MAC值,并将计算结果与收到的MAC值进行对比。
    由于两个MAC值相等,因此Bob银行判断该消息是来自Alice银行的合法汇款请求(误解),于是向Mallory的账户M-2653汇款100万元。

  • 这样执行100次后,Bob银行向Mallory的账户总计汇入
    100万元 x 100 = 1亿元,这时Mallory将这笔钱取出来

在这里,Mallory并没有破解消息认证码,而只是将Alice银行的正确MAC值保存下来重复利用而已,这种攻击方式称为重放攻击(reply attack)

有几种方式可以防御重放攻击。
序号
约定每次都对发送的消息赋予一个递增的编号(序号),并且在计算MAC值事将序号也包含在消息中。这样一来,由于Mallory无法计算出序号递增之后的MAC值,因此就可以防止重放攻击,这种方式虽然有效,但是每个通信对象都需要记录一个消息的序号。
时间戳
约定在发送消息时包含当前的时间,如果收到以前的消息,即便MAC值正确也将其当作错误的消息来处理,这样就能够防御重放攻击。
这种方法虽然有效,但是发送者和接收者的时钟必须一致,而且要考虑到通信的延迟,必须在时间的判断上留下缓冲,于是多多少少还是会存在可以重放攻击的空间。

MAC无法解决的问题
对第三方证明
假设Bob在接收到了来自Alice的消息之后,想要向第三方验证者Victor证明这条消息的确是Alice发送的,但是用MAC无法进行这样的证明,
首先,Victor要校验MAC值,就需要知道Alice和Bob之间共享的密钥

假设Bob相信Victor,同意将密钥告诉Victor,即便如此,Victor也无法判断这条消息是由Alice发送的,因为Victor认为:“即便MAC值是正确的,发送这条消息的人也不一定是Alice,还有可能是Bob。"

防止否认

假设Bob收到了包含MAC值得消息,这个MAC值是用Alice和Bob共享得密钥计算出来的,因此Bob能够判断这条消息的确来自Alice。

但是,Bob无法向验证者Victor证明这一点,也就说,发送者Alice可以向Victor声称:“我没有向Bob发送过这条消息。”这样的行为就是否认。

Alice可以说:“这条消息是Bob自己编的吧”
即便Bob拿MAC值来举证,Victor也无法判断Alice和Bob谁的主张才是正确的,也就是说,用MAC无法防止否任(nonrepudiation)

http://www.dtcms.com/a/276419.html

相关文章:

  • 自动编码器:深度学习的特征提取与数据压缩利器
  • c++11——移动语义的举例说明
  • 数据结构与算法:逆元、除法同余和容斥原理
  • 指令微调时,也要考虑提示损失
  • Linux - 安全排查 3
  • 用 MATLAB 模拟传染病传播:从 SI 模型到 SIS 模型的可视化之旅
  • 【无标题】基于拓扑膨胀-收缩对偶性(TED),TED原理构建任意维度TQCD模型并推演宇宙可能性的完整方案:
  • 网络连接:拨号连接宽带PPPOE
  • 数据库索引创建与使用详细笔记
  • Linux的NetworkManager的nmcli配置网桥(bridge) 笔记250712
  • 【6.1.1 漫画分库分表】
  • 挖矿病毒判断与处理 - 入门
  • 26-计组-寻址方式
  • 暑假Python基础整理 -- 函数篇
  • 【6.1.2 漫画分布式事务技术选型】
  • 常用 pkill 命令速查表
  • CentOS 系统紧急恢复:从 lib64 目录崩溃到救援实战
  • vue3 canvas 选择器 Canvas 增加页面性能
  • 用FunctionCall实现文件解析(三):ChatOpenAI单例工厂
  • lnmp环境搭建
  • 使用Pycharm集成开发工具远程调试部署在虚拟机上的flask项目:超级详细的完整指南
  • springboot AOP面向切面编程
  • SpringAI实现聊天记录保存到MySQL
  • 连接池的核心接口和常用属性
  • ReentrantLock 源码解析与 AQS 扩展
  • 首次让机器人具备类人的「主动感知」能力
  • 淘宝商品评论API接口操作详解
  • oc分类和swift扩展有哪些区别
  • 火山引擎:字节跳动的技术赋能初解
  • AI智能体 | 使用Coze制作一键生成单词洗脑循环视频,一天批量生成100条视频不是梦!(附保姆级教程)