【问题标题】:Why is BCrypt more secure than just storing a salt and an encrypted password in the database?为什么 BCrypt 比在数据库中存储盐和加密密码更安全?
【发布时间】:2015-11-11 16:59:43
【问题描述】:

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

  • 从密码计算哈希的速度很慢(一件好事)
  • 不在数据库中存储盐,而是直接存储在密码中
  • 使用 log_rounds 参数表示计算内部哈希函数的次数。

所以哈希看起来像这样:

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

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

主要区别是 BCrypt 的散列机制缓慢,这使得 BCrypt 的一长串常用密码既困难又昂贵?

【问题讨论】:

  • 就我所读到的 BCrypt 安全性而言,这实际上是基于他的缓慢性,因为您使用的加密越好,它们的速度就越慢。没有人拥有的一件事是时间。尤其是当您尝试暴力破解密码时

标签: bcrypt


【解决方案1】:

您不能只对密码进行哈希处理,否则将容易受到字典攻击;因此,您在散列密码之前对密码进行加盐;这就是 BCrypt 所做的。

密码盐可以是公开的,但是对于每个密码来说它们必须是唯一的。它们的目的是防止对哈希的字典攻击(因此您无法查看与密码对应的预制哈希列表)。

和PBKDF2一样,Bcrypt是一个自适应函数;您可以稍后增加迭代次数,以使哈希值随着计算能力的增强而不易受到暴力攻击。尽管 Bcrypt 在 GPU 上比 PBKDF2 更难加速。

【讨论】:

    猜你喜欢
    • 2011-04-29
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多