CCM模式浅析

  • 1. 综述
  • 2. 加密
    • 2.1 前置条件(Prerequisites)
    • 2.2 输入(Input)
    • 2.3 输出(Output)
    • 2.4 加密流程(Steps)
  • 3. 解密
    • 3.1 前置条件(Prerequisites)
    • 3.2 输入(Input)
    • 3.3 输出 (Output)
    • 3.4 解密流程(Steps)
  • 4. 总结
  • 附录:B0的构造规则

1. 综述

  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的输入包括三个元素

  • 待认证和加密的数据,称为有效载荷(P);
  • 将被认证但不被加密的相关数据(ADD);
  • Nonce,与P及ADD相关的一个唯一值;

2. 加密

2.1 前置条件(Prerequisites)

  • 分组加密算法(block cipher algorithm),必须分组长度为 128bit 的分组加密算法
  • 加密秘钥 K
  • 计数器生成函数(counter generation function)
  • 格式化函数(formatting function)
  • MAC的长度 Tlen

2.2 输入(Input)

  • N值(valid nonce N),其实就是 IV值
  • 明文P及长度Plen(valid payload P of length Plen bits)
  • 关联数据A(valid associated data A)

2.3 输出(Output)

  • 密文C(ciphertext C)

2.4 加密流程(Steps)

(1)通过格式化函数将(N, A, P)数据格式化为 B0,B1,…,Br128bit 的数据块(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));

3. 解密

3.1 前置条件(Prerequisites)

  • 分组加密算法(block cipher algorithm),必须分组长度为 128bit 的分组加密算法
  • 加密秘钥 K
  • 计数器生成函数(counter generation function)
  • 格式化函数(formatting function)
  • MAC的长度 Tlen

3.2 输入(Input)

  • N值(valid nonce N)
  • 密文 C 及长度 Clen(purported ciphertext C of length Clen bits)
  • 关联数据 A(valid associated data A)

3.3 输出 (Output)

  • 明文 P 或者 INVALID(无效)

3.4 解密流程(Steps)

  解密流程其实就是加密流程的逆操作。

(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,…,Br128bit 的密文块;
(8)对第1个密文块 B0 加密,得到密文块 P0
(9)依次加密后面的所有密文块:For i = 1 to r, do P = CIPHK(Bi ⊕ Yi-1);
(10)若 T != MSBTlen(Yr) 则返回 INVALID,否则返回明文 P

4. 总结

加密流程总结

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

解密流程总结

  • 解密流程是加密流程的反操作。

附录:B0的构造规则

  • 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…)

【密码算法 之六】CCM 浅析相关推荐

  1. 【密码算法 之零】对称算法(DES,、3DES、 AES、DM5、HMAC、CMAC、SHAxx、SM3、SM4),非对称算法(RSA、ECC、ECDSA、ECDH、SM2、SM9...)

      由于工作的需要,在过去的两年中学习.适配了很多算法,包括对称算法.非对称算法.国密算法.国际算法等.为了逼迫自己能够牢记并掌握这些算法的基本知识点,故本人写了一个关于算法的专栏(持续更新中...) ...

  2. 【密码算法 之七】GCM 浅析

    文章目录 1. 概述 1.1 GHASH 1.3 GCTR 2. GCM 加密 3. GCM 解密 4. 总结   在我的另一篇博客[密码算法 之三]分组密码工作模式 (ECB \ CBC \ CFB ...

  3. 【密码算法 之八】Hash类算法(单向散列函数) MD5 \ SHA1 \ SHA224 \ SHA256 \ SHA384 \ SHA512等浅析

    1. 综述   Hash算法,又称单向散列函数(one-way hash function).   单向散列函数有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash va ...

  4. 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)

    文章目录 SM1 对称密码 SM2 椭圆曲线公钥密码算法 SM3 杂凑算法 SM4 对称算法 同态加密 密态计算和隐私计算 安全多方计算技术 安全多方计算的应用场景 对称加密算法 非对称加密算法(公钥 ...

  5. 商用密码应用与安全性评估要点笔记(密码发展、密码算法)

    1.3 密码发展 词条 内容 创新的动力 信息系统的应用需求和攻击威胁 发展三个阶段 古典密码.机械密码.现代密码 古典密码 代换密码,采用一个代换表将一段明文变换成一段密文.若代换表只有一个,是单表 ...

  6. SM4密码算法(附源码)

    from:http://blog.csdn.net/mao0514/article/details/52930944 SM4是我们自己国家的一个分组密码算法,是国家密码管理局于2012年发布的.网址戳 ...

  7. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  8. JavaScript实现希尔密码 算法(附完 整源码)

    JavaScript实现希尔密码 算法 Matrix.js完整源代码 hillCipher.js完整源代码 hillCipher.test.js完整源代码 Matrix.js完整源代码 export ...

  9. 古典密码算法------替代密码算法

    替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文.例如:明文字母a.b.c.d ,用D.E.F.G做对应替换后形成密文. 替代密码包括多种类型,如单表替代密码.多明码 ...

最新文章

  1. cwRsync文件双向同步问题
  2. python索引 切片_python_索引_切片
  3. 基于FPGA的OLED屏幕开发
  4. MATLAB从入门到精通系列之如何在MATLAB中导入excel单sheet页及多sheet页表格
  5. 开源任务调度平台elastic-job-lite源码解析
  6. java轴_JAVA2D:翻译轴
  7. new/delete和malloc/free的区别(举例说明)(简单点)
  8. 如何防止XshellPortable、putty、SecureCRT等断网造成Linux命令中断
  9. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
  10. 谁在偷你的记忆? 应用服务器版
  11. 8 个 jQuery 的 PDF 浏览插件
  12. 人生不该有如此压力,来吃下这口缓解焦虑的良药[50P]
  13. 新手使用python易踩坑语法:if语句中or 与in连用
  14. 如何用一个makefile编译多个目标
  15. Java六大线程池和四大拒绝策略
  16. 会计科目类词汇(中英)
  17. 解决sourcetree特别卡的问题
  18. 怎么查忘仙服务器信息,忘仙怎么跨服战斗 跨服玩法介绍[多图]
  19. 【OpenCV-Python】教程:3-16 利用Grabcut交互式前景提取
  20. 零基础JavaScript学习【第八期】

热门文章

  1. C#桌面图标弹出提示
  2. 斐波那契数列的迭代算法和递归算法
  3. 【模板题】几种常见的Nim游戏(博弈论)
  4. java设计模式之——外观模式、组合模式、装饰模式、享元模式(结构型)
  5. Python编程娃娃源代码
  6. C# for循环与foreach循环
  7. JAVA中的foreach循环
  8. kwork 与kworker
  9. python读取数据库数据、并保存为docx_Python从数据库读取大量数据批量写入文件的方法...
  10. 主板点不亮 复位BIOS_什么是主板