为什么BCrypt比仅在数据库中存储salt和加密密码更安全?

时间:2015-08-18 16:27:21

标签: bcrypt

我正在读这篇文章,似乎BCrypt是:

  • 从密码计算哈希值很慢(好事)
  • 不会在数据库中存储salt,而只是直接在密码中存储
  • 使用log_rounds参数,该参数表示计算内部哈希函数的次数。

所以散列看起来像这样:

hashed = hashpw(plaintext_password, gensalt(log_rounds=13))
print hashed
'$2a$13$ZyprE5MRw2Q3WpNOGZWGbeG7ADUre1Q8QO.uUUtcbqloU0yvzavOm'

但如果这是存储在数据库中的内容,如果数据库被黑客攻击,我们是否仍然容易受到攻击? BCrypt哈希包含salt和编码密码,所以为什么这比仅将盐和密码存储在数据库中更好(文章称之为解决方案#4)?

主要区别在于BCrypt散列机制的缓慢程度,这使得BC一长串常用密码变得困难和昂贵吗?

1 个答案:

答案 0 :(得分:2)

你不能只是对密码进行哈希处理,如果这样做,它将容易受到字典攻击;因此,您在密码之前加密密码;这就是BCrypt所做的。

密码盐可以是公开的,但是每个密码必须是唯一的。它们的目的是防止对哈希进行字典攻击(这样你就无法查看与密码相对应的预制哈希列表)。

与PBKDF2一样,Bcrypt是一种自适应功能;随着更多计算能力的出现,您可以在以后增加迭代,使哈希不易受到强力攻击。尽管如此,Bcrypt在GPU上加速比PBKDF2更难。