我最近一直在学习密码学,以及慢散列如何最好地防止暴力攻击。我尝试在从 this resource 实现的 C++ 中使用 SHA-256 ,这太棒了,但速度非常非常快。我更改了我的一个暴力破解程序来搜索密码的 SHA-256 哈希值,看看是否匹配,结果并没有我希望的那么长。目前使用我自己制作的(相对非常慢的)暴力破解程序,我们得到一个这样的表:
Password | runtime plaintext | passwords/sec plaintext | runtime SHA-256 | passwords/sec SHA-256
zzz | 1.18 seconds | 149,985 | 6.2 seconds | 28,564
显然,熟练的攻击者会拥有一个以最快速度每秒猜测超过 28,000 个密码的程序。我尝试使用来自 OpenWall 的 Bcrypt ,但我找不到任何关于如何在我的实际程序中使用它的好文档!
是否有任何方法可以减慢我的散列方法,或者我应该使用另一种方法在 C++ 中进行散列?如果是后者,请告诉我您认为哪些资源可以帮助我——我刚刚开始学习密码学,了解不多。谢谢!!!
最佳答案
为了减慢散列速度,多次调用散列算法链接输出。因此,上一次哈希的输出是下一次迭代的输入。这样做 5,000 次(测试它以查看有多慢)以生成较慢的哈希。这依赖于没有已知的方法来缩短递归哈希。使用这种方法,您可以将散列速度降低到您需要的任何程度,比如在您的测试硬件上每秒 1 个散列。
关于c++ - 在 C++ 中减慢 SHA-256?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57018641/