消息认证码(MAC)的实现原理

本文介绍了一种基于对称密钥块算法的MAC算法——CMAC。该算法通过NIST提供的800-38B标准文档,详细阐述了CMAC算法的原理及实现步骤,包括如何生成子密钥和计算消息认证码。

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

一般密码相关的算法,个人是很难实现的,我们可以参照权威机构提供的方案,我想说美国标准与技术研究院 ,NIST(National Institute of Standards and Technology)。

今天谈到的MAC,使用NIST提供的公开800-38B算法文档。这个MAC算法是基于对称密钥块算法,故称之为CMAC,还是使用了AES。

算法原理:

1,根据输入的key,产生两个子key

2,产生MAC值。

具体步骤:

产生sub key1与key2过程

1. Let  L = CIPHK(0b).
2. If MSB1(L) = 0, then K1 = L << 1;Else K1 = (L << 1) ⊕ Rb; see Sec. 5.3 for the definition of Rb.
3. If MSB1(K1) = 0, then K2 = K1 << 1;Else K2 = (K1 << 1) ⊕ Rb.
4. Return K1, K2.

其中CIPHK就是就是利用key对16字节的0进行对称加密。

产生CMAC的过程

1. Apply the subkey generation process in Sec. 6.1 to K to produce K1 and K2.
2. If Mlen = 0, let n = 1; else, let n = ⎡Mlen/b⎤.
3. Let M1, M2, ... , Mn-1, Mn * denote the unique sequence of bit strings such that M =M1 || M2 || ... || Mn-1 || Mn*, where M1, M2,..., Mn-1 are complete blocks.2
4. If Mn* is a complete block, let Mn = K1 ⊕ Mn*; else, let Mn = K2 ⊕ (Mn*||10j),where j = nb-Mlen-1.
5. Let C0 = 0b.
6. For i = 1 to n, let Ci = CIPHK(Ci-1 ⊕ Mi).
7. Let T = MSBTlen(Cn).
8. Return T.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敏哥搞wifi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值