文章总结: 文档解析了消息鉴别码(MAC)用于保证完整性与身份验证的原理,详细对比HMAC与CMAC两种算法。HMAC基于哈希函数实现简单高效,CMAC基于分组密码安全性更高。两者广泛应用于API认证、TLS及物联网等领域。建议根据安全需求与性能权衡选择算法,并严格管理密钥以防范篡改风险。 综合评分: 85 文章分类: 数据安全,网络安全,应用安全,技术标准
密评专栏丨消息鉴别码
创信华通
2025年12月25日 17:21 四川
引言
在密码学中,消息鉴别码(英语:Messageauthenticationcode,缩写为MAC),又译为消息鉴别码、文件消息认证码、讯息鉴别码、信息认证码,是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证。它可以用来检查在消息传递过程中,其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为消息来源的身份验证,确认消息的来源。
消息鉴别码工作原理
MAC的工作原理、MAC的生成和验证流程如下:
1.生成MAC(发送方)
输入:原始消息(Message)+共享密钥(SecretKey)。
计算MAC:通过特定算法(如HMAC)生成固定长度的标签(MACTag)。
发送:将原始消息和MACTag一起发送给接收方。
2.验证MAC(接收方)
接收数据:获取消息和MACTag。
重新计算MAC:使用相同的密钥和算法对消息重新生成MACTag。
比对:
a.一致:消息未被篡改,且由合法发送方生成。
b.不一致:消息可能被篡改,或密钥错误。
图1消息鉴别码工作流程
MAC有以下常见类别:
- 基于哈希的MAC(HMAC)
原理:结合哈希函数(如SHA-256)和密钥生成MAC。
特点:高效、标准化(RFC2104),广泛用于TLS、JWT等协议。
- 基于分组密码的MAC(如CMAC)
原理:使用分组密码算法(如AES)生成MAC。
特点:适合硬件实现,资源受限场景常用。
- 其他类型
Poly1305:基于模运算的高效MAC,与ChaCha20加密算法配合使用。
GMAC:基于伽罗华域的MAC,用于GCM加密模式。
二、基于哈希的MAC(HMAC)
HMAC(Hash-basedMessageAuthenticationCode是一种基于哈希函数的消息认证码(MAC)算法,用于验证数据的完整性和真实性。它通过结合哈希算法与密钥来生成一个认证码,可以防止数据在传输过程中被篡改。HMAC广泛应用于网络协议(如TLS、IPSec等)、数字签名以及API认证等场景中。
图2HMAC的工作流程
如上图所示,HMAC的工作流程包含以下几个步骤:
1.选择哈希算法:HMAC可以使用任何哈希函数,如MD5、SHA-1、SHA-256等。算法的选择通常取决于安全要求及性能需求。
2.密钥处理:HMAC算法需要一个密钥。如果密钥的长度小于哈希函数的块大小,则需要对密钥进行填充,在末尾填充0。如果密钥的长度大于块大小,则首先对密钥进行哈希处理,使得密钥的长度与块大小一致。
3.内外填充:在HMAC中,密钥会被分别与两个常量值(ipad和opad)进行组合:
- ipad(内填充):一个由0x36组成的块(长度等于哈希函数的块大小)。
- opad(外填充):一个由0x5C组成的块(长度等于哈希函数的块大小)。
4.计算过程:HMAC的计算分为两个主要步骤:
- 内层哈希:首先将密钥与ipad进行异或运算,得到一个新的密钥。然后,将该新密钥与消息数据进行连接,并计算哈希值。
- 外层哈希:接着,将密钥与opad进行异或运算,得到一个新的密钥。然后,将该新密钥与第一步得到的哈希值进行连接,并计算哈希值。最终得到的哈希值就是HMAC值。
HMAC的安全性依赖于两个因素:
1.哈希函数的安全性:如果选择的哈希函数本身存在安全漏洞(如碰撞攻击),则HMAC的安全性也会受到影响。
2.密钥的管理:HMAC依赖于密钥的机密性。如果密钥泄露,HMAC的安全性将大大降低。
因此,建议使用强大的哈希算法(如SHA-256或更高版本的算法),并采取合适的措施管理密钥。
HMAC有许多应用场景:
1.API认证:通过HMAC可以确保请求的数据未被篡改,并且能够验证请求者的身份。
2.数字签名:HMAC可用于签名消息,确保消息的完整性。
3.加密协议:如SSL/TLS,HMAC用于保证数据在传输过程中不被篡改。
三、基于分组密码的MAC(如CMAC)
CMAC(基于分组加密的消息认证码),一般用作消息的签名。与HMAC相同的是都需要一把密钥来加密内容得到MAC,只是MAC的产生方法不同,一个是用hash算法,一个是用分组加密算法。
图3 CMAC的工作流程
如上图所示,CMAC的工作原理:
1.初始化:CMAC使用一个固定长度的密钥来初始化。密钥的长度通常与底层的对称加密算法(如AES)相关联。
2.分块处理:首先,将消息分成多个固定长度的块。如果消息长度不是块大小的倍数,则可以使用填充来将其填充到合适的大小。
3.生成子密钥:根据初始密钥生成用于加密的子密钥。通常,CMAC使用两个不同的子密钥,分别用于生成左右两个分支的子密钥。
4.生成MAC:
- 左分支:将消息的每个块与左分支的子密钥进行加密。对于最后一个块,如果长度不够,则使用填充。
- 右分支:将左分支的结果进行异或运算,然后再与右分支的子密钥进行加密。
5.结果:将右分支的加密结果截取指定长度作为最终的认证码。
6.认证:将消息的认证码与生成的MAC进行比较。如果两者相匹配,则消息未被篡改,认证成功。
CMAC常用于以下场景:
1.网络安全协议:
- TLS/SSL:用于加密通信的完整性验证。
- IPSec:保护VPN数据包的来源和完整性。
2.物联网设备认证:设备间通过CMAC验证指令合法性(如智能家居控制指令)。
3.固件/软件签名:开发者用CMAC签名固件,设备端验证后确保固件未被篡改。
4.金融交易:支付终端与服务器间验证交易数据的真实性。
四、HAMC与CMAC的区别
1.HMAC算法的优势:
HMAC算法支持多种哈希函数,可以适应不同的安全需求。常用的哈希函数有MD5、SHA-1、SHA-256等;
HMAC算法实现简单,速度快;
HMAC算法的安全性得到了广泛的认可,已成为许多网络和应用程序的标准验证机制。
2.HMAC算法的劣势:
HMAC算法有时存在哈希冲突安全性问题(即两个不同的消息产生相同的哈希值),但可以通过使用更安全的哈希函数(如SHA-256和SHA-512等)来缓解;
HMAC算法不支持对称加密算法,因此在需要支持对称加密算法的情况下,HMAC算法将不是最好的选择。
相对于HMAC算法,CMAC算法具有以下优劣势:
1.CMAC算法的优势:
CMAC算法提供更高的安全性,具有更好的抗攻击能力;
CMAC算法可以与对称加密算法结合使用,适用于加密通信和存储设备数据认证等领域;
CMAC算法使用固定长度的密钥,而不是可变长度的密钥,从而提高了密钥的安全性。
2.CMAC算法的劣势:
CMAC算法的实现比HMAC算法复杂,速度较慢;
CMAC算法使用的加密算法比HMAC算法更受限制,不支持多种哈希函数,而且需要使用固定长度的数据块(如AES加密算法的128比特数据块)。
– END –
供稿:杨老师
编辑:小 鱼
审核:王老师
点击回顾往期精彩
《能源行业数据安全管理办法(试行)》发布,能源行业机构应如何应对?
创信华通双展联动,亮相四川卫健信息技术交流大会与高教学会教育信息化专委会学术年会
网络安全漏洞通告(2025年12月)
成都创信华通信息技术有限公司
成都创信华通信息技术有限公司是川内首家同时拥有“等保”与“密评”双资质的网络安全合规检测服务商,以“等保测评+密码测评+软件测试+信息系统工程监理+数据安全服务+网络安全服务”为主的“6+N”服务模式,已成功为党的二十大、中国共产党成立100周年、北京冬奥会、第31届世界大学生运动会、第12届世界运动会等大型活动提供等保、密评、网络安全应急保障服务。
公司以“竭尽全力为国家网络安全保驾护航”为使命,凭借多年积累荣获四川省“专精特新”企业、四川省新经济100强企业、四川省数字经济100强企业、成都市网络信息安全产业影响力TOP30企业等。
期待与您的合作!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:创信华通 《密评专栏丨消息鉴别码》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论