【密码算法 之六】CCM 浅析

news2024/11/28 20:50:37

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Orangepi Zero2 全志H616简介

为什么学 学习目标依然是Linux 系统 &#xff0c;平台是 ARM 架构 蜂巢快递柜&#xff0c;配送机器人&#xff0c;这些应用场景用C51,STM32单片机无法实现 第三方介入库的局限性&#xff0c;比如刷脸支付和公交车收费设备需要集成支付宝SDK&#xff0c;提供的libalipay.so 是…

【VM服务管家】VM4.0平台SDK_2.2 模块API类

目录 2.2.1 方案保存&#xff1a;方案高速保存的方法2.2.2 Group模块&#xff1a;Group输入输出图像数据的方法2.2.3 模块操作类&#xff1a;设置输入图像、参数和ROI的方法2.2.4 图像源&#xff1a;通过图像源模块接口设置图像输入的方法2.2.5 图像源&#xff1a;通过SDK传入相…

go 语言环境安装(Windows 系统下安装)

go 语言官网:The Go Programming Language 下载 go 安装包的网址&#xff1a;All releases - The Go Programming Language go 支持很多种操作系统 Windows 系统下 - 安装和配置SDK 一、SDK 介绍 SDK 的全称是 Software Development Kit &#xff0c;即 软件开发工具包 二…

STM32物联网实战开发(1)——全新的程序框架

现在STM32公司主推的是HAL库的开发&#xff0c;标准库已经不再更新。通过STM32cubeMX的图形界面生成代码非常的方便。 一、程序框架的构想 1、STM32cubeMX 生成的代码与添加的应用代码分离&#xff1b; 2、利用 STM32cubeMX 重新生成代码&#xff0c;不影响应用代码&#xf…

zabbix配置钉钉告警(附含钉钉告警脚本 · 实战亲测无任何问题)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 钉钉上操作&#xff08;钉钉告警以关…

密码学新进展:基于同态加密的数据保护是否会成为未来的趋势?

第一章&#xff1a;引言 在今天这个数字时代&#xff0c;数据的重要性不断增加&#xff0c;已经成为了现代社会最宝贵的财富之一。各种机构和企业在日常运营中都会处理大量的数据&#xff0c;包括用户信息、财务数据、产品销售数据等。这些数据的安全性非常重要&#xff0c;因…

2.5 定点运算器的组成

学习目标&#xff1a; 具体包括以下几点&#xff1a; 了解定点运算器的基本概念和分类&#xff0c;包括定点运算器的分类、常见的定点运算器类型等&#xff1b;学习定点运算器的基本组成部分&#xff0c;包括输入/输出接口、寄存器、算术逻辑单元(ALU)、控制单元等&#xff0…

VS Code C++ 输出窗口中文乱码问题解决

VS Code C 输出窗口中文乱码问题解决 系统cmd终端乱码 的情况&#xff1a;原因解决方法&#xff1a;&#xff08;仅针对cmd终端输出的情况&#xff09;方法一&#xff1a;更改代码文件的编码方法二 &#xff1a;更改cmd默认终端的编码方式 系统cmd终端乱码 的情况&#xff1a; …

2023年的深度学习入门指南(10) = 前端同学如何进行chatgpt开发

2023年的深度学习入门指南(10) 前端同学如何进行chatgpt开发 在第二篇&#xff0c;我们使用openai的python库封装&#xff0c;搞得它有点像之前学习的PyTorch一样的库。这一节我们专门给它正下名&#xff0c;前端就是字面意义上的前端。 给gpt4写前端 下面我们写一个最土的…

“BIM+智慧工地”精准“数字化”变身智慧工程“管家”

用手机对着满载钢筋的卡车拍照&#xff0c;手指选定一下钢筋范围&#xff0c;几秒后&#xff0c;屏幕就能迅速识别车上有多少根钢筋——这是建筑产业数字化管理智慧工程的应用领域之一。 投资1.78亿元建设的贵州民航产教融合实训基地是集实践教学、社会培训、企业生产保障和科研…

学历与就业:我对“孔乙已长衫”现象的思考

一、你认为社会对于学历和职业之间的关系认知是怎样的&#xff1f; 在当前的社会中&#xff0c;学历往往被看作是一个人能否获得好工作的重要标准。许多用人单位更愿意录取拥有更高学历的求职者&#xff0c;因为他们通常具备更广阔的知识视野和更强的理论基础。然而&#xff0…

Presto之Left Join和Right Join的实现

一. 前言 我们知道&#xff0c;在Presto中&#xff0c;与inner join相比&#xff0c;left join会保留probe表&#xff08;左表&#xff09;的所有值&#xff0c;right join会保留build表&#xff08;右表&#xff09;的所有值。inner join的是实现在文章Presto之Hash Join 数据…

攻击者可以使用HTML和CSS隐藏“外部发件人”电子邮件警告

导语&#xff1a;研究人员近日证实&#xff0c;Microsoft Outlook等客户端向电子邮件收件人显示的“外部发件人”警告可能被发件人隐藏。 研究人员近日证实&#xff0c;Microsoft Outlook等客户端向电子邮件收件人显示的“外部发件人”警告可能被发件人隐藏。 事实证明&#x…

【数据结构】一篇带你彻底玩转 链表

文章目录 链表的概念及结构链表的分类链表接口的实现链表打印链表申请节点链表尾插链表头插链表尾删链表头删链表查找链表在指定位置之后插入数据链表删除指定位置之后的数据链表在指定位置之前插入数据链表删除指定位置之前的数据链表删除指定位置的数据链表的销毁 链表的概念…

总结835

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 暴力英语&#xff1a;熟练背诵《大独裁者》&#xff0c;最后默写。抄写今后要背诵的两篇文章。 高等数学&#xff1a;做…

机器视觉各开发语言对比以及选择

机器视觉主流开发语言主要有, 一.C#,占有率极高 市面主要以Halcon,visionpro,visionmaster,opencvsharp为主。 开发人员利用 C# 能够生成在 .NET 中运行的多种安全可靠的应用程序。 二.C++,Qt 市面主要以Halcon,visionpro,visionmaster,opencv为z主。 C++ 即已成为世界上…

Arduino学习笔记5

一.直流电机控制实验 1.源代码 int dianJiPin9;//定义数字9接口接电机驱动IN1的控制口void setup() {pinMode(dianJiPin,OUTPUT);//定义电机驱动IN1的控制口为输出接口 } void loop() {digitalWrite(dianJiPin,LOW);//关闭电机delay(1000);//延时digitalWrite(dianJiPin,HIGH…

基于protobuf构建grpc服务

一、protobuf介绍 protobuf是谷歌开源的一种数据格式&#xff0c;适合高性能&#xff0c;对响应速度有要求的数据传输场景。因为profobuf是二进制数据格式&#xff0c;需要编码和解码。数据本身不具有可读性。因此只能反序列化之后得到真正可读的数据。 优势&#xff1a; 序列…

【Unity-UGUI控件全面解析】| Text文本组件详解

🎬【Unity-UGUI控件全面解析】| Text文本组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 改变Text文本颜色4.2 文本换行问题4.3 空格自动换行问题4.4 逐字显示效果五、组件相关扩展使用5.1 文本描边组件(Outline)5.2 阴影组件(Shadow)5.3…

操作系统——操作系统逻辑结构

0.关注博主有更多知识 操作系统入门知识合集 目录 2.1操作系统的逻辑结构 思考题&#xff1a; 2.2CPU的态 思考题&#xff1a; 2.3中断机制 2.1操作系统的逻辑结构 操作系统的结构指的是操作系统的设计和实现思路&#xff0c;按照什么样的结构设计、实现。 操作系统的…