什么是散列和MAC(消息authentication码)之间的区别?

什么是散列和MAC(消息authentication码)之间的区别?

通过他们的定义,他们似乎起到了相同的作用。

有人可以解释有什么不同吗?

主要的区别是概念上的,而哈希用来保证数据的完整性, MAC保证完整性和validation。

这意味着哈希码是从消息中盲目生成的,没有任何外部input:你得到的东西是可以用来检查消息在旅行中是否有任何改变的东西。

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

根据维基百科你有这样的:

MACfunction与encryption散列函数类似,但它们具有不同的安全性要求。 为了保证安全,MACfunction必须在select明文攻击下抵制存在伪造。 这意味着,即使攻击者访问拥有密钥并为攻击者select的消息生成MAC的攻击者,攻击者也不能为其他消息猜测MAC而不执行不可计算的计算量。

当然,尽pipe它们有相似之处,但它们的实现方式却不同:通常,MAC生成algorithm是基于哈希码生成algorithm,其扩展名关注使用私钥。

哈希是一个从消息中产生摘要的函数。 一个密码安全的散列是计算不可行的生成一个给定的摘要消息。 消息散列本身并不提供关于给定消息的发送者的信息。 如果您可以安全地传递消息的散列,则可以使用它来validation是否通过不安全的传输正确接收了大消息。

消息authentication码是一种将共享密钥与消息组合的方式,使得消息的接收者可以authentication消息的发送者具有共享密钥,并且不知道该密钥的人可能已经发送或改变了消息。

HMAC是基于散列的消息authentication码。 通常这涉及将散列函数一次或多次应用于共享秘密和消息的某种组合。 HMAC通常是指RFC 2104或FIPS-198中logging的algorithm。

MAC不encryption消息,所以消息是纯文本的。 它不会泄露秘密密钥,因此MAC可以通过公开信道发送,而不会泄露密钥。

发现这从另一个论坛的点答案。

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

诚信:收信人可以确信邮件没有被意外修改吗?

身份validation:收件人可以确信邮件来自发件人吗?

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

密钥:原语是否需要共享密钥或公私密钥对? 我想这个简短的答案最好用一张表格来解释:

 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 

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

点击这里查看更多信息

基本上,主要区别是MAC使用私钥,哈希不使用任何密钥。 因为MAC允许我们实现authentication。

哈希函数(HASH FUNCTION):将任意长度的消息映射为固定长度哈希值的函数,用作validation者。

MAC:消息和密钥的函数,产生一个固定长度的值作为authentication者。

哈希是一个消息的摘要或指纹,既不提供完整性也不提供身份validation,因为它容易受到中间人攻击。 假设A想要将消息M与M的哈希H结合起来发送给B,取而代之的是C捕获消息并生成M2的消息M2和H 2,并将其发送给B。现在B不意味着可以validation这个是来自A的原始消息还是不是。 但是,哈希可以用于其他一些方式来实现完整性和身份validation,如MAC。

MAC也是消息的摘要提供了完整性和authentication。 MAC可以用许多方式来计算。 最简单的方法是使用具有两个input的散列函数,即消息和共享密钥。 使用共享密钥将身份validationfunction添加到MAC,从而提供完整性和身份validation。 然而,MAC仍然不提供不可否认性,因为具有共享密钥的任何一方都可以产生消息和MAC。 数字签名和公钥密码体制在这里起作用。

  1. 哈希函数使用非对称密码术,而MAC使用对称密码术。
  2. encryption散列函数并不总是一个MAC,但是MAC可以是encryption散列函数(密钥散列函数)。
  3. 哈希函数在MAC不提供不可否认的情况下提供不可否认性