哈希和MAC(消息认证码)之间有什么区别?

Rob*_*boy 50 hash cryptography terminology

哈希和MAC(消息认证码)之间有什么区别?

根据他们的定义,他们似乎具有相同的功能.

有人可以解释一下有什么区别吗?

Jac*_*ack 55

主要区别在于概念:虽然哈希用于保证数据的完整性,但MAC保证了完整性和身份验证.

这意味着在没有任何外部输入的情况下从消息中盲目地生成哈希码:您获得的是可用于检查消息在其传输期间是否有任何更改的内容.

MAC反而使用私钥作为生成代码时使用的散列函数的种子:这应该确保接收者不仅消息未被修改,而且发送者也是我们所期望的:否则攻击者无法知道用于生成代码的私钥.

根据维基百科你有:

虽然MAC功能类似于加密哈希函数,但它们具有不同的安全性要求.为了被认为是安全的,MAC功能必须抵抗选择明文攻击下的存在性伪造.这意味着即使攻击者可以访问拥有密钥并为攻击者选择的消息生成MAC的oracle,攻击者也无法在不执行不可行的计算量的情况下猜测其他消息的MAC.

当然,尽管它们有相似之处,但它们以不同的方式实现:通常MAC生成算法基于散列码生成算法,其具有关注使用私钥的扩展.

  • 对不起,这是什么意思,即使攻击者可以访问拥有密钥的oracle并为攻击者选择的消息生成MAC,**攻击者无法猜测其他消息的MAC**?如果攻击者可以访问拥有密钥的oracle,他也可以为其他消息生成MAC,将它们作为输入发送给oracle,不是吗? (4认同)
  • 现在其他一些人已经更改了这些定义:哈希函数不提供完整性,而身份验证就是我们现在所说的完整性(参见 crypto.stanford.edu/~dabo/cryptobook )。在我看来,这个改变是最好的 (2认同)

CB *_*ley 19

哈希是一种从消息中产生摘要的函数.加密安全散列是使用给定摘要生成消息在计算上不可行的.消息的散列本身不提供有关给定消息的发送者的信息.如果您可以安全地传达消息的散列,则可以使用它来验证是否通过不安全的传输正确接收了大消息.

消息认证码是一种将共享密钥与消息组合在一起的方式,以便消息的接收者可以认证消息的发送者具有共享密钥和不知道密钥的任何人.可能已经发送或更改了消息.

HMAC是基于散列的消息认证码.通常,这涉及将哈希函数应用于共享秘密和消息的某种组合一次或多次.HMAC通常引用RFC 2104或FIPS-198中记录的算法.

MAC不加密消息,因此消息是纯文本.它不会泄露密钥,因此可以在开放信道上发送MAC而不会泄露密钥.


kay*_*yle 10

从另一个论坛找到了这个答案.

这些类型的加密原语可以通过它们实现的安全目标来区分(在"附加到消息"的简单协议中):

完整性:收件人是否可以确信邮件未被意外修改?

身份验证:收件人是否可以确信邮件来自发件人?

不可否认性:如果收件人将邮件和证据传递给第三方,第三方是否可以确信邮件来自发件人?(请注意,我在谈论加密意义上的不可否认性,而不是在法律意义上.)同样重要的是这个问题:

密钥:原语是否需要共享密钥或公私密钥对?我认为简短的答案最好用表格解释:

Cryptographic primitive | Hash |    MAC    | Digital
Security Goal           |      |           | signature
------------------------+------+-----------+-------------
Integrity               |  Yes |    Yes    |   Yes
Authentication          |  No  |    Yes    |   Yes
Non-repudiation         |  No  |    No     |   Yes
------------------------+------+-----------+-------------
Kind of keys            | none | symmetric | asymmetric
                        |      |    keys   |    keys
Run Code Online (Sandbox Code Playgroud)

请记住,对所使用的密钥没有信心的认证是无用的.对于数字签名,收件人必须确信验证密钥实际上属于发件人.对于MAC,收件人必须确信共享对称密钥仅与发件人共享.

点击这里获取更多信息


小智 5

HASH FUNCTION:将任意长度的消息映射为固定长度的哈希值的函数,作为验证器。

MAC:消息和密钥的一个函数,它产生一个固定长度的值作为验证器。


Ish*_*ain 5

哈希是消息的摘要或指纹,本身既不提供完整性也不提供身份验证,因为它容易受到中间人攻击。假设A想要发送一条消息M,结合M的哈希H,给B。相反,C捕获该消息并生成消息M2和M2的哈希H2,并将其发送给B。现在B绝不能验证这是否是否是来自 A 的原始消息。然而,散列可以用其他一些方式来实现完整性和认证,例如MAC。

MAC 也是消息的摘要,提供完整性和身份验证。MAC 可以通过多种方式计算。最简单的方法是使用具有两个输入(消息和共享密钥)的哈希函数。共享密钥的使用增加了MAC的认证能力,从而提供完整性和认证。然而,MAC 仍然不提供不可否认性,因为拥有共享密钥的任何一方都可以生成消息和 MAC。数字签名和公钥加密技术正在发挥作用。