散列和 MAC (讯息鑑别码)的区别是什么?

散列和 MAC (讯息鑑别码)的区别是什么?

按照他们的定义,它们似乎起着同样的作用。

有人能解释一下有什么不同吗?

106113 次浏览

散列是从消息生成摘要的函数。对于加密安全的散列,使用给定摘要生成消息在计算上是不可行的。消息的散列本身不提供有关给定消息的发件人的信息。如果可以安全地传递消息的散列,那么可以使用它来验证大型消息是否通过不安全的传输正确接收。

讯息鑑别码是将共享密钥和消息结合起来的一种方式,这样消息的接收者就可以验证消息的发送者拥有共享密钥,而不知道秘钥的人可以发送或更改消息。

HMAC 是一种金钥杂凑讯息鑑别码。通常,这涉及到对共享秘密和消息的某种组合应用一次或多次散列函数。HMAC 通常指的是 RFC 2104或 FIPS-198中记录的算法。

MAC 不对消息进行加密,因此消息是纯文本的。它不会泄露密钥,因此 MAC 可以通过开放通道发送,而不会泄露密钥。

主要的区别是概念上的: 大麻用于保证数据的完整性,而 MAC保证完整性和身份验证。

这意味着从消息中盲目地生成散列码,而不需要任何外部输入: 您获得的是可用于检查消息在传输过程中是否有任何更改的内容。

MAC 在生成代码时使用私钥作为散列函数的种子: 这应该可以保证接收方,不仅消息没有被修改,而且发送消息的人也是我们所期望的: 否则攻击者不可能知道用于生成代码的私钥。

根据维基百科,你有:

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

当然,尽管它们有相似之处,但它们是以不同的方式实现的: 通常,MAC 生成算法是基于哈希码生成算法,扩展后的算法需要使用私钥。

  1. 散列函数使用非对称加密,而 MAC 使用对称加密。
  2. 加密哈希函数并不总是 MAC,但 MAC 可以是加密哈希函数(键哈希函数)。
  3. 在 MAC 不提供 non-re 的情况下,散列函数提供不可否认性

主要区别在于 MAC 使用私钥,而 hash 不使用任何密钥。因为 MAC 允许我们实现身份验证。

HASH 函数: 将任意长度的消息映射到固定长度的哈希值中的函数,该哈希值用作身份验证器。

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

从另一个论坛找到了这个问题的答案。

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

Integrity: Can the recipient be confident that the message has not been accidentally modified?

Authentication: Can the recipient be confident that the message originates from the sender?

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

密钥: 原语是否需要一个共享的密钥,或者公私密钥对?我认为简短的回答最好用一张表来解释:

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

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

点击这里了解更多信息

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

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