代码之家  ›  专栏  ›  技术社区  ›  Robben_Ford_Fan_boy

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

  •  48
  • Robben_Ford_Fan_boy  · 技术社区  · 16 年前

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

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

    7 回复  |  直到 12 年前
        1
  •  71
  •   Jack    16 年前

    主要的区别是概念上的:虽然 散列 用于保证数据的完整性 雨衣 保证完整性和身份验证。

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

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

        2
  •  21
  •   CB Bailey    16 年前

    散列是从消息生成摘要的函数。密码学上安全的散列是指在计算上无法生成具有给定摘要的消息的散列。消息散列本身不提供有关给定消息的发送者的信息。如果您可以安全地传递消息的散列,则可以使用它来验证是否已通过不安全的传输正确接收到大消息。

    消息验证码是一种将共享密钥和消息相结合的方法,这样消息的接收者就可以验证消息的发送者是否拥有共享密钥,而不知道该密钥的任何人都不可能发送或更改消息。

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

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

        3
  •  14
  •   Community Mohan Dere    9 年前

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

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

    完整性: 收件人能确信邮件没有被意外修改吗?

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

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

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

    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
    

    Click here for more info

        4
  •  5
  •   Anu    11 年前

    散列函数:将任意长度的消息映射为固定长度的散列值的函数,用作身份验证器。

        5
  •  4
  •   Tharindu Kumara    12 年前

    基本上主要的区别是MAC使用私钥,hash不使用任何密钥。因为MAC允许我们实现身份验证。

        6
  •  3
  •   Ishtiaq Hussain    9 年前

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

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

        7
  •  -8
  •   Mohit Bhansali    13 年前
    1. 哈希函数使用非对称加密,而MAC使用对称加密。
    2. 加密哈希函数并不总是MAC,但是MAC可以是加密哈希函数(键控哈希函数)。
    3. 哈希函数提供不可抵赖性,而MAC不提供不可抵赖性
    推荐文章