【问题标题】:Security using AES with salted password as key使用 AES 加密密码作为密钥的安全性
【发布时间】:2011-06-29 17:37:51
【问题描述】:

我了解密码的加盐哈希是如何工作的,但我假设我还需要存储盐、用户名、密钥和加密密码。我认为总的来说,我只需要了解我将如何实现它,例如如何存储它,然后如何重新生成密码。另外,如果有人能解释为什么使用这个加盐值更好,难道不能用每个单词前面的盐来进行字典攻击吗?

谢谢,

【问题讨论】:

  • 为什么要重新生成密码?最好对密码使用单向加密。
  • 使用盐散列的唯一原因是不允许重新生成密码。

标签: security encryption passwords aes storage


【解决方案1】:

不清楚您要做什么:验证提供的密码是否正确(与系统登录一样);或在密钥源自密码的情况下实施数据加密。

如果是后者(称为基于密码的加密),那么您应该使用密钥派生函数,例如PBKDF2。密钥派生函数采用盐和提供的用户密码,并生成可与 AES 等密码一起使用的密钥。

要进行加密,您将提示输入密码,生成随机盐,并使用 KDF 派生密钥。然后,您将在合适的分组密码模式下使用该密钥和 AES 来加密数据,并存储 salt 和加密数据(以及密码模式所需的任何 IV)。

要解密,您会提示输入密码,从文件中加载 salt,然后重新导出密钥。然后,您将使用该密钥来解密文件。

盐的目的是防止将预计算优化应用于字典攻击。一旦知道盐分,确实可以执行暴力字典攻击,但 KDF 的设计速度足够慢,以至于在没有预计算的情况下使其不可行。

【讨论】:

    【解决方案2】:

    您应该使用哈希算法来存储您的密码,这是一种单向“加密”。然后,您可以对从用户那里获得的密码进行哈希处理,并与存储的哈希值进行比较。

    出于安全原因,您应该在哈希中添加salt,以使彩虹表攻击对您的哈希更加困难。

    在计算用户输入的哈希值时,您需要存储盐值以便获得相同的哈希值。您应该以安全的方式储存盐。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多