HMAC相较于对称加密有哪些优势?

10
不知何故,我不理解HMAC。
我曾经问过“为什么我们需要HMAC,而我们已经拥有公钥签名?”(链接至Stack Overflow),我认为我懂了一些。更容易计算等等...
但是,我不明白的是为什么我们需要HMAC,或者说它们解决了什么问题。
从我的理解来看,HMAC...
  • 提供了一种确保消息未被篡改的方法,
  • 由秘密的对称密钥进行"保护"。
因此,为了计算HMAC(无论是最初还是用于验证),我都需要知道秘密密钥。
现在,如果我可以以一种不被篡改的秘密方式交换此密钥,我也可以以完全相同的秘密方式交换消息,难道不是吗?
好的,现在你可能会争辩说你只需要交换密钥一次,但是你可能有多个消息。没问题。
但是,现在如果我们有一个必须由所有参与方保密的秘密密钥,我们也可以直接使用完全相同的秘密密钥进行对称加密来加密消息,难道不是吗?
当然,HMAC应该提供防篡改的解决方案,但是如果我只有一个加密的消息,没有秘密密钥和合理的加密算法,我无法以这样的方式更改该加密消息,即a)解密仍然有效,并且b)出现有意义的解密消息。
那么,我实际上需要HMAC用于什么? 或-我错过了什么要点?

我认为一个可能的用途是,如果你正在交换大量信息,并且不想加密和解密所有信息的计算开销 - 特别是对于移动和嵌入式设备,这可能会成为一个问题。 - Patashu
我很高兴这个问题得到了正确的回答,但是如果还没有被问过的话,这个问题应该在http://crypto.stackexchange.com/上提出。 - Maarten Bodewes
1个回答

13

你认为在不知道加密使用的密钥的情况下,无法篡改加密消息。这是错误的假设,也是一种危险的假设。即使您只能访问密文,仍有几种可能性:

  • 破坏消息的后缀:这可能会通过错误消息、计时和可能的其他方式泄露有关内容的信息。
  • 破坏消息的某些模式的范围(ECB、CFB和可能的其他模式):与上述相同,但攻击者有更多方法触发所需的行为。
  • 在单个块中翻转任意位(虽然不知道它们的初始值),并破坏以下块(CFB):如果攻击者知道某些位,则可以将其设置为所需的值。
  • 在流密码或块密码等效模式的整个消息中翻转任意位:这可以完全避免破坏。

因此,在处理解密内容的每个字节之前,验证没有攻击者篡改消息非常重要。由于使用特定的验证或简单哈希进行此操作存在一些问题,因此需要使用MAC,其中HMAC是一个例子。


1
欢迎来到stackoverflow,jix!您可能还对姊妹网站crypto.stackexchange.com和security.stackexchange.com感兴趣。 - Maarten Bodewes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接