我很好奇是否有人在确定使用 PBKDF2(特别是 SHA-256)时有多少次迭代“足够好”时有任何建议或参考点。当然,“足够好”是主观的,很难定义,因应用程序和风险状况而异,今天的“足够好”明天可能还不够“好”……
但问题仍然存在,业界目前认为“足够好”是什么?有哪些参考点可供比较?
我找到的一些参考资料:
- 2000 年 9 月 - 推荐 1000 多轮(来源:RFC 2898)
- 2005 年 2 月 - Kerberos 5 中的 AES“默认”为 4096 轮 SHA-1。(来源:RFC 3962)
- 2010 年 9 月 - ElcomSoft 声称 iOS 3.x 使用 2,000 次迭代,iOS 4.x 使用 10,000 次迭代,显示 BlackBerry 使用 1(未说明确切的哈希算法)(来源:ElcomSoft)
- 2011 年 5 月 - LastPass 使用 100,000 次 SHA-256 迭代(来源:LastPass)
- 2015 年 6 月 - StableBit 使用 200,000 次 SHA-512 迭代(来源:StableBit CloudDrive Nuts & Bolts)
- 2015 年 8 月 - CloudBerry 使用 SHA-1 的 1,000 次迭代(来源:CloudBerry Lab Security Consideration (pdf))
对于您如何确定多少次迭代对您的应用程序来说“足够好”,我将不胜感激。
作为附加背景,我正在考虑将 PBKDF2-SHA256 作为用于对具有安全意识的网站存储的用户密码进行哈希处理的方法。我计划的 PBKDF2 盐是:每个用户随机盐(与每个用户记录一起存储在明文中)与全局盐异或。目的是增加暴力破解密码的成本,并避免泄露具有相同密码的用户对。
参考:
- RFC 2898:PKCS #5:基于密码的加密规范 v2.0
- RFC 3962:Kerberos 5 的高级加密标准 (AES) 加密
- PBKDF2:基于密码的密钥派生函数 v2