首页/安全/加密与证书速查/AES-CCM 认证加密模式
加密算法基础95 条

AES-CCM 认证加密模式

基于 CTR 加密与 CBC-MAC 认证的组合模式(NIST SP 800-38C / RFC 3610),在无线与物联网协议中使用广泛,实现简单且只需 AES 一种分组运算。

加密与证书速查安全更新于 2026-10-13

AES-CCM 是什么

AES-CCM 是把 CTR 模式的加密与 CBC-MAC 的认证组合起来的认证加密模式,规范见 NIST SP 800-38C,使用说明见 RFC 3610。它的特点是只用 AES 一种分组运算就能同时提供机密性与完整性,因此在无线与受限设备协议中使用广泛,例如 WPA2 的 CCMP、蓝牙 LE 与面向物联网的 TLS 配置。

基本信息

标准NIST SP 800-38C、RFC 3610
运算基础加密用 CTR,认证用 CBC-MAC,均基于 AES
nonce 长度7-13 字节,由 L 字段决定
认证标签常用 8 或 16 字节
典型平台WPA2 CCMP、蓝牙 LE、TLS 1.3 的 CCM 套件

典型使用场景

  • Wi-Fi:WPA2 的 CCMP 用 AES-CCM 保护 802.11 数据帧
  • 蓝牙 LE:链路层加密采用 AES-CCM 变体
  • 受限设备 TLS:TLS 1.3 定义 TLS_AES_128_CCM_8_SHA256 供内存紧张场景使用
  • 自研二进制协议:希望单一算法同时提供加密与完整性时
  • FIPS 合规环境:CCM 属 NIST 认可工作模式,可与 AES 组合使用

TLS 1.3 中的 CCM 套件

TLS 1.3 中的 CCM 套件
TLS_AES_128_CCM_SHA256        # 16 字节标签
TLS_AES_128_CCM_8_SHA256      # 8 字节标签,面向受限环境
# 在 OpenSSL 中枚举
# openssl list -cipher-algorithms | grep -i CCM

参数与影响

要素取值范围影响
nonce7-13 字节长度与单密钥可处理数据量上限耦合
标签长度4 到 16 字节(偶数)越短抗伪造能力越弱
AAD任意长度参与认证但不加密,可保护头部字段
密钥AES-128/192/256同一密钥下 nonce 绝不能重复
CCM 对 nonce 唯一性的要求与 CTR 相同:同一密钥下重复 nonce 会直接造成密钥流复用,明文可被恢复,而不只是认证失败。
CCM 属于「先认证后加密」的两遍处理模式,加密前必须知道数据总长度,因此不能用于长度未知的流式加密,也无法在线逐块输出。

落地注意事项

  • 认证与加密共用同一密钥,投产后不要在同一密钥下混用其他模式
  • 实现时先算出总长度再调用加密接口,分块调用会破坏认证
  • 对接无线或嵌入式协议时核对标签长度,协议层通常另有防重放机制
  • TLS 中选用 CCM 套件要确认库版本支持,部分旧实现只做了 GCM

与 GCM 的对比

维度CCMGCM
分组运算只用 AES 加密AES 加密加有限域乘法
nonce 长度7 到 13 字节可选常用 12 字节
处理方式需预知总长度支持流式
硬件门槛只需 AES 单元有乘法加速时更有优势
WPA2 的 CCMP 会把 802.11 帧头中受保护的部分作为附加认证数据参与计算,篡改帧头同样能被发现;重放计数与密钥更新由 802.11 状态机负责,不由 CCM 本身处理。

易错点

  • 同一密钥重复使用 nonce:CCM 底层是 CTR,nonce 重复会复用密钥流,明文可直接恢复
  • 为省字节把标签截到 4 字节而不评估威胁模型,伪造成功概率显著上升
  • 把 CCM 用于长度未知的流式数据:需要先缓冲全部数据,会破坏协议的分块设计
  • 把 CCM 与 GCM 的 nonce 长度混用:GCM 常用 12 字节,CCM 由 L 决定,跨实现对接必须显式约定
  • 一次性把 nonce 空间用到上限:数据量接近 L 决定的上限时密钥必须更换,否则会逼近 nonce 重复

数据来源与参考

  • NIST SP 800-38C(CCM 规范)
  • RFC 3610(CCM 使用说明)
  • RFC 8446 附录 B
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌