CMAC算法介绍

news2024/11/26 23:25:33

文章目录

  • 一、简介
  • 二、符号
  • 三、步骤
    • 3.1 子秘钥生成
    • 3.2 计算MAC值

一、简介

CMAC(Cipher Block Chaining-Message Authentication Code),也简称为CBC_MAC,它是一种基于对称秘钥分组加密算法的消息认证码。由于其是基于“对称秘钥分组算法”的,故可以将其当做是对称算法的一种操作模式。
C:采用的是CBC模式;
CMAC可以应用的算法主要有:AES、DES等。
分组加密:就是采用分组的方式,将消息分成对应算法对应大小的块。

二、符号

名称含义
B加密块的长度;
Rb生成子密钥的常量字符串,AES中:0x87(128位),DES中:0x1B(64位);
K加密算法中的密钥;
K1通过K生成的子密钥1
K2通过K生成的子密钥2
Mi消息被划分成的第几个消息块
M n ∗ M_n^* Mn最后一个块(该块可能是整块,也可能是部分块)
TMAC值
T l e n T_{len} TlenMAC值的长度(单位:bit)

三、步骤

3.1 子秘钥生成

如下图所示:对于AES128来说,b的大小为128bit,K的长度同样也是128bit。

  1. 通过AES算法,对128bit的0000…0000进行加密,得到加密后的串L(128bit);
  2. 若L的最高位为0, 则K1 = L <<1,若L的最高位为1, K1 = (L << 1)与Rb的异或之后的值。
  3. 若K1的最高位为0, 则K2 = K1 <<1,若K1的最高位为1, K2 = (K1 << 1)与Rb的异或之后的值。
    请添加图片描述

注:
(1)AES算法,b的长度为128bit,则R128 = 012010000111 (10000111为固定值);
(2)DES、3DES算法,b的长度为64bit, 则则R64 = 05911011(11011也是固定值)。

3.2 计算MAC值

  1. 通过上一个方法,计算出子秘钥K1、K2;
  2. 若M为空,则n = 1, 否则,n 取不小于[Mlen/b]的最小整数值;
  3. 若M分为n个block,其中前n-1个块均为完整的块,最后一个块n可能是完整的块,也可能不是完整的块;
  4. 对最后一个块 M n ∗ M_n^* Mn进行处理,若 M n ∗ M_n^* Mn是完整块,则 M n ∗ M_n^* Mn与K1异或之后作为作为最后一个块Mn;若 M n ∗ M_n^* Mn为非完整块,则先补齐 M n ∗ M_n^* Mn,再与K2异或最为最后一个块Mn。
  5. 通过加密算法对所有的块进行加密,并取最后一组密文 C n C_n Cn T l e n T_{len} Tlen作为 MAC 值 输出。

请添加图片描述

两种块(完整、非完整)的处理过程
请添加图片描述

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

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

相关文章

网络安全|渗透测试入门学习,从零基础入门到精通—渗透中的开发语言

目录 前面的话 开发语言 1、html 解析 2、JavaScript 用法 3、JAVA 特性 4、PHP 作用 PHP 能做什么&#xff1f; 5、C/C 使用 如何学习 前面的话 关于在渗透中需要学习的语言第一点个人认为就是可以打一下HTML&#xff0c;JS那些基础知识&#xff0c;磨刀不误砍柴…

RTU遥测终端机的应用场景有哪些?

遥测终端机又称智能RTU遥测终端机&#xff0c;是一种用于采集、传输和处理遥测数据的设备。在现代科技的发展中&#xff0c;遥测终端机扮演着重要的角色。它是一种能够实现远程监测和控制的关键设备&#xff0c;广泛应用于各个领域&#xff0c;包括水文水利、环境监测、工业自动…

Linux系统:优化命令sar

目录 一、理论 1.命令描述 2.命令作用 3.命令参数 4.实用实例 二、实验 1.压力测试 三、问题 1.Linux系统五大负载如何解决 2.为什么使用ab命令进行网络传输数据的压力测试 3.ab命令发送请求测试失败 四、总结 1.sar命令 2.ab命令 3.五大负载 一、理论 1.命令描…

MySQL的索引(我把梦想卖了 换成了柴米油盐)

文章目录 一、索引的概念二、索引的作用如何实现&#xff1f; 三、索引的副作用四、创建索引的原则依据创建索引的依据 五、索引的分类六、索引的增删改查1.创建索引&#xff08;1&#xff09;创建普通索引&#xff08;2&#xff09;创建唯一索引&#xff08;3&#xff09;创建…

Spring Boot进阶(51):Spring Boot项目如何集成 HTML?| 超级详细,建议收藏

1. 前言&#x1f525; 我们都知道&#xff0c;Spring Boot作为一款广泛应用于企业级的开发框架&#xff0c;其通过简化开发过程、提高开发效率赢得了众多开发者的青睐。在实际项目开发中&#xff0c;集成 HTML作为 Web 应用程序中的一个基本需求&#xff0c;也是现在极其常见的…

618最值得入手的数码产品有哪些?四款必入数码产品数码推荐

时间飞逝&#xff0c;不知不觉已经过了6月中旬&#xff0c;大家心心念念的618年中大促也即将迎来最后一波高潮。这次618大促各大品牌的优惠力度都非常可观&#xff0c;特别是数码产品类&#xff0c;可以说是今年最值得入手的时期。今天也为大家推荐几款高颜值数码好物&#xff…

在 Apple silicon Mac 上 DFU 模式修复或恢复 macOS 固件

搭载 Apple 芯片的 Mac 电脑 DFU 模式全新安装 macOS Ventura 请访问原文链接&#xff1a;https://sysin.org/blog/apple-silicon-mac-dfu/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Mac computers with Apple silicon&a…

聚焦2023数博会|高端对话,大咖观点精彩荟萃(上)

当前数据作为新型生产要素&#xff0c;是数字化、网络化、智能化的基础&#xff0c;已快速融入生产、分配、流通、消费和社会服务管理等各环节&#xff0c;深刻改变着生产方式、生活方式和社会治理方式。数据基础制度建设事关国家发展和安全大局。为加快构建数据基础制度&#…

【C++】手撕跳表

文章目录 跳表简介时间复杂度 代码实现节点类跳表类 源代码&#xff08;附详细注释&#xff09;参考 跳表 简介 跳表全称为跳跃列表&#xff0c;它允许快速查询&#xff0c;插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是…

代码随想录二叉树 Java(三)

文章目录 &#xff08;简单&#xff09;501. 二叉搜索树中的众数&#xff08;*中等&#xff09;236. 二叉树的最近公共祖先&#xff08;中等&#xff09;235. 二叉搜索树的最近公共祖先&#xff08;中等&#xff09;701. 二叉搜索树中的插入操作&#xff08;*中等&#xff09;4…

软件测试中如何编写单元测试用例(白盒测试)

目录 前言&#xff1a; 一、 单元测试的概念 二、开始测试前的准备 三、开始测试 四、完成测试 前言&#xff1a; 单元测试是软件测试中一种重要的测试方法&#xff0c;它是在代码级别进行测试&#xff0c;通过对每个模块或功能进行独立测试来保障代码的正确性和可靠性。…

实验篇(7.2) 11. 站对站安全隧道 - 双方互相发起连接(FortiGate-IPsec) ❀ 远程访问

【简介】前面我们实验的是FortiClient客户端与防火墙进行VPN连接&#xff0c;现在我们要做的实验是防火墙与防火墙之间进行VPN连接。现在我们来看看两台防火墙之间要怎样创建VPN连接。 实验要求与环境 OldMei集团深圳总部部署了域服务器和ERP服务器&#xff0c;用来对集团总部进…

【探索 Kubernetes|容器基础进阶篇 系列 3】容器进程的文件系统

文章目录 系列文章目录&#x1f479; 关于作者一、回顾二、容器进程的文件系统是什么样子的&#xff1f;rootfs一致性解决应用依赖关系解决复用性 三、OverlayFS 联合文件系统先决条件overlay2 驱动程序如何工作结构图探索含义-磁盘上的镜像层和容器层镜像层容器层 四、overlay…

动态规划dp —— 26.环绕字符串中唯一的子字符串

1.状态表示 是什么&#xff1f;dp表中里的值所表示的含义就是状态表示 dp[i]表示&#xff1a;以i位置元素为结尾的所有的子串里面&#xff0c;有多少个在base中出现过 2.状态转移方程 dp[i] 等于什么 如果是单个字母的子串&#xff0c;肯定会在base中出现&#xff0c;所以…

一文详解!appium自动化测试

目录 前言&#xff1a; Appinum前置知识 Andriod SDK 元素获取—UI Automator adb命令实践 adb常用命令 小结 Package与Activity Activity页面布局元素 monkey简介 monkey事件 操作事件简介 monkey参数 事件类参数 约束类参数 调试类参数 Monkey参数应用综合案…

生成式AI - 关键技术历史和发展

✈️当谈及生成式人工智能&#xff08;AI&#xff09;&#xff0c;我们进入了一个令人惊叹的领域&#xff0c;它不仅改变了我们与技术的互动方式&#xff0c;而且极大地推动了人工智能的发展。通过模仿人类创造力和想象力的能力&#xff0c;生成式AI引领着我们走向了全新的可能…

re模块

目录 ❤ 正则表达式 常用正则 字符组 字符 量词 ❤ 正则表达式的使用 . ^ $ * ? { } 字符集&#xff3b;&#xff3d;&#xff3b;^&#xff3d; 分组 ()与 或 &#xff5c;&#xff3b;^&#xff3d; 转义符 \ 贪婪匹配 ❤ re模块 常量、属性 常用方法 re.co…

echarts图表 的X轴添加滚动条

1&#xff1a;原图 2&#xff1a;代码 dataZoom [{orient: horizontal,show: scoreShow,//控制滚动条显示隐藏realtime: true, //拖动滚动条时是否动态的更新图表数据height: 5, //滚动条高度start: 0, //滚动条开始位置&#xff08;共6等份&#xff09;end: this.endValue,//…

复杂业务系统的通用架构设计法则

一、什么是复杂系统 我们经常提到复杂系统&#xff0c;那么到底什么是复杂系统。我们看下维基的定义&#xff1a;复杂系统&#xff08;英语&#xff1a;complex system&#xff09;&#xff0c;又称复合系统&#xff0c;是指由许多可能相互作用的组成成分所组成的系统。强调了…

Pytest教程__参数化(10)

pytest参数化有两种方式&#xff1a; mark的parametrize标记&#xff1a;pytest.mark.parametrize(变量名&#xff0c;变量值)&#xff0c;其中变量值类型为列表、元组或其它可迭代对象。fixture的params参数&#xff1a;pytest.fixture(params变量值)&#xff0c;其中变量值类…