【问题标题】:Does encryption guarantee integrity?加密能保证完整性吗?
【发布时间】:2011-04-09 00:05:39
【问题描述】:

为了构建一个安全的系统,我们是否可以在开始安全编程之前假设加密保证完整性是正确的?

  • 对称和公钥 加密,是我的问题 有据可查?
  • 如果不是,是什么 漏洞,你能给出一个 例子?

【问题讨论】:

  • 诚信是什么意思?数据完整性?
  • OP 的问题(或其他任何能够回答的人):“假设我的问题”是什么意思?
  • @sampablokuper,修正了我的写作。
  • @berkay,谢谢,但仍不清楚。 “假设我的问题是真的”是什么意思?在我熟悉的逻辑中,陈述可以是真的(或假的,或者可能是不确定的),但问题没有真值。

标签: security encryption cryptography integrity


【解决方案1】:

没有。如果您考虑one-time pad,这很容易看出,这是一个简单(理论上)完全安全的系统。

如果你改变了输出的任何一点,就会有一点明文发生变化,而接收者无法检测到这一点。

这是一个明显的例子,但同样的结论适用于大多数加密系统。它们只提供机密性,而不是完整性。

因此,您可能需要添加digital signature。有趣的是,当使用公钥密码术时,签名后加密(SE)或加密后签名(ES)是不够的。这两者都容易受到重放攻击。您必须签名加密签名或加密签名加密才能获得一般安全的解决方案。这个paper 详细解释了原因。

如果您使用 SE,收件人可以解密邮件,然后将其重新加密给其他收件人。然后,这会在发件人的预期收件人方面欺骗新收件人。

如果您使用 ES,窃听者可以删除签名并添加自己的签名。因此,即使他们无法阅读该消息,他们也可以将其归功于它,假装是原始发件人。

【讨论】:

  • 如果我用我的私钥加密我的消息并发送它呢?如何违反完整性属性?
  • 使用您的私钥加密通常称为签名。这提供了完整性,但不提供机密性。每个人都知道您的公钥,因此他们可以“解密”(验证)消息。
  • 最好加密散列消息会更快更有效,所以这是签名,好的,你的假设不是安全漏洞,只是通过使用我的私钥加密来实现完整性。
  • 有趣的是,AES 提供了完整性强制模式。
  • @atk 是的,所有分组密码都可以,它称为 cmac 模式,我发布过。
【解决方案2】:

简而言之,答案是否定的。消息完整性和保密性是不同的,需要不同的工具。

让我们考虑一个简单的硬币翻转,在这种情况下,我们押注结果。结果是一个简单的布尔值,我使用像 RC4 这样的流密码对其进行加密,产生 1 个加密位,然后通过电子邮件将其发送给您。你没有钥匙,我请你通过电子邮件给我回复。

在这种情况下可能会发生一些攻击。

1) 攻击者可以修改传输中的位,如果它是 0,则有 50% 的机会变为 1,反之亦然。这是因为 RC4 生成一个 prng 流,它与纯文本异或生成密文,类似于一次性密码。

2)另一种可能性是我可以为您提供不同的密钥以确保您的答案是错误的。这很容易蛮力,我只是不断尝试键,直到我得到适当的位翻转。

解决方案是使用分组密码CMAC Mode。 CMAC 是类似于 hmac 的消息验证代码,但它使用分组密码而不是消息摘要功能。密钥 (K) 与您用于加密消息的密钥相同。这将 n+1 个块添加到密文中。在我的场景中,这可以防止攻击 1 和 2。攻击者无法翻转一个简单的位,因为纯文本被填充,即使消息只占用 1 位,我也必须使用分组密码传输至少 1 个块。额外的身份验证块阻止我链接密钥,它还为任何试图在传输中修改密文的人提供完整性(虽然这在实践中很难做到,但额外的安全层很有用)。

出于这些原因,WPA2 使用 AES-CMAC。

【讨论】:

    【解决方案3】:

    如果您特别关注数据完整性,您应该使用cryptographic hash function结合一种加密算法。

    但这确实归结为使用正确的工具来完成这项工作。一些加密算法可能会提供某种程度的内置校验和验证,而另一些可能不会。

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      相关资源
      最近更新 更多