【问题标题】:Is it safe to store sha256 hash of the original unencripted file that is to be stored in encrypted form?存储要以加密形式存储的原始未加密文件的 sha256 哈希是否安全?
【发布时间】:2020-01-25 10:53:37
【问题描述】:

我正在开发一个文档管理系统,为了检测文件的变化/文件的重复,我使用 sha256 来获取摘要进行比较。这是在 python 中完成的。系统可以配置为在存储之前对文件进行加密。

问题是存储未加密文件的摘要是否仍然安全。

此摘要用作存储文件的标识符,也用于检测添加到系统的文件是否已存在。为此目的,我可以接受 sha256 算法的碰撞机会。我还读到 sha256 生成的摘要不能用于重新创建原始数据。

假设无法从哈希中重建文件并且文件以加密形式存储的事实,保留原始哈希以进行比较/搜索应该是安全的......还是我应该重新考虑我的策略?这些比较将在应用程序内部进行,无论如何都不会暴露给用户。

【问题讨论】:

  • 您是否假设攻击者将文件替换为旧版本?这称为回滚攻击。
  • 你在InfoSec.SE问这个问题可能会更好
  • 您到底关心什么?可逆性?某种基于哈希冲突的攻击?
  • 文件是否唯一?因为如果它是其他地方可用的文件,它的哈希值很可能也在字典中。
  • 只要你存储的文件是一定长度的纯二进制文件(不是非常小的 ascii 文本文件,小于例如 12 字节),文件数据就无法重建。对于小的 ascii 文件(甚至可以通过未加密存储的文件大小来识别),存储 SHA-256 可能会导致安全问题(暴力生成所有可能的文档)。因此,我会为文档设置最小大小为 ~20 字节。

标签: python encryption public-key-encryption sha256 hashlib


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多