当我阅读Botan document时, 我发现了以下注释:
在解密期间,如果MAC未验证,则finish将抛出Integrity_Failure实例。如果发生这种情况,之前通过更新调用输出的所有明文都必须被销毁,并且不得以攻击者可以观察到的效果的任何方式使用。
确保永远不会发生这种情况的一种简单方法是永远不要调用更新,而是始终将整个消息编组到一个缓冲区中,并在解密时调用它。
由于这种情况出现在解密中, 这是否意味着如果攻击者可以访问文件,AEAD模式是不安全的?
或者有什么我误解了吗?
提前致谢。
答案 0 :(得分:2)
此警告的要点是,在您验证之前,您不能信任任何信息。请注意,AEAD密码的基础模式通常是CTR模式(其他模式也受到类似的影响)。因此,攻击者可以例如在密文中引入错误,该错误在同一位置处转换为明文中的错误。大多数AEAD密码使用下面的CTR模式,因此攻击者可以通过这种方式翻转明文的特定位。
攻击者可以通过观察处理 - 现在无效 - 数据时发生的特定错误来了解明文。这就是警告的内容:首先需要在处理之前建立解密数据的完整性和真实性。
当然,这通常意味着在验证数据之前对数据进行缓存。因此,首先创建缓冲区并使用密文加载它更有意义。如果您有一个好的API,您可以使用明文覆盖它,这样您就不必分配两次存储空间。
当然,您仍然可以将明文存储在磁盘上,只要您确保在标记无效时删除对数据的访问权限。例如,您可以将数据存储在临时文件中,然后在验证标记后将其重命名为正确的文件名。
所有人都说,不,AEAD模式比任何其他非认证操作模式更多安全,因为您可以验证消息的完整性和真实性。但是你仍然可以错误地使用密码,而这就是它的全部内容。