MAC 与加密

信息安全 密码学 加密 验证
2021-08-31 14:42:26

我了解 MAC(例如 hmac_sha256 等)和对称加密(例如 rc4 等)之间的区别,但我的问题是 MAC 解决了使用加密没有什么优势?

我知道 MAC 用于验证消息是否来自预期的来源,并且不会通过使用密钥对消息进行散列处理而被篡改。

如果您使用 rc4(或任何其他算法,强度无关紧要)加密消息,那么这不会达到相同的结果,接收者仍然需要知道密钥来解密消息。

我能想到的唯一区别是MAC消息本身是纯文本的,因此消息的身份验证非常快。那么性能是唯一的区别吗?还是消息内容不保密,您只想验证它是否真实。

任何有关这两个概念的信息将不胜感激。

3个回答

加密提供机密性,MAC 提供完整性。单独使用加密会使您的消息容易受到仅密文攻击

一个例子会更清楚。假设您发送一条消息说:

M = "将 100 美元转入账户 591064"

发送者使用对称密钥可以加密消息并发送E(M)除了密钥持有者之外,没有人能够发送有效消息。你有保密保障。

但攻击者可以更改密文,使其在解密时说出其他内容。显然,信息越大,结构越多,在实践中执行起来就越困难。

现在,如果您使用 MAC 和加密,您将能够检测到密文的更改,因为 MAC 不会计算。在我们的示例中,如果您使用相同的密钥进行加密和 MAC,那么您可以将消息更改为:

M = "转账 100$ 到账户 591064|a46c0db15acdd36b4e92a82e5dc6c14f"

并加密,再次发送E(M)哈希是加密的(那是你的 MAC),消息是加密的(为了保密)。这样,即使您的消息是单个随机字节,您也无法在计算上更改密文并得出有效消息。

选择最佳哈希、加密和密钥长度是另一回事。

综上所述:

  • 加密本身不提供完整性
  • MAC(完整性)本身不提供机密性

您经常必须结合密码原语来实现许多安全属性。

@ixe013 解释得很好。加密和 MAC 用于不同的目的。

如果需要完整性,则需要使用 MAC。加密不提供完整性。

如果您需要保密,您需要使用两个加密和MAC。您可能认为在这种情况下加密就足够了(不需要 MAC),但您错了。请参阅不要在没有消息身份验证的情况下使用加密

也就是说,实际上你不应该推出自己的 crypto这意味着,除其他外,您不应该尝试构建某种密码原语组合来满足您的应用程序需求:您不应该考虑加密算法和消息身份验证代码的级别。这样做很容易出错,而且很少有必要。相反,您应该使用现有的经过严格审查的加密系统(TLS、GPG、SSH、OpenVPN、IPSec 等)来提供安全的通信通道或安全的存储系统。如果您这样做,现有的加密系统将为您处理这些细节。密码学家已经对这些细节做了奴隶,所以你不需要。

MAC 或身份验证标签(有时也称为签名,尽管我认为这太混乱了)可用于提供消息完整性消息真实性消息完整性意味着对手 - 或传输错误 - 在没有被接收者检测到的情况下无法更改消息。对于实物产品,我们称之为防篡改消息真实性表明消息来自持有密钥的发送者。请注意,双方都有相同的秘密。

实体身份验证有所不同:协议中各方的识别和身份验证通常依赖于非对称加密而不是对称加密。在 TLS 协议中,服务器通常使用私钥/证书对进行身份验证,而消息由使用对称会话密钥生成的身份验证标签保护。

大多数操作模式将允许攻击者对特定位进行更改。例如,在流行的计数器模式(CTR 模式)中,任何位都可以翻转,这将导致明文中相同位置的位翻转。对于 CBC 模式,将更改更多位,但解密和未填充仍然不受影响(除非最后一个密文块发生显着更改)。其他答案之一低估了通过更改密文来局部更改明文的可能性。

通常,MAC 用于密文而不是明文。原因之一是某些操作模式(例如带有 PKCS#7 填充的 CBC)本身就很容易受到攻击。如果填充或明文预言是可能的,CBC 实际上可能允许攻击者检索所有明文,甚至无需攻击密码或获取有关密钥的信息。有关更多信息,请参阅有关 MAC-then-encrypt 和 encrypt-then-MAC 的问题

MAC 需要在密文和随机数或 IV 上。如果排除了 IV 或 nonce,明文仍可能被对手更改(当然,如果该对手可以访问)。


通常我们会尝试使用经过身份验证的密码或 AEAD 密码。这些密码将自动在验证中包含任何 nonce 或 IV,因此它们应该完全保护明文。

此外,他们可能会使用一个快速的 MAC,当它自己使用时是不安全的,但如果它被密码组合起来是安全的。这些更快的密码的例子是 ChaCha20/Poly1305 和 AES-GCM。例如,两者都包含在 TLS 1.3 中。

甚至还有受 IP 限制的 OCB 模式,它只需要对明文进行一次密码传递即可加密并提供完整性/真实性。Keccak 海绵(用于 SHA-3)也可用于认证模式。


请注意,MAC 本身并不能防止所有攻击。例如,如果在传输协议中使用它,则如果使用相同的密钥,则可能会重播消息。此外,由于 MAC 还依赖于对称密钥,因此可能会捕获从 A 到 B 的消息并将其发送回 A。

由更高级别的协议来防范这种情况。这也是交通安全难的原因之一。对于通用传输协议,仅应用 MAC 是不够的。对于传输安全,请使用 TLS、SSH 或其他已建立的安全传输层。