Rfc2898DeriveBytes
类的IterationCount
属性有什么作用?虽然MSDN没有给出太多解释,但它确实指出建议最小值为1,000。
如果我将其设置为1,000,为什么不是1,000,000或1,000,000,000?推荐使用1,000背后的原因是什么,是否有确定每个用例所需正确值的最佳实践?
Rfc2898DeriveBytes
类的IterationCount
属性有什么作用?虽然MSDN没有给出太多解释,但它确实指出建议最小值为1,000。
如果我将其设置为1,000,为什么不是1,000,000或1,000,000,000?推荐使用1,000背后的原因是什么,是否有确定每个用例所需正确值的最佳实践?
Rfc2898DeriveBytes
实现了PBKDF2算法。该算法使用盐和密钥拉伸(即迭代多次)从密码中创建一个相对安全的密钥(密码长度正常情况下不是很安全)。为了使暴力破解密码更加困难,它使用迭代次数(这是线性成本的增加以创建密钥)。成本对于合法用户和攻击者来说是相同的,但攻击者必须遍历所有可能的密码。
没有标准化的数量;基本上,您将其设置为对于CPU性能而言可接受的值。1000是标准内推荐的值,但该标准已经存在了一些年头。现在,您应该以至少10K为起点,任何超过10K的值都会使攻击者更难找到生成相同“密钥”的密码。
+[编辑] 请查找当前推荐的迭代次数。请注意,摩尔定律仍然有效,并且PBKDF2本身不使用指数比例来计算迭代次数。确保其他密码处理程序也是安全的(例如密码强度反馈、最大重试次数等)。
显然,更重要的密钥应该得到更好的保护。请注意,生成一个真正安全的密码比增加迭代次数更有影响——当然,同时使用良好的密码和高迭代次数是最好的。