AES CCM模式理解
- 涉及概念
- AES CCM加密模式使用CBC_MAC和CTR加密模式实现
- L长度域,涉及CBC_MAC计算和CTR计算两个计算过程理解,具体见计算过程描述。
- M为输出Tag长度。
- Tag为校验值内容,具体见计算过程描述。
- 输出内容包括CTR加密结果和Tag值。
- 计算过程
- CBC_MAC计算
<上图引用网络资源>
构造B0、B1……、Bn,每组16个字节
CBC_MAC B0结构:
flags | Nonce (即IV,15-L bytes) | data长度(2~8 bytes, MSB)
其中flags结构为:
Bit Number Contents
---------- ----------------------
7 保留位必须为0
6 Adata是否存在
5 ... 3 M’ = (M-2)/2, M为输出的Tag长度(4、6、8、12、14、16)
2 ... 0 L’ = L – 1 , L为明文数据长度占用字节数
B1结构:
长度(2、6、10字节)| 附加数据(16-长度)
0 < l(a) < (2^16 - 2^8) ======è2个字节长度
(2^16 - 2^8) <= l(a) < 2^32 ======è6个字节长度
2^32 <= l(a) < 2^64 ======è10个字节长度
B2 B3……. Bn为附加数据分组,其中包含附件数据和明文数据
以B0加密结果作为IV分别对B2 B3……. Bn做CBC计算,得到Tag。
2. CTR计算
<上图引用网络资源>
构造Ctr0
Octet Number Contents
------------ ---------
0 Flags = L-1
1 ... 15-L Nonce即IV
16-L ... 15 Counter i,默认全0
CBC加密Ctr0,得到结果后续与Tag异或得到校验值(输出)
CTR方式计算明文数据Ctr1、Ctr2….. Ctrn,得到密文(输出)