哈希与消息认证码(MAC)有何区别?
从定义上来看,它们似乎具有相同的功能。
有人能够解释一下它们之间的区别吗?
哈希与消息认证码(MAC)有何区别?
从定义上来看,它们似乎具有相同的功能。
有人能够解释一下它们之间的区别吗?
哈希是一种从消息中产生摘要的函数。一个具有密码学安全性的哈希功能是,对于给定摘要生成一条消息在计算上是不可行的。仅凭一条消息的哈希值无法确定发送者身份。如果您可以安全地传递消息的哈希,则可以用它来验证通过未安全传输接收到的大型消息是否正确。
消息认证码是一种将共享的密钥与消息结合起来的方法,以便消息的接收方可以验证消息发送者拥有共享密钥以及不知道密钥的人不能发送或更改消息。
HMAC是基于哈希的消息认证码。通常,这涉及将哈希函数应用一次或多次到共享密钥和消息的某些组合中。HMAC通常指RFC 2104或FIPS-198中记录的算法。
MAC不会加密消息,因此消息以明文形式存在。它不会泄露密钥,因此可以在开放的通道上传递MAC而不会造成密钥被泄漏的风险。
在另一个论坛上找到了这个直截了当的答案。
这些类型的密码原语可以通过它们实现的安全目标(在“附加到消息”的简单协议中)来区分:
完整性: 收件人能否确信消息没有被意外修改?
认证: 收件人能否确信消息来自发件人?
不可抵赖性: 如果收件人将消息和证据传递给第三方,第三方能否确信消息来自发件人?(请注意,我谈论的是密码学意义上的不可抵赖性,而不是法律意义上的不可抵赖性。)此外,这个问题也很重要:
密钥: 原语是否需要共享的秘密密钥或公私钥对?我认为这个问题的简短回答可以用一个表格来解释:
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,接收者必须确信共享的对称密钥仅与发送者共享。
点击此处了解更多信息哈希函数:将任意长度的消息映射为固定长度的哈希值的函数,该哈希值用作鉴别器。
MAC:消息和秘密密钥的函数,生成固定长度的值,用作鉴别器。
基本上,主要的区别是MAC使用私钥而哈希不使用任何密钥。因此,由于MAC允许我们实现身份验证。