Rfc2898DeriveBytes IterationCount目的和最佳实践

时间:2014-01-15 18:59:37

标签: .net cryptography

IterationCount类的Rfc2898DeriveBytes属性的用途是什么。 MSDN并没有过多地阐述它,但它确实说建议的最低值是1,000。

如果我要将它设置为1,000,为什么不是1,000,000或1,000,000,000?是否有推荐1,000的原因,是否有最佳实践来确定每个用例的正确值?

1 个答案:

答案 0 :(得分:10)

Rfc2898DeriveBytes实现了PBKDF2。此算法使用salt和key拉伸从密码创建相对安全的密钥(正常长度密码不安全)。为了使暴力破解密码更难,它使用迭代计数(这是为创建密钥而添加的线性成本)。合法用户和攻击者的成本相同,但攻击者必须遍历所有可能的密码。

没有标准化金额;基本上你把它设置为一个可以接受CPU性能的值。 1000是标准中的推荐值,但该标准已存在多年。如今,您应该从大约10K + 开始,上述任何内容都会使攻击者更难找到生成相同“密钥”的密码。

+ [编辑] 请查找当前建议的迭代次数。请注意,摩尔定律仍然有效,并且PBKDF2本身使用指数标度进行迭代计数。确保其他密码处理例程也是安全的(密码强度反馈,最大重试次数等)。

显然,更重要的密钥应该得到更好的保护。请注意,生成真正安全的密码比添加迭代具有更大的影响 - 使用良好的密码和高迭代次数当然是最好的。