是否可以使用6作为64个字符串的bcrypt algortihm的成本?

时间:2018-02-05 23:16:39

标签: php security cryptography unique bcrypt

在这种情况下理想$cost应该是什么来防止暴力攻击,甚至是 ASIC或FPGA

$cost = '06';
$secret_key = bin2hex(random_bytes(64);
$store_data = crypt($secret_key), '$2a$.$cost.$'.bin2hex(random_bytes(16)).'$')

之情况

公司提供由上述代码($secret_key)生成的用户密钥()来访问撤销一些钱,这个秘密密钥不应该被黑客猜到。

$store_data是我们存储在数据库中的字符串。

因此,如果攻击者可以访问数据库并了解$store_data变量,则他应该无法访问$secret_key

我使用了bcrypt算法进行哈希,但我不确定,在这种情况下,cost = 6足够安全。

2 个答案:

答案 0 :(得分:0)

1999年,当设计bcrypt时,设置了当时的成本因子,以便至少 250 ms来计算哈希值。

这是基于这样一个事实:在1977年,在VAX-11/780上,地穴的评估速度大约是每秒3.6次。 (即每个密码277毫秒)

  • 1999年,6美元花费了300毫秒
  • 但今天成本系数为6 waaay 太低(4.9毫秒)

在我的台式电脑上:

  • 费用6: 4.9毫秒
  • 费用7: 10.1毫秒
  • 费用8: 20.8毫秒
  • 费用9: 41.6毫秒
  • 费用10: 83.2 ms < - 当前默认费用(在我的电脑上太低)
  • 费用11: 166.8毫秒
  • 费用12: 333.4毫秒 < - 适当的费用
  • 费用13: 667.9毫秒
  • 费用14: 1,336.5毫秒

答案 1 :(得分:0)

您不应该完全使用BCrypt ,这不是BCrypt的目的。

BCrypt用于散列用户创建的密码,该密码可能很短,缺乏熵或在许多站点之间重复使用。它不是用于哈希安全生成的长令牌。

您应该只使用SHA256这样的快速加密安全哈希,而不要问您的成本因素可以低到什么程度。完全无需支付BCrypt的成本(以任何成本因子),也不会增加安全性。