【发布时间】:2018-04-22 02:26:48
【问题描述】:
当我阅读Botan document时, 我遇到了以下注释:
在解密期间,如果 MAC 未验证,finish 将抛出一个 Integrity_Failure 实例。如果发生这种情况,之前通过调用 update 输出的所有明文都必须被销毁,并且不能以任何攻击者可以观察到的影响的方式使用。
确保这种情况永远不会发生的一种简单方法是永远不要调用更新,而是始终将整个消息编组到单个缓冲区中,并在解密时对其调用完成。
由于解密时出现这种情况, 如果攻击者可以访问文件,这是否意味着 AEAD 模式不安全?
还是我误解了什么?
提前致谢。
【问题讨论】:
-
“解密时出现这种情况”是什么意思?什么情况是不确定的?
-
@MaartenBodewes 正如文档所说,我们应该防止攻击者在解密过程中观察到之前输出的明文。那么攻击者能否模拟这个解密过程并获取一些信息呢?
-
不,它没有这么说。如果验证失败,那么明文不应“以任何攻击者可以观察到的影响的方式使用”。也就是说,如果您对格式错误的数据采取行动,攻击者可能会因此学到一些东西——攻击者从这种情况中得到什么完全取决于应用程序。只需确保在查看解密数据之前保持完整性,API 在完整性检查之前生成数据的事实一开始就令人担忧,但我知道流式使用有时需要这个。
-
换句话说:在验证完整性之前,不要开始向解析器/解串器等发送数据(在 AEAD 中:完成解密且没有错误)。理想情况下,您也不会让它缓冲到文件中,因为这可能是可以观察到的;但是如果你因为 RAM 限制的原因需要确保没有其他人可以看到它,如果出现问题就用火烧掉它。
-
非常简洁的答案。我误解了它的意思。谢谢
标签: encryption cryptography encryption-symmetric botan