当我阅读博坦文件时,我发现了下面的注释:
在解密期间,如果MAC不验证,finish将抛出Integrity_Failure实例。如果发生这种情况,以前通过调用更新输出的所有明文都必须销毁,而不是以攻击者可以观察到的任何方式使用。 确保这种情况永远不会发生的一种简单方法是永远不调用update,而是总是将整个消息发送到一个缓冲区中,并在解密时调用finish。
由于这种情况出现在解密中,如果攻击者能够访问文件,这是否意味着AEAD模式是不安全的?
还是我误解了什么?
提前谢谢。
发布于 2017-11-09 22:36:42
此警告的要点是,在验证任何信息之前,您不能信任它。请注意,AEAD密码的底层模式通常是CTR模式(其他模式也受到类似影响)。例如,攻击者可以在密文中引入错误,这些错误在同一位置转换为明文中的错误。大多数AEAD密码在下面使用CTR模式,因此攻击者可以以这种方式翻转明文的特定位。
例如,攻击者可以通过监视处理现在无效的数据时发生的特定错误来了解明文。这就是警告的意义所在:在处理数据之前,首先需要建立解密数据的完整性和真实性。
当然,这通常意味着缓存数据直到数据被验证。因此,首先创建一个缓冲区并用密文加载它就更有意义了。如果您有一个好的API,您可以用纯文本覆盖它,这样您就不必两次分配存储空间了。
当然,只要确保在标签无效的情况下删除对数据的访问,仍然可以将明文存储在磁盘上。例如,可以将数据存储在临时文件中,然后在验证标记后将其重命名为正确的文件名。
也就是说,不,AEAD模式比任何其他未经身份验证的操作模式都更安全,因为您可以验证消息的完整性和真实性。但是你仍然可以不正确地使用密码,这就是问题所在。
https://stackoverflow.com/questions/47196000
复制相似问题