Security 什么';消息摘要、消息身份验证代码和HMAC之间的区别是什么?

Security 什么';消息摘要、消息身份验证代码和HMAC之间的区别是什么?,security,hmac,message-digest,Security,Hmac,Message Digest,我对消息摘要的理解是,它是与加密数据一起发送的一些数据的加密散列,因此您可以验证数据是否未被篡改。那么,这与消息身份验证码(MAC)和哈希MAC(HMAC)有什么区别呢? 消息摘要只是消息的散列。它是应用于输入数据的加密哈希函数的输出,称为消息 消息身份验证码(MAC)是证明消息完整性且不易伪造的信息 HMAC是由定义的一种特定类型的MAC 维基百科有很好的文章涵盖了所有这些术语:参见和。 消息摘要算法接受单个输入—消息—并生成“消息摘要”(也称为哈希),允许您验证消息的完整性:消息的任何更改

我对消息摘要的理解是,它是与加密数据一起发送的一些数据的加密散列,因此您可以验证数据是否未被篡改。那么,这与消息身份验证码(MAC)和哈希MAC(HMAC)有什么区别呢?

  • 消息摘要只是消息的散列。它是应用于输入数据的加密哈希函数的输出,称为消息
  • 消息身份验证码(MAC)是证明消息完整性且不易伪造的信息
  • HMAC是由定义的一种特定类型的MAC
维基百科有很好的文章涵盖了所有这些术语:参见和。

  • 消息摘要算法接受单个输入—消息—并生成“消息摘要”(也称为哈希),允许您验证消息的完整性:消息的任何更改(理想情况下)都将导致生成不同的哈希。能够替换消息和摘要的攻击者完全能够使用新的有效对替换消息和摘要

  • MAC算法接受两个输入——一个消息和一个密钥——并生成一个MAC,允许您验证消息的完整性和真实性:消息或密钥的任何更改(理想情况下)都将导致生成不同的MAC。没有人能够访问这个秘密,应该能够生成一个MAC计算来验证;换句话说,MAC可用于检查MAC是否由有权访问密钥的一方生成
  • HMAC算法只是一种特定类型的MAC算法,它在内部使用哈希算法(而不是,例如,加密算法)来生成MAC

@Rook在这里是一句非常古老的话,但CMAC只是MAC的一种特殊形式。当然,使用AES-CMAC并没有什么不好的地方。@owlstead Your right,我感到困惑,因为有些库将其称为一种模式。“可以使用MAC来检查MAC是否生成了…”这不应该是“…检查消息是否生成了…”对于MAC,完整性和真实性都可以被证明,因为发送方和接收方共享一个公共密钥。