什么是合适的PBKDF2设置?

时间:2012-10-02 18:45:28

标签: php security hash passwords pbkdf2

我有一些关于什么是合适的PBKDF2设置的问题。我用谷歌搜索答案,大多空手而归。

基本上,我想知道输入pbkdf2.php(找到here)的适当值是什么,考虑到2012年的技术状态。什么能让我合理地期望我编码的密码不会未来几年可以被非政府实体破解吗?

以下是我正在考虑的事项:

define("PBKDF2_HASH_ALGORITHM", "sha512");
define("PBKDF2_ITERATIONS", 20000);
define("PBKDF2_SALT_BYTES", 512);
define("PBKDF2_HASH_BYTES", 512);

我知道还有许多其他因素可以创造良好的安全性。以下是我正在使用的其他安全措施的概要:

  • 包含至少2个数字,2个字母和2个符号的12位数密码
  • 每6个月更改一次所需的密码
  • php mysqli为所有数据库访问准备好的语句
  • 所有表格上的代币
  • 错误登录的延迟时间为5秒,
  • 来自同一IP的10次错误登录后的黑名单
  • 错误登录和黑名单触发相同的响应
  • HTTPS
  • 我正在使用会话,我每10页更改一次会话标识符 每次访问页面时,都会在敏感页面上显示。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

举个例子,大多数现代Linux发行版中的sha512crypt的默认设置(/ etc / shadow条目中的$ 6 $)使用5000次迭代和16个字节的salt。那很慢。但是当谈到哈希时,我不会批评你的过度杀伤;)

答案 1 :(得分:0)

这个问题没有一个正确的答案,因为不同的应用程序需要不同级别的安全性。正确的做法是对您的应用程序进行基准测试,并使用尽可能高的设置,因为您的服务器可以以响应的方式轻松处理。 (当然,在负载测试下)

通过首先实施PBKDF2而不是像“快速”,“消息摘要”一样的算法,例如MD5或SHA-1,你已经比普通系统安全得多。