再談哈希(HASH)加密算法

目前很多網(wǎng)站都用 MD5 算法保存用戶密碼,但對(duì)于哈希(HASH)加密算法的認(rèn)識(shí)還存在很多誤區(qū),所以今天就有必要再重新認(rèn)識(shí)一下哈希加密算法。

一、哈希加密算法不是加密算法

哈希加密算法是一種消息摘要算法,不是一種加密算法,但由于其單向運(yùn)算,具有一定的不可逆性,成為加密算法中的一個(gè)構(gòu)成部分,完整的加密機(jī)制不能僅依賴哈希加密算法。

二、哈希加密算法的破解與社會(huì)工程學(xué)

哈希加密算法本身為單向性,很難直接破解,現(xiàn)有的破解都是將常用字符計(jì)算HASH值后反向比較。例如密碼123456,假設(shè)MD5值為1ab9744e58acee3ed8f03508cbf82bf5,那么數(shù)據(jù)庫中查到MD5值即知道了密碼。通過社會(huì)工程學(xué)的應(yīng)用,大量常用密碼已可直接破解。

三、哈希加密算法的碰撞現(xiàn)象

哈希加密算法可以理解為將任意的信息經(jīng)過提煉后,成為一個(gè)定長(zhǎng)的字符串。世界上的信息數(shù)量為無窮大,所以定長(zhǎng)的字符串不可能表達(dá)所有的摘要,因此存在所謂的“碰撞”,即2個(gè)同樣的信息源摘要是一樣的。

2004年山東大學(xué)王曉云提出有關(guān)快速查找“碰撞對(duì)”的算法,引起安全界對(duì)于HASH算法的極大關(guān)注,NIST提出到2010年不再使用MD5和SHA-1。目前仍可使用的哈希加密算法包括:SHA-256,SHA-512,SHA-224,SHA-384。

2011年2月FIPS180-4草案還增加了SHA-512/224,SHA-512/256。這些算法都是SHA-2系列算法,SHA3-256算法也即將到來。

關(guān)于碰撞必須還要說的是,有幾率找到碰撞對(duì),但并不意味著哈希加密算法整體被否定,例如將合同文本整體哈希加密算法并數(shù)字簽名,如果找到碰撞對(duì),很難還原成一個(gè)正常的文本,如果是一堆亂碼,沒有人會(huì)認(rèn)可此文件,在不篡改哈希加密算法的前提下無法有實(shí)際意義的修改合同。

四、合理使用哈希加密算法

1. 廢除舊算法,至少使用SHA-256,64位操作系統(tǒng)SHA-512運(yùn)算速度更佳,建議選用。

2. 合理加點(diǎn)“SALT”,即干擾字符串。

例如:SALT1=C`3/$xUM,5ltL4pze;avf9#kgmET^ SALT2=1qYIs,vOSfn%UHhm5+3TX:#iety0d 計(jì)算HASH SHA-512(SALT1+用戶名+SALT2+密碼)

那么社會(huì)工程學(xué)和目前的暴力運(yùn)算是無法解決的。

3. 不要以為聯(lián)合使用HASH算法會(huì)安全。例如MD5+SHA1,或者SHA1(MD5)嵌套,有文獻(xiàn)證實(shí)都是無效的。

小知識(shí)之社會(huì)工程學(xué):

社會(huì)工程學(xué)是關(guān)于建立理論通過自然的、社會(huì)的和制度上的途徑并特別強(qiáng)調(diào)根據(jù)現(xiàn)實(shí)的雙向計(jì)劃和設(shè)計(jì)經(jīng)驗(yàn)來一步一步地解決各種社會(huì)問題。