前言

用过暴力破解工具 hashcat 的都知道,这款软件的强大之处在于它能充分利用 GPU 计算,比起 CPU 要快很多。所以在破解诸如 WiFi 握手包、数据库中的口令 Hash 值时,能大幅提高计算效率。

当然 GPU 仍属于通用硬件,显然还不是最优化的。要是为特定的算法打造特定的硬件,效率更是高出几个量级。比特币矿机就是很好的例子。

硬件的仍在不断进步,系统安全等级若不提高,暴力破解将会越来越容易。因此,一种能抵抗「硬件破解」的 Hash 算法,显得很有必要。

时间成本

在探讨如何对抗硬件之前,先来讲解过去是如何对抗「暴力破解」的。

一些经典的 Hash 算法,例如 MD5、SHA256 等,计算速度是非常快的。如果口令 Hash 用了这类函数,将来攻击者跑字典时,可达到非常高的速度。那些强度不高的口令,很容易被破解。

为了缓解这种状况,密码学家引入了「拉伸」的概念:反复 Hash 多次,从而增加计算时间。

例如 PBKDF2 算法就运用了这种思想。它的原理很简单,对指定函数 F 反复进行 N 次:

function PBKDF2(F, ..., N)
    ...
    for i = 0 to N