security - bcrypt 如何比增加 SHA 迭代次数更具 future 证明?

标签 security hash cryptography bcrypt

我一直在研究 bcrypt 散列,当然该方案的一大好处是它的“适应性”。但是,它如何比简单地增加您对 SHA-1 哈希进行的迭代量更具适应性?假设,不是 SHA-1 对值进行 1000 次散列,而是将其增加到 10,000 次迭代。这不是达到同样的目标吗?是什么让 bcrypt 更具适应性?

最佳答案

使用散列函数进行多次迭代有一些微妙之处,因为必须涉及某种“加盐”,并且因为现有的散列函数不像预期的那样“随机”;所以必须小心,在这种情况下你会得到 PBKDF2 . PBKDF2 是为 key 派生而设计的,这与密码散列不完全相同,但结果证明它也非常擅长。

bcrypt 比 PBKDF2-with-SHA-1 有(轻微)优势,因为 bcrypt 源自 Blowfish块密码。多次迭代的目的是使密码处理变慢,特别是对攻击者来说变慢。我们容忍该函数对于正常、诚实的系统来说变慢,因为它阻止了广泛的密码猜测。但是攻击者可能会使用正常系统不使用的硬件,例如programmable GPU ,这极大地促进了适合这种硬件的计算。 Blowfish 和 bcrypt 使用基于 RAM 的查找表(在处理过程中修改的表);这样的表对于通用 CPU 来说很容易处理,但在 GPU 上却很麻烦;因此,bcrypt 在某种程度上阻碍了攻击者使用 GPU 进行的处理增强。这是一个额外的好处,它使 bcrypt 比 PBKDF2 更适合密码存储。

关于security - bcrypt 如何比增加 SHA 迭代次数更具 future 证明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6791126/

相关文章:

python - 纯 Python 中字符串的潜在哈希算法有哪些?

r - 为什么NaN和Inf-Inf的哈希值不同?

javascript - 使用 Python 和 Javascript 的 AES CTR 模式出现奇怪问题

java - 如何在 java 中使用由 openssl 生成的 .key 和 .crt 文件?

javascript - 如果验证码不安全,可以使用什么代替?

vb.net - 使用 SHA256 + SHA512 哈希作为密码?

c# - 在数据库中存储散列密码和盐值的最佳方式 - varchar 或二进制?

java - 跨 Java 和 Python 的 PKI 验证

azure - 机器人如何发现我的 Azure 子域?

security - 在kubernetes etcd存储中加密 secret 数据