加密后存储的文件,是否安全将其原始未加密文件的sha256哈希值存储起来?

4
我正在开发一个文档管理系统,为了检测文件的变化和重复,我使用sha256算法获取摘要进行比较。这是通过Python实现的。该系统可以配置在存储文件之前对文件进行加密。
问题在于,对于未加密的文件仍然安全地存储摘要吗?
这个摘要被用作存储文件的标识符,并且也被用于检测要添加到系统中的文件是否已经存在。我能够接受sha256算法在此目的上出现冲突的概率。我还阅读过由sha256生成的摘要无法用于重新创建原始数据的信息。
假设文件无法从散列中重构,并且文件以加密形式存储,那么保留原始散列值以进行比较/搜索应该是安全的,或者我应该重新考虑我的策略?这些比较将仅在应用程序内部进行,不会以任何方式向用户公开。

1
你是否假设攻击者用旧版本替换文件?这被称为回滚攻击。 - kelalaka
2
你在InfoSec.SE上提问可能会更有好运。 - Aran-Fey
1
你的担忧是什么?可逆性?某种基于哈希碰撞的攻击? - deceze
2
这个文件是唯一的吗?因为如果这个文件在其他地方也有,那么它的哈希值很可能也会在字典中被找到。 - Yann Vernier
1
只要您存储的文件是特定长度的纯二进制文件(不是比如小于12个字节的非常小的ASCII文本文件),则文件数据无法被重建。对于小型ASCII文件(可能还可以通过存储的未加密文件大小进行识别),存储SHA-256可能会引起安全问题(所有可能文档的暴力生成)。因此,我会将文档的最小大小设为~ 20个字节。 - Robert
显示剩余3条评论
1个回答

1
SHA-256的预像抵抗力是2^256,碰撞抵抗力是2^128( 简要概述)。另一方面,您可以简单地检查所需的组合数以猜测解密文件的密钥。 SHA-256的预像攻击复杂度相当于破解对称加密的256位密钥。因此,总的来说,我会说这种方法足够安全,因为通过猜测密钥而不是从SHA-256中找到预像更容易恢复原始文件。

很好知道您将使用哪个算法和参数来进行文件加密,也许在您的情况下答案会有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接