加密是否保证完整性?

ber*_*kay 22 security encryption cryptography integrity

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

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

Mat*_*hen 26

不.如果您考虑一次性垫,这是一个简单(理论上)完全安全的系统,这很容易看出.

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

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

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

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

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

  • 使用私钥加密通常称为签名。这提供了完整性,但不提供机密性。每个人都知道您的公钥,因此他们可以“解密”(验证)该消息。 (2认同)

roo*_*ook 10

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

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

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

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

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

一种解决方案是使用分组密码是CMAC模式.CMAC是类似于hmac的消息认证代码,但它使用分组密码而不是消息摘要功能.密钥(K)与用于加密消息的密钥相同.这会在密文中添加n + 1个块.在我的方案这样可以防止这两起袭击1和2的攻击者,因为纯文本被填充,即使消息只占用1位,我必须使用块加密传输的最小的1块不能翻转一个简单的位.附加认证块阻止我链接的关键,而且还提供从任何试图修改在运输途中密文(虽然这将是非常困难的在实践中做的,安全的附加层是很有用)的完整性.

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