2

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

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

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

既然这种情况出现在解密中,那是否意味着如果攻击者可以访问文件,AEAD模式是不安全的呢?

还是我误解了什么?

提前致谢。

4

1 回答 1

2

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

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

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

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


话虽如此,不,AEAD 模式比任何其他未经身份验证的操作模式都安全,因为您可以验证消息的完整性和真实性。但是您仍然可以错误地使用密码,这就是全部内容。

于 2017-11-09T22:36:42.510 回答