Encryption 加密:在根本不存储密钥时,是否需要对密钥进行加密?

Encryption 加密:在根本不存储密钥时,是否需要对密钥进行加密?,encryption,hash,aes,salt,sha,Encryption,Hash,Aes,Salt,Sha,我搜索了整个网络,包括这里:有很多关于在散列和存储密码之前对密码进行加密的讨论 如果密码用于计算用于加密的密钥(“基于密码的加密”):如果不将密码存储在al怎么办 [注:我确实读过:这肯定是一个相关的问题:我不确定这里讨论的初始化向量与这里的问题有何关系] 假设: 用于加密 用户输入主密码 这是SHA256散列,输出用于AES256加密文件 哈希没有存储(显然主密码也没有存储) 用于解密 用户输入主密码 这是SHA256散列,输出用于解密文件 如果解密成功,密码显然是正确的 我的问题: 当不

我搜索了整个网络,包括这里:有很多关于在散列和存储密码之前对密码进行加密的讨论

如果密码用于计算用于加密的密钥(“基于密码的加密”):如果不将密码存储在al怎么办

  • [注:我确实读过:这肯定是一个相关的问题:我不确定这里讨论的初始化向量与这里的问题有何关系]
假设:

用于加密

  • 用户输入主密码
  • 这是SHA256散列,输出用于AES256加密文件
  • 哈希没有存储(显然主密码也没有存储)
  • 用于解密

  • 用户输入主密码
  • 这是SHA256散列,输出用于解密文件
  • 如果解密成功,密码显然是正确的
  • 我的问题:

    当不存储除加密文件本身以外的任何内容时,在散列主密码之前对其进行盐渍处理是否有任何好处

    考虑事项:

    • 这可能会降低散列冲突的可能性
    • 这需要储存盐
    • 如果salt丢失/损坏,用户将无法再解密文件

    • 如何在步骤3中检查解密是否成功:这是否需要知道部分文件内容

    • 如果是这样,那么在加密文件中存储已知值的错误有多大(这并非总是可以防止的-攻击者可能会猜到,例如,用户的姓氏在文件中的某个位置加密了-可能是正确的)

    如果您没有存储主密码,则无需对其进行加密。如果要重用主密码来生成大量一次性密码,则需要根据需要对其进行加密和解密

    Salting用于长期存储必须多次匹配的用户密码,以便使用相同密码的人不会有相同的散列,从而帮助窃取文件的攻击者

    Salt用于长期存储中的散列,IV用于使用CBC模式(或CTR模式,也可以称为nonce)进行加密


    至于检查文件是否已正确解密,只需确保使用类似PKCS7的填充。解密最后一个块时,将检查填充以确保其格式正确。如果解密失败,则填充将无法正确格式化,您将得到一个“填充失败”错误。

    清除答案,不存储,不腌制。另外,我正在使用PKCS7填充和检查:当提供了不正确的密钥时,common cryptor确实很好地返回了一个错误;无需检查文件内容。更新:后者不再为真。CCCrypt现在总是返回成功。如果设置了
    NoPadding
    ,则将接受任何旧垃圾。最好检查您的设置,然后故意尝试使用不正确的密钥解密。