9

不知何故,我没有得到 HMAC。

曾经问过,当我们确实有公钥签名时,为什么我需要 HMAC?,我想我得到了这个。更容易计算,等等......

但是,我不明白为什么我们需要 HMAC,它们分别解决了什么样的问题。

据我了解,HMAC ...

  • 提供一种方法来确保消息未被篡改,
  • 由秘密但对称的密钥“保护”。

因此,为了计算 HMAC(无论是初始还是验证),我都需要知道密钥。

现在,如果我可以在不被篡改的情况下以秘密方式交换此密钥,我也可以以相同的秘密方式交换消息而不会被篡改,不是吗?

好的,现在您可以争辩说您只需要交换一次密钥,但您可能有多个消息。没关系。

但是,如果我们现在有一个必须由各方保密的密钥,我们也可以直接使用对称加密,使用相同的密钥来加密消息,不是吗?

当然,HMAC 应该提供防止篡改的解决方案,但是如果我只有一条没有密钥和合理加密算法的加密消息,我无法以 a) 解密仍然有效的方式更改该加密消息,并且 b)出现有意义的解密消息。

那么我实际上需要一个 HMAC 是为了什么?或者 - 我错过的重点在哪里?

4

1 回答 1

13

您假设在不知道用于加密的密钥的情况下不可能篡改加密消息。事实并非如此,这是一个危险的假设。即使您只能访问密文,也有几件事可能:

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

因此,在处理解密内容的单个字节之前验证没有攻击者篡改消息非常重要。由于使用临时验证或简单散列进行此操作时再次存在一些缺陷,因此需要 MAC,其中 HMAC 就是一个示例。

于 2013-02-10T09:50:45.763 回答