【问题标题】:Why do I need HMACs when we do have public key signatures?当我们确实有公钥签名时,为什么我需要 HMAC?
【发布时间】:2013-01-17 05:19:45
【问题描述】:

序言:我对 HMAC 很陌生,所以如果问题有点愚蠢,请原谅我。

据我了解,HMAC 用于确保消息未被篡改。所以基本上,它作为一个哈希码。但是,由于散列算法是已知的,攻击者可以很容易地为消息的篡改版本计算出新的散列码。

这就是 HMAC 试图解决的问题:它们提供的散列不仅基于要散列的消息,还基于加密密钥。这样就不可能在不知道密钥的情况下计算消息的有效值。

目前为止是这样吗?

我现在的问题是:如果我们可以使用公钥签名实现相同的目标,我们需要 HMAC 做什么? IIRC 签名的工作方式完全相同:计算哈希并对其进行签名以确保没有人篡改消息或哈希。

那么 HMAC 的意义何在?

【问题讨论】:

    标签: cryptography public-key-encryption hmac


    【解决方案1】:

    与同等安全级别的任何已知公钥操作相比,HMAC 的大小更小,计算和验证所需的 CPU 更少。

    【讨论】:

    • 好的,但从概念上讲是一样的吗?
    • 不,不是。公钥签名将身份与签名相关联,该签名可以由没有共享秘密的人检查。 HMAC 只允许与您有共享秘密的人检测到篡改。
    • 这就是你通常所做的。您使用 AES 等对称密码进行加密/解密,使用 HMAC 进行验证或检测篡改。如果您没有共享密钥,您可以使用一些公钥操作来获取一个。密码原语很少单独使用。
    • @golo-roden 由 itelf 提供的 AES 不知道是否有任何字节被删除或修改,这是 MAC 的功能; HMAC是MAC的一种。 CMAC 是另一种可以完全使用 AES 构建的 MAC。但是,HMAC 更广泛且更易于使用。
    • @GoloRoden 加密提供机密性,mac 提供身份验证并防止修改。在实践中,您应该使用某种经过身份验证的加密,它结合了密码和 mac。
    猜你喜欢
    • 2018-06-14
    • 2019-04-07
    • 2023-01-24
    • 2021-11-05
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多