两者均可用于验证消息的完整性。假设您拥有所需的原语(即,既需要密码又需要哈希函数的代码空间不是禁止的),那么是否有理由偏爱一个?在实践中,HMAC似乎被更广泛地使用,是由于密码还是社会原因?

#1 楼

HMAC首先出现在这里(RFC 2104是1997年发布的,而CMAC是2006年发布的),这足以解释其重要性。如果使用HMAC,您将更容易找到要进行测试以及与之进行互操作的测试向量和实现,这再次说明了持续的优势。成为事实上的标准非常重要。

在许多嵌入式系统上,人们可能期望HMAC比CMAC更快,因为散列函数通常比分组密码更快。如果平台包括针对特定块密码的某些硬件优化(例如,专用AES操作码),或者消息短(HMAC与哈希具有相同的渐近成本,但固定开销),或者您这样做,则情况并非如此。有些愚蠢的事情,例如选择慢速哈希函数作为HMAC的基础(例如Whirlpool)。与所有性能指标一样,需要采取实际措施才能得出任何明确的结论。

如果既需要加密又需要MAC,那么要做的聪明的事情不是HMAC或CMAC,而是使用经过身份验证的加密模式,该模式可以同时,同时以较低的成本(或至少希望如此)运行。通常的候选人是EAX和GCM。举行了CAESAR竞赛,目的是寻找新的,更好的AE(认证加密)密码。

评论


$ \ begingroup $
哈希通常比分组密码听起来快。毕竟,大多数散列都是基于分组密码构建的,并且比PRPness具有更高的要求。由于哈希通常基于ARX,可以在软件中有效实现,因此可能是历史性的意外,但这并不是哈希的固有属性。
$ \ endgroup $
– CodesInChaos
2014年4月22日在18:57



$ \ begingroup $
注意:SHA-1之类的MD哈希函数是基于分组密码构建的,但是以数据为密钥,显然可以提供更好的带宽。至少我们可以凭经验注意到SHA-3竞争产生的算法比同一个硬件上的所有AES候选算法都快得多。即使是基于AES的SHA-3候选对象(例如ECHO),也比同一台机器上的AES本身要快得多。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
2014年4月22日在19:08