.net Rfc2898DeriveBytes迭代计数目的和最佳实践

.net Rfc2898DeriveBytes迭代计数目的和最佳实践,.net,cryptography,.net,Cryptography,Rfc2898DeriveBytes类的IterationCount属性的用途是什么。没有太多的说明,但它确实说1000是建议的最小值 如果我要把它设为1000,为什么不设为1000000或100000000呢?1000的建议背后是否有原因,是否有确定每个用例正确值的最佳实践?Rfc2898DeriveBytes实现了PBKDF2。此算法使用salt和key拉伸从密码创建相对安全的密钥(正常长度的密码并不那么安全)。为了使暴力破解密码更加困难,它使用了迭代计数(这是创建密钥所增加的线性成本)。合

Rfc2898DeriveBytes
类的
IterationCount
属性的用途是什么。没有太多的说明,但它确实说1000是建议的最小值


如果我要把它设为1000,为什么不设为1000000或100000000呢?1000的建议背后是否有原因,是否有确定每个用例正确值的最佳实践?

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

没有标准金额;基本上,您可以将其设置为CPU性能方面可以接受的值。1000是标准内的建议值,但该标准已存在多年。现在,您应该从大约10K最小值开始+,以上任何值都会使攻击者更难找到生成相同“密钥”的密码

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


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

我知道这是一个广泛的主题(说得温和些),很可能超出了本论坛的范围,但请您简要阐述一下迭代过程中会发生什么?例如,“在每次迭代过程中,都会发生“X”,这使得生成的密钥变得更强。”@roryap为了简化,散列(X)将是一次迭代,而散列(散列(X))将是三次迭代。PBKDF2并没有那么简单,但有一个基本的想法。@ntoskrnl--谢谢,这正是我想要的。还有owlstead,谢谢你的回答。@roryap感谢接受,删除了到标准的链接,因为我必须承认你需要一些知识才能知道标准中的函数F是一个HMAC,它依赖于散列。总体思路是一样的:散列是在自身+更多数据上迭代的。散列(hash(hash(x)))是Rainbow表的候选。。最好使用Rfc2898。