CCM模式

CCM 模式（带有密文分组链接消息验证码的计数器模式；带有CBC-MAC 的CTR模式）是块密码的一种工作模式。它是一种认证加密，旨在提供身份验证和机密性。 CCM 模式仅针对分组长度为 128 位的分组密码定义。  

必须谨慎选择 CCM 的随机数，以免对同一个密钥重复使用。这是因为 CCM 是计数器 (CTR) 模式的派生，而后者实际上是一种流密码。 

 加密与认证 
顾名思义，CCM 模式结合了用于加密的计数器 (CTR) 模式和用于身份验证的密码块链消息身份验证码 (CBC-MAC) 。这两个原语以“先验证后加密”（MAC then Encrypt, MtE）的方式应用：首先对消息计算 CBC-MAC，以获得消息验证码 (MAC) ，然后使用计数器模式对消息和 MAC 进行加密。主流观点认为，只要加密中使用的计数器值不与身份验证中使用的（预）初始化向量冲突，就可以将相同的加密密钥用于两者。基于底层分组密码的安全性，该组合存在可证明安全性 。该证明还适用于任何块大小以及任何大小的强加密伪随机函数的 CCM 推广（因为在计数器模式和 CBC-MAC 中，块密码仅在一个方向上使用）。

CCM 模式由Russ Housley 、Doug Whiting 和Niels Ferguson设计。在开发 CCM 模式时，Russ Housley 在RSA 实验室工作。

Zigbee标准中使用了 CCM 的一个微小变体，称为 CCM*。 CCM* 包括 CCM 的所有功能，还提供仅加密功能。 

 性能 
CCM 需要对认证加密信息的每个块进行两次分组密码加密操作，并对关联的经过验证的数据的每个块进行一次加密。

根据Crypto++基准测试，AES CCM 在 32 位模式下的Intel Core 2 处理器上的运行效率为每字节28.6周期。 

效率问题：

 CCM 不是带有关联数据的“在线”认证加密 (AEAD) ，因为必须提前知道消息（和关联数据）的长度。
 在MAC构造中，关联数据的长度使用可变长度编码，而这可能比机器字更短。如果关联数据很长（这种情况并不常见）， MAC 可能出现性能下降。
 关联数据是在消息数据之后处理的，因此无法预先计算静态关联数据的状态。

 专利 
偏移码本 (OCB) 模式的提交推动了 CCM 模式的发展与纳入IEEE 802.11i标准。由于该 OCB 正在申请专利，因此有人反对加入 OCB 模式。对于标准的实施者而言，包含专利算法意味着许可复杂性的增加。

虽然基于这些知识产权问题对 OCB 模式的纳入存在争议，但人们一致认为，简化认证加密系统是可取的。因此Housley等人开发了 CCM 模式，作为不受专利阻碍的潜在替代方案。

尽管 CCM 模式的效率略低于 OCB 模式，但相比之下，无专利解决方案比因专利许可问题而复杂化的解决方案更可取。因此，CCM 模式继续成为 IEEE 802.11i 标准的强制组件，而 OCB 模式则降级为可选组件状态，最终被完全删除。

 使用 
CCM 模式应用于IEEE 802.11i （如CCMP 与 WPA2的 CCM 加密协议）、 IPsec Using Advanced Encryption Standard (AES) CCM Mode with IPsec Encapsulating Security Payload (ESP) 和 TLS 1.2，  AES-CCM Cipher Suites for Transport Layer Security (TLS)以及蓝牙低功耗（从蓝牙 4.0开始）。 它可用于 TLS 1.3，但在OpenSSL中默认不启用。 

 参见 

 认证加密
 EAX模式
 伽罗瓦/计数器模式
 流密码
 流密码攻击
 计数器模式密码块链消息完整码协议

 参考 

 外部链接 

 : Counter with CBC-MAC (CCM)
 : Using Advanced Encryption Standard (AES) CCM Mode with IPsec Encapsulating Security Payload (ESP)
 : AES-CCM Cipher Suites for Transport Layer Security (TLS)
 A Critique of CCM  (by the designer of OCB)

Category:分组密码工作模式