【问题标题】:What are the benefits of HMAC over symmetric cryptography?与对称密码学相比,HMAC 有什么好处?
【发布时间】:2013-02-10 17:50:45
【问题描述】:

不知何故我没有得到 HMAC。

我曾经问过Why do I need HMACs when we do have public key signatures?,我想我得到了这个。更容易计算,等等...

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

据我了解,HMAC ...

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

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

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

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

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

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

那么我需要 HMAC 究竟是为了什么? 或者 - 我错过的重点在哪里?

【问题讨论】:

  • 我认为一种可能的用途是,如果您要交换大量信息,并且不希望对所有信息进行加密和解密的计算开销 - 特别是对于移动和嵌入式设备,这可能会成为一个问题.
  • 我很高兴这个问题得到了正确回答,但这个问题应该在crypto.stackexchange.com 提出(如果尚未提出)。

标签: encryption hmac


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢:-)。这完美地回答了我的问题!
  • 欢迎来到stackoverflow,jix!您可能还对姐妹网站 crypto.stackexchange.com 和 security.stackexchange.com 感兴趣。
猜你喜欢
  • 1970-01-01
  • 2020-01-01
  • 2018-12-22
  • 2014-12-06
  • 2016-12-05
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
相关资源
最近更新 更多