消息鉴别码的种类
(本文由deepseek生成,仅供参考)
消息鉴别码(Message Authentication Code, MAC)的生成方式主要有以下几类,它们基于不同的密码学原理构建:
一、基于对称密码分组密码的MAC
这类MAC利用分组密码(如AES)的核心组件来构建。
1. CBC-MAC
原理:使用密文分组链接模式(CBC),但只取最后一个密文分组作为MAC值。
流程:
将消息分割成多个分组。
使用一个对称密钥和分组密码算法,以CBC模式对消息进行加密。
取最后一个分组的密文(或其中一部分)作为MAC。
特点:
简单高效,但必须保证消息长度固定,否则不安全。
对于变长消息,标准做法是使用EMAC或XCBC-MAC等变体。
2. CMAC
原理:CBC-MAC的改进版,由NIST标准化,适用于变长消息。
流程:
在CBC-MAC的基础上,通过生成子密钥对最后一个分组进行处理。
通过异或和移位操作,确保即使消息长度不同,也能安全生成MAC。
特点:
推荐使用,比CBC-MAC更安全,支持任意长度的消息。
常见于AES-CMAC。
二、基于密码学哈希函数的MAC
这类MAC利用哈希函数的抗碰撞性来构建。
1. HMAC
原理:使用密钥与哈希函数(如SHA-256、SM3)组合,通过两次哈希运算生成MAC。
流程:
将密钥与固定的填充值异或,生成内外两层密钥。
先进行内层哈希:
H( (key ⊕ ipad) || message )
。再进行外层哈希:
H( (key ⊕ opad) || 内层哈希结果 )
,输出最终MAC。
特点:
应用最广泛,安全性依赖于底层哈希函数。
标准化(RFC 2104,FIPS PUB 198-1),支持任何加密哈希函数。
三、基于通用哈希函数的MAC
这类MAC使用数学运算而非密码学哈希,通常追求极快的运算速度。
1. GMAC
原理:GCM(Galois/Counter Mode)认证模式中的认证部分,基于有限域上的乘法哈希。
流程:
将消息分组,在有限域(如GF(2^128))上按霍纳法则进行迭代乘加。
最终结果与经过处理的初始向量等数据组合,生成认证标签。
特点:
速度极快,支持硬件并行化。
通常与CTR模式加密结合,形成GCM模式,提供“认证加密”。
2. Poly1305
原理:与GMAC类似,使用不同的素数模数进行多项式求值。
流程:
在整数模一个素数(2^130-5)的域上,对消息进行多项式求值。
结果与一个一次性密钥(通常来自AES或ChaCha20)组合,生成128位标签。
特点:
高速、安全,常与ChaCha20流密码结合,形成ChaCha20-Poly1305认证加密算法。
被TLS 1.3、SSH等协议广泛采用。
四、其他特殊类型的MAC
1. 可并行MAC
示例:HMAC本身是串行的,但基于某些哈希函数(如SHA-3/Keccak)可以设计并行MAC。
特点:适用于多核处理器或硬件加速场景。
2. 基于泛哈希的WMAC
原理:使用泛哈希函数族,通过随机选择哈希函数来生成MAC。
特点:理论证明安全,但实际应用较少。
总结与对比
MAC类型 | 基础构件 | 安全性依赖 | 性能特点 | 典型应用 |
---|---|---|---|---|
CBC-MAC | 分组密码(如AES) | 分组密码的安全性 | 较快,但消息需定长 | 旧系统(需使用其安全变体) |
CMAC | 分组密码(如AES) | 分组密码的安全性 | 高效,支持变长消息 | 无线通信、IPsec |
HMAC | 密码学哈希(如SHA-256) | 哈希函数的抗碰撞性 | 稳健,广泛优化 | TLS、IPsec、API认证 |
GMAC | 有限域运算 | 底层分组密码和GHASH | 极快,支持硬件并行 | GCM模式认证加密 |
Poly1305 | 模运算 | 一次性密钥的随机性 | 极快,轻量级 | ChaCha20-Poly1305 |
选择建议
通用场景:优先选择 HMAC-SHA256 或 HMAC-SM3(国密),因其安全性经过严格验证,库支持完善。
高性能需求:在支持AES-NI的平台上,AES-GCM(含GMAC)是首选;在其他平台(如移动设备),ChaCha20-Poly1305 性能更优。
资源受限环境:CMAC 可能是一个轻量级的选择,尤其当已部署了AES硬件加速时。