加密:当我甚至根本不存储密钥时,是否需要加密密钥?

时间:2011-08-09 09:48:42

标签: encryption hash aes salt sha

我在网上搜索,包括SO:关于在散列和存储之前需要加密密码的讨论很多。

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

,该怎么办?

假设:

用于加密

  1. 用户输入主密码
  2. 这是SHA256哈希,输出用于AES256加密文件
  3. 哈希存储(显然也不是主密码)
  4. 用于解密

    1. 用户输入主密码
    2. 这是SHA256哈希,输出用于解密文件
    3. 如果解密成功,则密码显然是正确的
    4. 我的问题:

      如果没有存储除加密文件本身以外的任何内容,在对主密码进行哈希处理之前,有什么好处吗?

      考虑:

      • 它可能会降低哈希冲突的可能性
      • 需要储存盐。
      • 如果盐丢失/损坏,用户将无法再解密该文件

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

      • 如果是这样,有多少虚假的人在加密文件中存储已知值(这不能总是被阻止 - 攻击者可能会猜测例如用户的姓氏在文件中的某处被加密 - 这是正确的)。

1 个答案:

答案 0 :(得分:3)

如果您没有存储主密码,则无需加密。如果您重复使用主密码生成大量一次性密码,则需要根据需要加密存储并解密。

Salting用于长期存储必须多次匹配的用户密码,以便具有相同密码的人不具有相同的哈希值,这将有助于窃取该文件的攻击者。

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

至于检查您的文件是否已正确解密,请确保使用像PKCS7这样的填充。当最后一个块被解密时,将检查填充以确保其格式正确。如果解密失败,则填充将无法正确格式化,您应该收到“填充失败”错误。