首页 > 代码库 > 消息认证码(MAC)的实现原理

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

一般密码相关的算法,个人是很难实现的,我们可以参照权威机构提供的方案,我想说美国标准与技术研究院 ,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.