赞
踩
CCM(Counter with Cipher Block Chaining-Message Authentication Code)是CBC-MAC与CTR的组合,可同时进行数据加密及认证,它基于对称秘钥分组加密算法,分组大小 128bits
,因此 CCM 可以用于 AES,但是不能用于DES、3DES(分组大小为64bits)。CCM模式可以认为是分组加密算法的一种模式。
CCM是CTR加密模式和CMAC认证算法的混合使用,常用在需要同时加密和认证的领域,比如WiFi安全中的WPE协议,它使用了AES-CCM模式。
CCM首先使用CBC-MAC(Cipher Block Chaining-Message Authentication Code)模式对传输帧进行认证,然后使用CTR模式进行数据的加密。
在数据通信中,传输的数据包由两部分组成:数据包头和用户数据(payload)。用户数据一般需要加密以防止窃听,但是传输路上的设备(路由器、交换机等)则往往需要数据包头以保证数据包能够正确的送到目的地,因此对数据包头不能加密。
CCM的输入包括三个元素:
(1)通过格式化函数将(N, 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 的 高
Tlen 字节作为 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));
解密流程其实就是加密流程的逆操作。
(1)若密文长度 Clen <= Tlen,则返回 INVALID;
(2)通过计数发生器,依次生成 Ctr0,Ctr1,…,Ctrm,其中 m = (Plen + 127 ) / 128;
(3)For j=0 to m, do Sj = CIPHK(Ctrj)) ,对 Ctrj 数据块依次进行加密,得到 Sj;
(4)将S1、S2,…,Sm拼接在一起,得到S,S = S1 || S2 || …|| Sm(注意;拼接的时候不包含S0);
(5)P = MSBClen - Tlen( C ) ⊕ MSBClen - Tlen( S );
(6)T = LSBTlen( C ) ⊕ MSBTlen( S0 );
(7)通过格式化函数将(N, A, P)数据格式化为 B0、B1,…,Br 等 128bit
的密文块;
(8)对第1个密文块 B0 加密,得到密文块 P0;
(9)依次加密后面的所有密文块:For i = 1 to r, do P = CIPHK(Bi ⊕ Yi-1);
(10)若 T != MSBTlen(Yr) 则返回 INVALID,否则返回明文 P
加密流程总结
解密流程总结
Flag[bit7]:保留位,值为0
Flag[bit8]:Adata,代表是否有附件数据AAD,0代表无附加数据,1代表有附加数据
t:代表MAC的长度,MAC可能比较长,但是此处仅用了3bit表示MAC长度,所以规则上为了表示更惨的长度,所以有一个公式,即:(t - 2)/2;比如若置为 011b,则 (t - 2)/2 = 011b(3),故 t = 8,即MAC的长度为8字节;
q:代表有效数据长度的字节数(数据长度在B0中占多少个字节),比如 q - 1 = 110b(8),即q = 9,有效的数据长度在B0中占9个字节;
Q:有效数据长度
N:Nonce值
密码算法系列文章的入口地址如下:
【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9…)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。