【问题标题】:Rfc2898DeriveBytes - password lengthRfc2898DeriveBytes - 密码长度
【发布时间】:2014-04-01 18:51:39
【问题描述】:

找了半天相关的答案,还是不信。

我正在尝试使用 RijndaelManaged 进行加密。为了创建密钥,我将密码、盐和迭代传递给 Rfc2898DeriveBytes。

如果用户输入的密码低于特定长度,我正在考虑添加常量,然后再将其传递给 Rfc2898DeriveBytes。

到目前为止,我发现添加常量不会为安全性增加任何好处。假设攻击者可以访问包含加密数据和盐的数据库,但不保持不变会给他带来一些困难。虽然最终他会找到那个不变的。

或者将任意长度的密码传递给 Rfc2898DeriveBytes 是“非常安全的”而不用担心?

传递更短或更长的密码是否会影响密钥派生过程,哪个更好和最推荐?

到目前为止,我所知道的随机盐和更多迭代很重要。

以下是代码,我应该删除在密码中添加常量还是保留它?

(注:用户密码长度限制不适用于GUI,用户可以传递1个字符甚至超过10个字符)

string constant = "AnyConstantToMakePasswordBigger";

if (password.Length < 8) 
{ 
password = password + constant; 
}

RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

byte[] salt = new byte[8];

rng.GetBytes(salt);

Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(password, salt, 1000);

using (RijndaelManaged aes = new RijndaelManaged())
{
     aes.Key = derivedKey.GetBytes(keyLength);
     .....
}

欢迎任何正面或负面的评论和回应。

【问题讨论】:

  • 唯一的解决方案是要求用户输入至少一定长度的密码。添加一个常量或更多轮数并不能弥补 1 个字符的密码。
  • 是的,盐和更多的迭代更重要。事实上,更多的迭代正是 BCrypt 所做的。我不认为添加常量数据来制作“更长的密码”会产生很大的不同——你不会改变密码的有效安全深度。
  • 添加常量是没有意义的。盐已经达到了你希望常数实现的目的。事实上,添加常量可能会使安全性变得更糟(尽管我认为使用Rfc2898DeriveBytes 会很安全)。如果您想提高安全性,请确保密码超过最小长度。
  • @Jordell,即使提供的密码也只有 1 个字符的长度? (请注意开头不能限制长度)
  • 用固定值填充密码有什么帮助?你想增加熵而不是减少它。

标签: c# encryption pbkdf2


【解决方案1】:

假设攻击者不知道“常数”,是的,它会通过使蛮力攻击更难有效提高安全性。但是,这是一个非常糟糕的假设,您应该始终假设攻击者拥有您的源代码。

继续我们的错误假设:您是正确的,如果破解了足够多的密码,攻击者最终可能会找出您的常量。

至于在密码中添加更多字符是否会改进密钥派生:并非如此。无论如何,您生成的密钥都将是相同的长度。但是攻击者不会试图猜测你的密钥,它们太长并且实际上不可能暴力破解。任何攻击者都会追求密码。

这就是迭代、加盐和难以猜测的长密码的用武之地。迭代通过增加每次猜测所需的时间来增加难度。虽然合法用户登录时进行数千次迭代的时间可以忽略不计,但暴力攻击者的成本却是巨大的。长密码额外增加了暴力破解的难度。 salt有助于保护相同的密码不被同时破解(攻击者必须独立攻击每个密码,即使它们相同)。

【讨论】:

  • 什么是“加密”?如果您创建一个没人知道的新术语,很难说迭代是否会增加“加密性”。你接着说迭代使暴力攻击变得更加困难——因此更加安全。所以,如果“加密”与安全有关,那你就自相矛盾了。
  • @PeterRitchie 你说得对,用词不当。我现在就编辑。
  • 在密码中添加一个常数会降低熵,Rfc2898DeriveBytes 旨在增加(在盐的帮助下)。
  • @MikeH,在我的错误假设中,我认为我越来越相信在密码中添加常量(因为我不知道提供的密码会更短或更长)......现在,我我假设提供给 Rfc2898DeriveBytes 的推荐密码长度应该是多少,我的意思是常量 + 密码的长度?
  • @toughcanny,我鼓励你重读 Jodrell 的 cmets。实际上....我很困惑,您说您“确信要添加常量”,但您还要求提供最小密码长度。你能澄清一下吗?
猜你喜欢
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多