我正在寻找一个简单的描述,它告诉我如何计算hmac和cmac。到目前为止,我发现了以下情况:
cmac = aes_encryption(hash(message), key)
hmac = hash(key, message)
区别似乎是cmacs在哈希函数之外使用对称加密,而hmacs处理散列函数本身中的密钥。对吗?
在某些情况下,cmac应该被使用而不是hmac?
发布于 2021-04-02 13:09:02
区别似乎是cmacs在哈希函数之外使用对称加密,而hmacs处理散列函数本身中的密钥。对吗?
在CMAC中没有“正常”的抗碰撞散列。详情见下文。对于HMAC,利用哈希函数的内部元素来处理密钥,但是它可以将哈希函数用作黑匣子。
RFC 2104和NIST FIPS 198-1对HMAC进行标准化。HMAC的思想是开发哈希函数的通用梅尔克-达格路结构。这是通过首先使用预处理的键调用压缩函数来完成的,然后使用该状态正常地处理消息。最后,上一步的输出再次以与前一步中的原始消息相同的方式被用作消息,尽管这次使用的是不同的派生步骤。
CMAC是在NIST SP 800-38B中定义的,它有一个很好的图来解释模式:
其中\oplus
表示异或,K,K1,K2
是块密码,MSB操作是截断,D8
是通过多项式域加倍从主输入键导出的密钥。消息被划分为最多CIPH的块大小的块。
在某些情况下,cmac应该被使用而不是hmac?
是的,典型的建议是,如果您有一个密码的硬件加速,或者您希望最小化代码大小,并提供依赖于代码中的分组密码的其他功能。
https://crypto.stackexchange.com/questions/89154
复制相似问题