什么是消息认证码(MAC)?工作原理与最佳实践
消息认证码(MAC)是一种应用于消息的密码学校验和,用于保证消息的完整性和真实性。MAC在网络通信中用于确认消息确实来自声明的发送方且未被更改。
MAC有助于保护数据、防止冒充和检测消息篡改。它们确保传输的消息源自声明的发送方,且在传输过程中未被意外或故意修改。为此,MAC在验证过程中使用认证密码学,确保从一方发送到另一方的数据是合法且未更改的。
MAC也被称为标签,因为它是添加到被验证消息中的较短认证数据片段。
MAC的工作原理
MAC使用对称密钥密码技术为单个消息生成MAC。该过程需要一个标准MAC算法,该算法接受两个输入:原始消息和仅由消息发起者及其预期接收者知道的秘密密钥。下图概述了发送方如何生成MAC以及接收方如何验证它。
基于MAC的消息验证要求发送方和接收方都处理以下特定步骤以确保消息的可信度:
- 发送方和接收方共享一个秘密对称密钥。
- 发送方运行标准算法创建MAC。算法以原始消息和秘密密钥作为输入。
- 算法结合消息和秘密密钥,并从中生成固定长度的校验和,用于创建MAC。
- 发送方将MAC附加到消息上,并将两者传输给接收方。
- 当接收方收到消息和MAC时,它使用传输的消息和共享的秘密密钥作为输入运行MAC算法。
- 算法结合消息和秘密密钥,并从中生成固定长度的校验和,用于创建自己的MAC。
- 接收方将发送方的MAC与自己的MAC进行比较。如果匹配,接收方接受消息;如果不匹配,接收方拒绝消息。
当两个MAC匹配时,接收方知道消息来自合法发送方,且在发送方和接收方之间传输时未被更改。如果发送方和接收方未使用相同的秘密密钥,或者消息内容在发送方和接收方之间不同,MAC值将不匹配,接收方将拒绝消息。
尽管MAC确保真实性和完整性,但它不保护消息数据本身。这不是它的目的。对于数据保护,消息需要在单独的过程中进行加密。
消息认证码的类型
MAC可以分为不同类型,包括以下:
- 一次性MAC:设计为每个密钥仅用于一条消息,通常具有强安全性和快速计算的特点。
- 密钥哈希MAC(HMAC):使用密码学哈希函数和两个密钥生成MAC。
- 通用哈希MAC(UHF-MAC):使用数学通用哈希技术认证和处理消息,以其速度著称。
- Carter-Wegman MAC:提供认证长消息的方法,可以并行处理消息部分,每条消息仅需调用一次密码学函数。它是UHF-MAC的特定类型。
- 基于分组密码的MAC:使用对称分组密码以块为单位处理消息部分,适用于较长消息。
- 可并行MAC(PMAC):基于分组密码,通过使每个块能够并行处理来提高速度和效率。它是基于分组密码的MAC的特定类型。
批准的消息认证码算法
MAC生成需要一个能够安全生成密码学校验和的通用算法。有多种算法可用于MAC创建;然而,美国国家标准与技术研究院(NIST)仅批准了以下三种算法:
HMAC
HMAC密码认证技术使用秘密密钥与联邦信息处理标准(FIPS)批准的哈希函数结合。由于可以使用不同的哈希函数,存在多种HMAC实现,如HMAC-SHA256和HMAC-SHA3-256。多种通信和传输协议使用HMAC,包括超文本传输协议安全、安全文件传输协议和安全文件传输协议。
Keccak消息认证码
基于Keccak的密钥哈希函数KMAC是一种密码学哈希函数,也可用于认证、加密和伪随机数生成。Keccak有两种变体:KMAC128和KMAC256。Keccak在FIPS 202 SHA-3标准中指定:基于置换的哈希和可扩展输出函数。
认证的CMAC模式
基于密码的消息认证码(CMAC)标准定义了一种基于分组密码的MAC算法,用于确保真实性和完整性。根据NIST,CMAC可被视为分组密码的一种操作模式,提供“一种以对称密钥分组密码为特征的数据密码转换算法”。
NIST还通过其密码算法验证计划为批准的算法提供测试要求和验证列表。
MAC对企业的好处
MAC提供多种好处,包括:
- 数据完整性:MAC有助于确保未向消息添加未经授权的代码,且消息未被篡改。
- 认证:MAC验证消息源自拥有秘密密钥的认证发送方。
- 轻量级:MAC轻量且高效,因为它们是附加到消息的小代码标签。
MAC的挑战和限制
然而,MAC有以下限制:
- 复杂的密钥管理:为了生成和验证MAC,发送方和接收方必须拥有相同的秘密密钥。这在大型系统中可能很复杂。
- 无保护:尽管MAC确保真实性和完整性,但它不保护消息本身。安全需要使用单独的加密过程。
- 不可否认性缺失:MAC不提供不可否认性能力,意味着无法证明谁创建了原始消息。
MAC与数字签名
消息认证码和数字签名在概念上相似,因为两者都确保消息的真实性和完整性。
然而,最显著的区别是数字签名是非对称的,意味着它们使用一对密钥——发送方用一个密钥签署消息,接收方用另一个密钥访问消息。相比之下,MAC使用单个共享秘密密钥用于双方。
尽管数字签名具有与MAC类似的目标,但它们的结构不同。
这也意味着数字签名提供不可否认性,提供文档起源的记录。而对于MAC,无法证明谁创建了原始消息。
探索MAC和HMAC如何使用哈希函数加密认证消息,以及对称与非对称加密算法之间的差异。