CMAC算法介绍

CMAC是一种基于对称秘钥分组加密算法如AES、DES的消息认证码,使用CBC模式。文章介绍了CMAC的子秘钥生成步骤,包括对0块的加密和根据最高位确定K1和K2的过程,以及如何根据消息块是否完整来计算MAC值的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

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 值 输出。

请添加图片描述

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

详细介绍了AES-CMAC算法的原理与实现,附有C语言写的样例程序。 以下是原文的introduction: The National Institute of Standards and Technology (NIST) has recently specified the Cipher-based Message Authentication Code(CMAC). CMAC [NIST-CMAC] is a keyed hash function that is based on a symmetric key block cipher, such as the Advanced Encryption Standard [NIST-AES]. CMAC is equivalent to the One-Key CBC MAC1 (OMAC1) submitted by Iwata and Kurosawa [OMAC1a, OMAC1b]. OMAC1 is an improvement of the eXtended Cipher Block Chaining mode (XCBC) submitted by Black and Rogaway [XCBCa, XCBCb], which itself is an improvement of the basic Cipher Block Chaining-Message Authentication Code (CBC-MAC). XCBC efficiently addresses the security deficiencies of CBC-MAC, and OMAC1 efficiently reduces the key size of XCBC. AES-CMAC provides stronger assurance of data integrity than a checksum or an error-detecting code. The verification of a checksum or an error-detecting code detects only accidental modifications of the data, while CMAC is designed to detect intentional, unauthorized modifications of the data, as well as accidental modifications. AES-CMAC achieves a security goal similar to that of HMAC [RFC-HMAC]. Since AES-CMAC is based on a symmetric key block cipher, AES, and HMAC is based on a hash function, such as SHA-1, AES-CMAC is appropriate for information systems in which AES is more readily available than a hash function. This memo specifies the authentication algorithm based on CMAC with AES-128. This new authentication algorithm is named AES-CMAC.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值