首页/安全/加密与证书速查/CMAC 消息认证码
本包目录(305 条)
加密算法基础95 条
TLS 与 HTTPS60 条证书与 PKI30 条OpenSSL 实战30 条证书运维排查49 条密钥管理41 条

CMAC 消息认证码

基于分组密码的消息认证码(NIST SP 800-38B / RFC 4493):用 AES 生成定长认证标签,硬件实现简单,适合受限设备与部分金融协议。

加密与证书速查安全更新于 2026-10-12
标准NIST SP 800-38B / RFC 4493
基础算法AES(也可用 3DES 等分组密码)
输出分组长度(AES 下 16 字节,可截断)
与 HMAC 对比无需哈希函数,依赖分组密码实现

Python 示例(cryptography)

Python 示例(cryptography)
from cryptography.hazmat.primitives import cmac
from cryptography.hazmat.primitives.ciphers import algorithms

c = cmac.CMAC(algorithms.AES(key))
c.update(b"message")
tag = c.finalize()
OpenSSL 3 也可直接计算:openssl mac -macopt cipher:AES-256-CBC -macopt hexkey:<32 字节 hex> -in msg.bin CMAC。

易错点

  • CMAC 密钥与加密密钥应分离,复用同一密钥会削弱用途隔离
  • 截断标签会降低安全性:标签短于 64 位时需要额外的安全性论证

数据来源与参考

  • NIST SP 800-38B(CMAC 模式)
  • RFC 4493(AES-CMAC)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌