我搜索了整个网络,包括这里的 SO:有很多关于在散列和存储密码之前需要对密码进行加盐的讨论。
如果密码用于计算用于加密的密钥(“基于密码的加密”):如果您根本不存储密码怎么办?
- [注意:我确实读过 SO:Passphrase、Salt 和 IV,我需要所有这些吗?并且IV 是否像盐一样工作肯定是一个相关的问题:我不确定那里讨论的初始化向量与这里的问题有何关系]
认为:
用于加密
- 用户输入主密码
- 这是 SHA256 哈希,输出用于 AES256 加密文件
- 没有存储哈希(显然主密码也没有)
用于解密
- 用户输入主密码
- 这是 SHA256 哈希,输出用于解密文件
- 如果解密成功,则密码 - 显然 - 正确
我的问题:
除了加密文件本身之外不存储任何内容时,在散列之前对主密码进行加盐有什么好处?
注意事项:
- 它可能会降低哈希冲突的可能性
- 这将需要储存盐。
如果盐丢失/损坏,用户将无法再解密文件
如何在步骤 3 中检查是否成功解密:这是否需要知道部分文件内容?
- 如果是这样,有多少错误将已知值存储在加密文件中(这不能总是被阻止 - 攻击者可能会猜测,例如用户的姓氏在文件中的某处被加密 - 是正确的)。