博主 WangTx's Blog
博主 2024年12月30日 在线自豪地使用 Typecho 建站搭配使用 🌻Sunny 主题当前在线 4 人
歌曲封面 未知作品
  • 歌曲封面现在 你才不幸福河南说唱之神
  • 歌曲封面夜晚打灯我找不到爱河南说唱之神
  • 歌曲封面工厂河南说唱之神
  • 歌曲封面芳草地DIGI GHETTO

网站已运行 273 天 13 小时 11 分

Powered by Typecho & Sunny

5 online · 27 ms

Title

CMAC解析

信鸽

·

杂谈

·

Article
⚠️ 本文最后更新于2024年06月03日,已经过了233天没有更新,若内容或图片失效,请留言反馈

流程

CMAC(Cipher-based Message Authentication Code,基于密码的消息认证码)是一种通过对称加密算法生成消息认证码(MAC)的技术,用于验证数据的完整性和真实性。以下是CMAC的详细流程:

1. 密钥生成

首先,生成一个对称密钥 𝐾K,这个密钥用于整个CMAC的计算过程。

2. 初始化

初始化阶段使用密钥 𝐾K 和特定的加密算法(例如AES)来生成两个子密钥 𝐾1K1​ 和 𝐾2K2​。

  • 计算 𝐾1K1​:

    • 使用密钥 𝐾K 对一个全零的块进行加密,得到结果 𝐿L。
    • 通过左移操作和条件异或操作生成 𝐾1K1​。
  • 计算 𝐾2K2​:

    • 通过左移 𝐾1K1​ 并进行条件异或操作生成 𝐾2K2​。

3. 块处理

将输入消息 𝑀M 分成多个块,每块大小等于加密算法的块大小(例如128位)。假设消息 𝑀M 被分成 𝑛n 个块 𝑀1,𝑀2,…,𝑀𝑛M1​,M2​,…,Mn​。

  • 如果最后一个块的长度不足一个完整块,进行填充操作。
  • 对每个块进行处理:

    • 使用密钥 𝐾K 对第一个块进行加密。
    • 对后续的每个块,首先与前一块的加密结果进行XOR操作,然后再使用密钥 𝐾K 进行加密。

4. 最终化

处理最后一个数据块:

  • 如果最后一个块长度为完整块,使用 𝐾1K1​ 进行异或操作。
  • 如果最后一个块长度不足一个完整块,先进行填充,然后使用 𝐾2K2​ 进行异或操作。

将上述结果再进行一次加密,得到最终的CMAC值。

步骤总结

  1. 密钥生成:生成并初始化对称密钥 𝐾K。
  2. 初始化:计算子密钥 𝐾1K1​ 和 𝐾2K2​。
  3. 块处理:将消息分块,每块进行XOR和加密处理。
  4. 最终化:处理最后一个数据块,生成最终的CMAC值。

CMAC通过这些步骤保证了数据的完整性和真实性,适用于多种加密算法,如AES。

image.png

case a :消息数据是 128bit 的整数倍,使用私密密钥 k1 生成 MAC(T);

case b:消息数据不能整除,使用私密密钥 k2 生成 MAC(T);

私密密钥的生成又是按照如下方式生成:

  1. 初始向量 IV(0) + 原始 key,使用 AES-128-CBC,生成一个中间输出 L;
  2. 判断该 L 最高位是否等于 0;如果等于 0,k1 = L <<1;否则,k1 = (L << 1)XOR 0x87(Rb_const);
  3. 判断 k1 的最高位是否等于 0;如果等于 0,k2 = k1 <<1;否则,k2 = (L << 1)XOR 0x87(Rb_const);
    image.png

C实现

![[test_cmac.c]]

结果:

♾️ txt 代码:

--------------------------------------------------
K              3d2e6de2 a12517ba c5b31bbd 0e7e3b54 

Subkey Generation
AES_128(key) 3fb57abc bb53101d 5cad5547 bed7d0b3 
K1             7f6af579 76a6203a b95aaa8f 7dafa166 
K2             fed5eaf2 ed4c4075 72b5551e fb5f42cc 

Example 1: len = 0
M              <empty string>
AES_CMAC       f9e658f2 443fa51b 1cabd200 513486c1 

Example 2: len = 16
M              00112233 44556677 8899aabb ccddeeff 
AES_CMAC       a51eb807 bc447f92 fa33b569 9acb4cdf 

Example 3: len = 40
M              00112233 44556677 8899aabb ccddeeff 
               ae2d8a57 1e03ac9c 9eb76fac 45af8e51 
               30c81c46 a35ce411 
AES_CMAC       b62e4ee4 4a0f0802 04cc0f07 60b538c0 

Example 4: len = 64
M              00112233 44556677 8899aabb ccddeeff 
               ae2d8a57 1e03ac9c 9eb76fac 45af8e51 
               30c81c46 a35ce411 e5fbc119 1a0a52ef 
               f69f2445 df4f9b17 ad2b417b e66c3710 
AES_CMAC       b4963c38 9cbf399c d0755ff4 29234acd 
--------------------------------------------------

Autosar 实现

现在已有 41 次阅读,0 条评论,0 人点赞
Author:信鸽
作者
CMAC解析
当前文章累计共 2492 字,阅读大概需要 2 分钟。
CMAC解析
2024年6月3日 · 0评论
RH850-U2A MPU配置
2024年6月3日 · 0评论
Comment:共0条
发表
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主 不再显示
博主