信息摘要、消息认证码和HMAC有什么区别?

66

我理解的消息摘要是一种加密哈希值,随着加密数据一起发送,以便您可以验证数据未被篡改。那么,这与消息认证码(MAC)和哈希MAC(HMAC)有什么区别呢?

我的理解消息认证码(MAC)和哈希MAC(HMAC)是使用密钥和哈希算法来生成一个比消息摘要更强的校验值,以验证数据的完整性和真实性,并且在保密性和效率方面也具有优势。
2个回答

114
一个消息摘要算法只需要一个输入——消息,并生成一个“消息摘要”(也称哈希),用于验证消息的完整性:对消息进行任何更改将(理想情况下)导致生成不同的哈希值。攻击者可以替换消息和摘要,用新的有效组合替换消息和摘要的攻击者是完全有能力做到的。
MAC算法需要两个输入——消息和秘密密钥——并生成MAC,这允许您验证消息的完整性和真实性:对消息或秘密密钥进行任何更改将(理想情况下)导致生成不同的MAC。没有访问该密钥的人应该能够生成验证的MAC计算;换句话说,MAC可用于检查MAC是否由具有秘密密钥访问权限的一方生成。
HMAC算法仅仅是一种使用哈希算法(而不是例如加密算法)内部生成MAC的特定类型的MAC算法。

@Rook 这里是一个非常老的评论,但是CMAC只是MAC的一种特定形式。当然,使用AES-CMAC也没有任何问题。 - Maarten Bodewes
1
@owlstead 没错,我有点困惑,因为一些库将其称为模式。 - rook
1
“MAC可以用来检查MAC是否生成...” 难道不应该是“...检查消息是否生成...”吗? - leonbloy

23
  • 消息摘要是指对消息进行散列的结果。它是应用于输入数据,即所谓的消息的加密哈希函数的输出。
  • 消息认证码(MAC)是一种证明消息完整性且不易伪造的信息。
  • HMAC是由RFC 2104定义的特定类型的MAC。

维基百科有很好的文章涵盖这些术语:请参见消息摘要消息认证码HMAC


1
对于MAC,完整性和真实性都可以得到证明,因为发送方和接收方共享一个秘密密钥。 - nsg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接