原理区别是什么?其他?(典型用例)
#1 楼
正如克里斯·史密斯(Chris Smith)在评论中指出的那样,HMAC是一种特定的MAC算法(或者更确切地说,是一种根据密码哈希函数构造MAC算法的方法)。因此,HMAC可以用于需要MAC算法的任何应用。专门要求HMAC的一个可能原因(与仅通用MAC算法相反)是,HMAC构造实际上提供了(只要因为基础哈希函数满足适当的假设)比MAC要求的安全性要强。例如,安全MAC算法的定义(在选择明文攻击下抵抗存在的伪造)中没有任何内容表明MAC输出无法向攻击者透露有关明文的信息。如果明文是秘密的,但MAC是公开的,那显然是不好的。但是,只要底层哈希函数是安全的,就可以保证HMAC不泄露任何有关明文的信息。
特别地,Bellare已证明HMAC是一个伪随机函数(PRF),它具有以下特征:只要基础哈希的压缩函数也是PRF,并且只要基础哈希的压缩函数也是PP-MAC,就可以使用“隐私保护MAC”(PP-MAC)。与纯MAC相比,这两者都是严格更强的安全性。特别是,成为PRF是非常强大的安全属性-本质上说,攻击者没有实际的方法可以根据输入对函数的输出说任何话,反之亦然,除非明显的事实是相同的输入总是产生相同的输出。在许多情况下,PRF都可以使用,而普通MAC可能不会。用安全哈希函数实例化的HMAC可以用于那些。
同样,正如克里斯所说,其他一些MAC算法也需要随机IV来保证安全。 HMAC不需要,因此即使在需要确定性输出或必须将消息保持尽可能短的情况下也可以使用它。
关于为什么您不希望使用HMAC的原因,原因之一是它并未真正针对速度进行优化。专用MAC功能(尤其是基于通用哈希(卡特-韦格曼构造)的功能,例如UMAC和VMAC)可以显着提高。此外,基于块密码的MAC(例如CMAC)在有限的平台上非常有用,在有限的平台上可以使用有效的块密码原语(例如AES),但没有安全的哈希功能。
#2 楼
之前未提及的其他内容:提醒构造具有压缩功能的Merkle Damgard Hash(例如MD5,SHA1,2-感谢指出我的误解@Ilmari Karonen):
在以下描述中,函数Hmd将是通过MD构造的Hashfunktion。 MAC(k,m)将是通过以一种或多种方式使用Hmd保护消息完整性的功能。
方案
Bob正在发送受完整性保护的消息到爱丽丝:
Bob ---- m, MAC(k,m) ----> Alice
案例1:MAC(k,m)= HMD(k,m)
女人是女人中间并捕获
m
和MAC(k,m)
。现在Mallory可以将
m
扩展到m' = m || mean_extension
并使用MAC'(m')
创建MAC'(m') = f (MAC(k,m), mean_extention)
,其中f是用于Merkle Damgard的压缩函数。当Mallory转发她生成的消息:如上构造的
(m', MAC'(m'))
,Alice无法确定欺诈。 MAC对她来说是真实的,因为它是真的。所以:
f (MAC (k,m), mean_extention) == MAC (k, m || mean_extension)
成立,MAC是简单的Merkle Damgard Hashfunktion。情况2:MAC(k, m)= HMAC(k,m)= HMD(k || opad,HMD(k || ipad,m))
现在,MAC的结构无法提供攻击坏消息的可能性
这意味着:
f (MAC (k,m), mean_extension) != MAC(k, m || mean_extension)
与案例1相反,因为MAC现在是按上述标题构造的HMAC。评论
$ \ begingroup $
这更像是对我这个问题的答案。 (此外,为纠正您的括号,Merkle-Damgård哈希函数仍被广泛使用,最著名的例子是NIST仍然推荐SHA-2系列以及较新的SHA-3。)
$ \ endgroup $
–伊尔马里·卡洛宁(Ilmari Karonen)
18-3-13在23:19
$ \ begingroup $
你是完全正确的,我的大脑欺骗了我。谢谢,我将对此进行编辑。
$ \ endgroup $
– Jan
18 Mar 14 '18 at 11:55
$ \ begingroup $
实际上,这里的问题也可能是您所链接的那个问题的重复(反之亦然)。
$ \ endgroup $
– Jan
18 Mar 14 '18 at 12:01
$ \ begingroup $
另一个问题仅询问基于散列函数构造MAC的不同方式的安全性。有很多与哈希无关的MAC。例如,CBC-MAC / CMAC / PMAC基于分组密码,而UMAC / VMAC / Poly1305和其他Carter-Wegman样式MAC在有限域中使用多项式求值。
$ \ endgroup $
–伊尔马里(Ilmari Karonen)
18-3-14在12:18
评论
HMAC是一种MAC算法。术语MAC算法是指对消息进行身份验证的任何算法。除了HMAC之外,还有其他MAC算法,例如VMAC。@ChrisSmith-谢谢,我理解...所以更新我的问题,HMAC函数的典型用例是什么?
与其他任何MAC算法相同。 HMAC的另一个优点是它不需要MAC IV。它的典型用法与任何其他MAC算法相同,例如,确保传输消息的真实性和完整性。