加密是否保证完整性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密是否保证完整性?相关的知识,希望对你有一定的参考价值。

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

  • 在对称和公钥加密方面,我的问题是否经过充分证明?
  • 如果不是,有哪些漏洞,你能举个例子吗?
答案

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

如果更改输出的任何位,则一些明文将更改,并且收件人无法检测到这一点。

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

因此,您可能想要添加digital signature。有趣的是,当使用公钥加密时,签名然后加密(SE)或加密然后签名(ES)是不够的。这两个都容易受到重播攻击。您必须使用sign-encrypt-sign或encrypt-sign-encrypt来获得通常安全的解决方案。这个paper详细解释了原因。

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

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

另一答案

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

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

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

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

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

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

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

另一答案

如果数据完整性是您特别关注的问题,则应使用cryptographic hash function,并结合加密算法。

但它确实归结为使用正确的工具来完成工作。某些加密算法可能会提供内置的某种级别的校验和验证,而其他加密算法可能不会。

以上是关于加密是否保证完整性?的主要内容,如果未能解决你的问题,请参考以下文章

数据的加密与解密

数据的加密和解密

加密技术应用

加密技术应用

加密技术应用

密码技术