前言
用過暴力破解工具 hashcat 的都知道,這款軟件的強(qiáng)大之處在于它能充分利用 GPU 計(jì)算,比起 CPU 要快很多。所以在破解諸如 WiFi 握手包、數(shù)據(jù)庫(kù)中的口令 Hash 值時(shí),能大幅提高計(jì)算效率。
當(dāng)然 GPU 仍屬于通用硬件,顯然還不是最優(yōu)化的。要是為特定的算法打造特定的硬件,效率更是高出幾個(gè)量級(jí)。比特幣礦機(jī)就是很好的例子。
硬件的仍在不斷進(jìn)步,系統(tǒng)安全等級(jí)若不提高,暴力破解將會(huì)越來越容易。因此,一種能抵抗「硬件破解」的 Hash 算法,顯得很有必要。
時(shí)間成本
在探討如何對(duì)抗硬件之前,先來講解過去是如何對(duì)抗「暴力破解」的。
一些經(jīng)典的 Hash 算法,例如 MD5、SHA256 等,計(jì)算速度是非常快的。如果口令 Hash 用了這類函數(shù),將來攻擊者跑字典時(shí),可達(dá)到非常高的速度。那些強(qiáng)度不高的口令,很容易被破解。
為了緩解這種狀況,密碼學(xué)家引入了「拉伸」的概念:反復(fù) Hash 多次,從而增加計(jì)算時(shí)間。
例如 PBKDF2 算法就運(yùn)用了這種思想。它的原理很簡(jiǎn)單,對(duì)指定函數(shù) F 反復(fù)進(jìn)行 N 次:
function PBKDF2(F, ..., N) ... for i = 0 to N