【问题标题】:AEAD mode securityAEAD模式安全
【发布时间】:2018-04-22 02:26:48
【问题描述】:

当我阅读Botan document时, 我遇到了以下注释:

在解密期间,如果 MAC 未验证,finish 将抛出一个 Integrity_Failure 实例。如果发生这种情况,之前通过调用 update 输出的所有明文都必须被销毁,并且不能以任何攻击者可以观察到的影响的方式使用。

确保这种情况永远不会发生的一种简单方法是永远不要调用更新,而是始终将整个消息编组到单个缓冲区中,并在解密时对其调用完成。

由于解密时出现这种情况, 如果攻击者可以访问文件,这是否意味着 AEAD 模式不安全?

还是我误解了什么?

提前致谢。

【问题讨论】:

  • “解密时出现这种情况”是什么意思?什么情况是不确定的?
  • @MaartenBodewes 正如文档所说,我们应该防止攻击者在解密过程中观察到之前输出的明文。那么攻击者能否模拟这个解密过程并获取一些信息呢?
  • 不,它没有这么说。如果验证失败,那么明文不应“以任何攻击者可以观察到的影响的方式使用”。也就是说,如果您对格式错误的数据采取行动,攻击者可能会因此学到一些东西——攻击者从这种情况中得到什么完全取决于应用程序。只需确保在查看解密数据之前保持完整性,API 在完整性检查之前生成数据的事实一开始就令人担忧,但我知道流式使用有时需要这个。
  • 换句话说:在验证完整性之前,不要开始向解析器/解串器等发送数据(在 AEAD 中:完成解密且没有错误)。理想情况下,您也不会让它缓冲到文件中,因为这可能是可以观察到的;但是如果你因为 RAM 限制的原因需要确保没有其他人可以看到它,如果出现问题就用火烧掉它。
  • 非常简洁的答案。我误解了它的意思。谢谢

标签: encryption cryptography encryption-symmetric botan


【解决方案1】:

此警告的重点是,您在验证之前不能信任任何信息。请注意,AEAD 密码的底层模式通常是 CTR 模式(其他模式也受到类似影响)。因此,攻击者可以例如在密文中引入错误,这些错误会在同一位置转化为明文中的错误。大多数 AEAD 密码在底层使用 CTR 模式,因此攻击者可以通过这种方式翻转明文的特定位。

例如,攻击者可以通过观察在处理现在无效的数据时发生的特定错误来了解明文。这就是警告的含义:在处理解密数据之前,您首先需要确定解密数据的完整性和真实性。

当然,这通常意味着缓存数据直到它被验证。出于这个原因,首先创建一个缓冲区并使用密文加载它更有意义。如果你有一个好的 API,你可以用明文覆盖它,这样你就不必分配两次存储空间。

当然,您仍然可以将明文存储在磁盘上,只要您确保在标签无效时删除对数据的访问权限。例如,您可以将数据存储在一个临时文件中,然后在验证标签后将其重命名为正确的文件名


总而言之,不,AEAD 模式比任何其他未经身份验证的操作模式安全,因为您可以验证消息的完整性和真实性。但是您仍然可以错误地使用密码,这就是它的全部意义所在。

【讨论】: