PMAC、TMAC、EMAC、OMAC、CMAC、XCBC,这些都属于基于分组密码的MAC算法,旨在使用像AES这样的分组密码来构建安全的消息认证码。

核心概念与演化脉络

这些算法的演化主线是:如何在保证安全性的前提下,更高效、更灵活地使用分组密码来生成MAC。它们主要解决了早期方案(如CBC-MAC)在安全性和灵活性上的缺陷。

  1. 起源:CBC-MAC

    • 这是最直观的方式:将消息用CBC模式加密,并取最后一个密文块作为MAC。

    • 致命缺陷:对于固定长度的消息是安全的,但对于可变长度消息不安全。攻击者可以通过拼接已知的MAC对来伪造新消息的MAC。

  2. 第一代改进:EMAC, XCBC, TMAC

    • 它们通过引入额外的加密步骤多个密钥来修复CBC-MAC的安全缺陷,使其支持变长消息。

  3. 标准化与简化:OMAC (CMAC)

    • 它们进一步简化了密钥管理,通常只使用一个或两个密钥,并通过在内部生成子密钥来达到与XCBC类似的安全性。CMAC是OMAC的标准化版本,也是目前最广泛使用的算法之一。

  4. 并行化革命:PMAC

    • 这是一个范式转变,它打破了CBC模式的串行依赖,允许并行计算,极大地提高了高速硬件实现中的吞吐量。


详细比较表格

特性EMACXCBCTMACOMAC (CMAC)PMAC
全名Encrypted CBC-MACeXtendable CBCTwo-key MACOne-Key CBC-MAC (Cipher-based MAC)Parallelizable MAC
核心思想对CBC-MAC的输出进行第二次加密使用三个独立密钥处理最后一块使用两个密钥,其中一个由另一个推导出使用一个主密钥,内部推导出两个子密钥使用“偏移量”和ECB模式,最后加密输出
密钥数量2个独立密钥3个独立密钥2个独立密钥1个主密钥 (或2个,但OMAC1/CMAC通常被视为1个)1个主密钥
并行性 (CBC模式串行) (CBC模式串行) (CBC模式串行) (CBC模式串行) (核心计算可并行)
安全性可证明安全可证明安全可证明安全可证明安全可证明安全
消息长度要求任意长度 (填充)任意长度 (填充)任意长度 (填充)任意长度 (填充)任意长度 (填充)
效率一般一般一般高 (密钥调度一次)非常高 (并行计算)
标准化情况旧标准,较少使用未广泛标准化未广泛标准化NIST 标准 (SP 800-38B)NIST 标准 (SP 800-38B)
主要优势比原始CBC-MAC安全解决了变长消息问题比XCBC少一个密钥简洁、安全、标准化,易于实现高性能,适用于高速网络
主要劣势需要两个密钥,效率较低三个密钥管理稍复杂安全性证明较复杂串行计算,无法并行加速设计更复杂

各算法工作原理详解

1. EMAC

在原始CBC-MAC之后,再用一个独立的密钥 K2K2​ 加密最后一个密文块。

  • MAC = E_K2( CBC-MAC_K1(M) )

  • 分析:第二次加密有效地防止了针对原始CBC-MAC的拼接攻击,提高了安全性。但需要管理两个密钥,并且进行了两次加密。

2. XCBC

使用三个密钥 K,K1,K2K,K1​,K2​。密钥 KK 用于所有完整块的CBC加密,而根据消息最后一块是否是完整块,使用 K1K1​ 或 K2K2​ 进行异或和加密。

  • 分析:巧妙地解决了填充和长度扩展攻击问题。但其主要缺点是需要管理和存储三个独立的密钥。

3. TMAC

TMAC是XCBC的改进版,旨在将密钥数量从3个减少到2个。它通过令 K2=f(K1)K2​=f(K1​)(例如,对 K1K1​ 进行简单的变换)来生成第三个密钥。

  • 分析:简化了密钥管理,但安全性证明变得稍微复杂一些。

4. OMAC / CMAC

这是XCBC/TMAC思想的最终升华,也是目前的主流选择。

  • 核心:只使用一个主密钥 KK。

  • 过程

    1. 从 KK 推导出两个子密钥 K1K1​ 和 K2K2​(通过对加密 0n0n 的结果进行移位和异或常数实现)。

    2. 像XCBC一样处理消息,使用 K1K1​ 或 K2K2​ 来处理最后一块。

  • 分析:CMAC兼具了XCBC的安全性和TMAC的密钥管理简便性。它只需要一次密钥调度,效率很高,并且已被NIST标准化。它是大多数通用场景下的推荐选择。

5. PMAC

采用了完全不同的思路,不属于CBC家族。

  • 核心

    1. 对每个消息块 MiMi​,先与一个特定的“偏移量” ΔiΔi​ 异或。

    2. 然后用分组密码加密每个块。注意:这一步是并行的,因为每个块的加密不依赖于前一个块的结果。

    3. 将所有加密结果的最后一块进行累加(通常是异或),最后再加密一次这个累加值,得到MAC。

  • 分析:PMAC的革命性在于其并行性。在硬件实现中,可以同时加密所有块,吞吐量远高于串行的CBC模式。它是高性能计算环境(如核心路由器、高速网卡)的首选。

总结与选择建议

  • 通用和平衡之选:CMAC

    • 如果你的应用没有极致的性能要求,CMAC是首选。它安全、标准化、实现简单、密钥管理方便。适用于大多数软件和嵌入式系统。

  • 极致性能之选:PMAC

    • 如果你在构建高速网络设备、数据中心、或者任何需要为海量数据生成MAC的系统,并且硬件支持并行计算,PMAC是无可匹敌的。它通常与GMAC(基于GCM模式,用于AEAD)一起成为高性能场景的标配。

  • 历史算法:EMAC, XCBC, TMAC

    • 这些主要是密码学演化过程中的重要里程碑。在现代设计中,它们通常被更优的CMAC所取代,除非在需要与旧系统兼容的特定场景下。

简单来说,CMAC 和 PMAC 是当今最重要的两个基于分组密码的MAC,前者胜在简洁通用,后者胜在性能。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐