在之前的文章中,我们了解了很多加密算法。但在密码学中,除了单一的加密算法,还有利用不同的加密算法组成的算法模式。下面我们就来了解一下CCM加密模式。

CCM加密模式简介

CCM(Counter with Cipher Block Chaining-Message Authentication Code)是CBC-MAC与CTR的组合,可同时进行数据加密及认证,它基于对称密钥分组加密算法,分组大小 128bits,因此 CCM 可以用于 AES,但是不能用于DES、3DES(分组大小为64bits)。CCM模式也可以认为是分组加密算法的一种模式。

CCM首先使用CBC-MAC模式对传输帧进行认证,然后使用CTR模式进行数据的加密。

在数据通信中,传输的数据包由两部分组成,分别是数据包头和用户数据)。用户数据一般需要加密以防止窃听,但是传输路上的设备(路由器、交换机等)则往往需要数据包头以保证数据包能够正确的送到目的地,因此对数据包头不能加密。

CCM加密模式

CCM的加密流程

  1. 通过格式化函数将N(IV值), A(关联数据), P(明文)数据格式化为 B0,B1,…,Br等128bit的数据块(Br可以是非128bit对齐的块);
  2. 对第0个数据块B0加密,得到密文块Y0
  3. 依次加密后面的所有数据块:For i=1 to r, Yi=CIPHK(Bi⊕Yi-1);
  4. 取 Yr 的高T len字节作为Tag值,记为T ,此值就是MAC值;
  5. 通过计数发生器,依次生成Ctr0,Ctr1,…,Ctrm,其中m=(Plen+127)/128;
  6. For j=0 to m, do Sj=CIPHK(Ctrj)),对Ctrj数据块依次进行加密,得到Sj
  7. 将S1、S2,…,Sm拼接在一起,得到S,S=S1||S2||…||Sm(拼接的时候不包含S0);
  8. C=(P⊕MSBPlen(S))||(T⊕MSBTlen(S0))。

CCM加密模式

CCM加密流程总结

  • 首先将数据N,A,P格式化成block块,分别对各个块进行加密,取最后一个“密文块”的高Tlen字节作为Tag值,至此CCM方法计算的MAC值已经得到了;
  • 通过“计数生成函数”生成各Ctr0,Ctr1 … Ctrm值(生成器的种子就是nonce),然后分别对各个Ctrx值进行加密,得到密文Sx,将S1,S2 … Sm拼接组成S(S0);
  • 最后得到密文,密文是P和T按照一定的形式进行的拼接;
  • CCM的加密过程是“先计算MAC,再进行加密”,符合“MTE”的模式。

CCM的解密和认证

CCM的解密流程其实就是加密流程的逆操作,下面简单来了解一下认证的过程。

  • 如果CLen<Tlen,这很显然是不合理的情况,所以直接返回认证失败;
  • 执行计数器生成函数,初始计数器和上文保持一致;
  • 然后对消息进行CTR模式的解密得到明文,到这里解密阶段完成,这里最后一个分组解密之后即为消息认证码,注意这个分组需要和Ctr0加密之后的结果异或得到T;
  • 密文是P和T按照一定的形式进行的拼接,按照上面加密过程重新拼接成需要认证的消息,计算MAC值,对比MAC是否一致。

CCM加密模式

CCM的应用

CCM是CTR加密模式和CMAC认证算法的混合使用,常用在需要同时加密和认证的领域,比如WiFi安全中的WPE协议,它使用了AES-CCM模式。

免责声明:素材源于网络,如有侵权,请联系删稿。