消息认证码(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)

相关推荐
Sagittarius_A*11 小时前
【好靶场】PHP反序列化绕过
web安全·信息安全·php·代码审计·反序列化绕过
白猫不黑15 小时前
AI Agent自动化渗透测试实战:从原理到红队实践
运维·人工智能·web安全·网络安全·信息安全·渗透测试·自动化
运维开发王义杰1 天前
刚配好服务就被 Censys 扫到了?解密全网测绘的底层黑科技与防线收敛
信息安全
Sagittarius_A*2 天前
【好靶场】PHP反序列化入门练习2
开发语言·web安全·信息安全·php·代码审计·反序列化
白猫不黑3 天前
从运维到网络安全:转行优势、路径与薪资前景全解析
运维·网络·web安全·网络安全·信息安全·渗透测试
Sagittarius_A*3 天前
公钥密码基础(三):RSA 数学原理:欧拉定理、模逆与快速幂
信息安全·密码学·rsa·公钥密码·密钥分发
Sagittarius_A*8 天前
公钥密码基础(一):从对称密码到公钥密码——密钥分发问题
信息安全·密码学·公钥密码·密钥分发
Sagittarius_A*11 天前
后量子密码|前置基础 03|数字签名运行逻辑:签名签发、核验原理与实际业务应用
算法·信息安全·密码学·数字签名·后量子密码
.Peter13 天前
.NET/WPF 程序在部分 Windows 电脑无法保存用户环境变量:使用 DPAPI 实现安全兼容
windows·信息安全·c#·.net·wpf·环境变量·dpapi
Sagittarius_A*14 天前
后量子密码|前置基础 01|PQC 极简数学:模运算、有限域、多项式环、矩阵、范数与小系数噪声
线性代数·信息安全·矩阵·密码学·量子计算·pqc·后量子密码