MAC是一种消息认证码算法,也是一种带有秘密密钥的Hash函数,在互联网中应用的十分广泛。MAC算法还有很多分类,除了我们了解过的HMAC之外,CMAC也比较常见的一种。下面我们就一起来了解一下CMAC算法。

CMAC的简介

CMAC简单来说就是基于分组密码的MAC。它是人们在CBC-MAC基础上所设计的,CMAC为了解决非固定长度消息的安全性问题,CMAC会通过密钥扩展出两个子密钥,子密钥会在最后一个消息分组加密前参与运算。CMAC的计算过程主要分为三部分,分别是子密钥生成、消息认证码的生成和验证消息认证码。

CMAC

CMAC的计算过程

初始化:选择一个合适的密钥K,然后对密钥进行预处理。预处理过程中会使用两个子密钥K1和K2,用于后续计算。

填充:将消息按照加密块的长度进行填充,使其长度为加密块长度的整数倍。填充方式可以选择ISO/IEC 9797-1 Padding Method 2或者PKCS#5/PKCS#7 等标准的填充方式。

分块:将填充后的消息按照加密块的长度进行分块。

计算中间值:对于最后一个消息块,如果长度等于加密块的长度,则需要额外进行一次XOR运算。然后,将这个块和 K1 进行异或运算,得到中间值M。

计算CMAC:对于每个消息块,都需要进行以下步骤:

  1. 将消息块和中间值 M 进行异或操作,得到结果R。
  2. 使用密钥 K 对 R 进行加密,得到结果C。
  3. 将C作为下一个消息块的中间值M。

输出结果:当所有消息块都计算完成后,将最后一个结果C输出作为CMAC。

在CMAC的计算过程中,预处理密钥是必须的,它会生成两个子密钥K1和K2。这两个子密钥的作用是用于计算最后一个消息块的中间值M和将每个消息块与中间值进行异或操作。对于不同的加密算法,预处理密钥的生成方式也不同,例如对于AES算法,需要进行密钥扩展和选择子密钥的过程。

CMAC

HMAC与CMAC

HMAC是基于Hash的MAC,而CMAC是基于分组密码的MAC,可以简单理解为他们都是MAC,都是做消息认证用的,只是他们的实现方式不一样。因为HMAC是基于Hash的,计算起来会快一点。

免责声明:素材源于网络,如有侵权,请联系删稿。