我理解为什么散列算法应该很慢,但是使它变慢的方法对散列的强度很重要吗?我读过的所有内容都表明该算法的计算速度应该很慢 - 在数千次迭代中对事物进行哈希处理,或者将其与巨大的字符串连接以减慢它的速度。这似乎会给 CPU 带来不必要的压力。难道你不能用一个好的随机盐对密码进行一次哈希处理,然后暂停线程一段时间吗?
减慢哈希算法的方法
信息安全
哈希
2021-08-16 17:38:53
2个回答
目标不是让您计算哈希变慢。目标是使攻击者计算哈希变慢。更具体地说,对于拥有快速硬件和哈希和盐副本的攻击者而言,速度较慢,因此有能力发起离线攻击。攻击者不需要在计算期间暂停线程,因为您将其添加到应用程序中。他将使用软件和硬件来尽可能快速有效地计算哈希值。因此,为了让他在计算上变得困难,使用他所有的快速硬件和高效的散列软件,散列也必须在计算上对你来说是困难的。
运行几千次迭代或附加很长的盐不一定是使哈希运行缓慢的最佳方法,但它是最明显(最简单)的一种。
其目的首先是减缓大规模并行攻击。攻击者将无法在合理的时间内在单个 CPU 上暴力破解您的哈希。他将使用僵尸网络或具有多个 GPU(或两者)的机器。
运行相同的哈希一千次确实不是最明智的事情,因为并行运行这个任务很容易,而且它主要强调 ALU,两者都是 GPU 计算的完美匹配。另一方面,对 CPU 的影响可能非常明显(取决于您进行了多少次迭代)。
理想情况下,慢散列将涉及使并行化变得困难并且除了原始 ALU 之外还利用带宽的操作,例如需要和接触大量 RAM(这也限制了可以在僵尸上运行而不会被检测到的实例数量)或需要在 GPU 上进行昂贵的操作(例如随机访问写入)。
当然,这并不像简单地运行哈希几千次迭代那样简单,这就是为什么人们通常会这样做。