CMAC与HMAC的原理与区别
时间: 2024-06-08 22:05:22 浏览: 470
CMAC.pdf.7z
CMAC(Cipher-based message authentication code)和HMAC(Hash-based message authentication code)都是消息认证码,用于保证消息的完整性、真实性和不可抵赖性。它们的原理和区别如下:
CMAC的原理:
CMAC是基于对称加密算法的一种消息认证码,它使用一个固定长度的密钥和对称加密算法(如AES)来生成消息认证码。CMAC的生成过程分为两个阶段:预处理阶段和输出阶段。
预处理阶段:
1. 对密钥进行扩展,得到两个子密钥K1和K2。
2. 如果消息长度小于等于分组长度,则直接在消息后面填充一些数据,使得消息长度等于分组长度;如果消息长度大于分组长度,则对消息进行分组,最后一组填充一些数据,使得最后一组长度等于分组长度。
输出阶段:
1. 初始化一个缓冲区B为0,将第一个分组与K1异或后,使用对称加密算法进行加密,得到一个中间值M0。
2. 如果消息只有一个分组,则将M0与K2异或后,使用对称加密算法进行加密,得到最终的消息认证码。
3. 如果消息有多个分组,对于第i个分组,将它与Mi-1异或后,使用对称加密算法进行加密,得到Mi。
4. 对于最后一个分组,将Mi与K2异或后,使用对称加密算法进行加密,得到最终的消息认证码。
HMAC的原理:
HMAC是基于哈希函数的一种消息认证码,它使用一个密钥和哈希函数来生成消息认证码。HMAC的生成过程分为两个阶段:预处理阶段和输出阶段。
预处理阶段:
1. 如果密钥长度大于哈希函数输出长度,则对密钥进行哈希得到一个长度等于哈希函数输出长度的密钥。
2. 如果密钥长度小于哈希函数输出长度,则在密钥后面填充0,直到密钥长度等于哈希函数输出长度。
3. 对密钥进行异或运算,得到两个子密钥K1和K2。
输出阶段:
1. 对于要认证的消息M,将它与K1异或后,使用哈希函数进行哈希,得到一个中间值M0。
2. 如果消息只有一个分组,则将M0与K2异或后,使用哈希函数进行哈希,得到最终的消息认证码。
3. 如果消息有多个分组,对于第i个分组,将它与Mi-1异或后,使用哈希函数进行哈希,得到Mi。
4. 对于最后一个分组,将Mi与K2异或后,使用哈希函数进行哈希,得到最终的消息认证码。
区别:
1. CMAC使用对称加密算法,而HMAC使用哈希函数。
2. CMAC的密钥扩展过程与HMAC不同。
3. CMAC的中间值Mi是使用对称加密算法加密得到的,而HMAC的中间值Mi是使用哈希函数哈希得到的。
4. CMAC和HMAC都能够保证消息的完整性、真实性和不可抵赖性,但是CMAC的安全性更高一些,因为它能够防止更多种类的攻击。
阅读全文