悟空云課堂 | 代碼安全第四期:可逆的單向哈希漏洞缺陷

該欄目為中科天齊全新規(guī)劃的悟空云課堂,旨在科普軟件安全相關(guān)知識(shí),助力企業(yè)有效防范軟件安全漏洞,提升網(wǎng)絡(luò)安全防護(hù)能力。本期主題為可逆的單向哈希漏洞的相關(guān)介紹。
可逆的單向哈希漏洞是一種程序缺陷,顧名思義,是由于單向哈希在某些情況下可逆導(dǎo)致的。想要了解可逆的單向哈希漏洞,首先我們需要學(xué)習(xí)一下什么是單向哈希。
一、單向哈希是什么?
哈希(Hash),是把任意長(zhǎng)度的輸入,通過(guò)散列算法變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以理論上來(lái)說(shuō),從散列值無(wú)法確定唯一的輸入值,因此哈希是具備單向性的。
但隨著計(jì)算機(jī)算力的進(jìn)步,一些單向哈希已經(jīng)無(wú)法保證其單向性。無(wú)法保證單向性的哈希,被稱為可逆單向哈希。當(dāng)可逆單向哈希被用于需要具備單向?qū)傩缘陌踩惴〞r(shí),可造成嚴(yán)重危害。例如,一個(gè)身份驗(yàn)證系統(tǒng)將傳入的密碼生成哈希值,并存入數(shù)據(jù)庫(kù)。攻擊者可通過(guò)比較該哈希值和已存儲(chǔ)在數(shù)據(jù)庫(kù)中另外的哈希值,去碰撞得出一個(gè)可生成同樣哈希值的密碼,從而通過(guò)身份驗(yàn)證。
二、常見(jiàn)單向散列函數(shù)(Hash函數(shù))有哪些?
MD5(Message Digest Algorithm5):是RSA數(shù)據(jù)安全公司開(kāi)發(fā)的一種單向散列算法,MD5被廣泛使用,可以用來(lái)把不同長(zhǎng)度的數(shù)據(jù)塊進(jìn)行暗碼運(yùn)算成一個(gè)128位的數(shù)值。1996年后該算法被證實(shí)存在弱點(diǎn),可以被加以破解,對(duì)于需要高度安全性的數(shù)據(jù),專家一般建議改用其他算法,如SHA-2。2004年,證實(shí)MD5算法無(wú)法防止碰撞(collision),因此不適用于安全性認(rèn)證,如SSL公開(kāi)密鑰認(rèn)證或是數(shù)字簽名等用途。
SHA(Secure Hash Algorithm):這是一種較新的散列算法,可以對(duì)任意長(zhǎng)度的數(shù)據(jù)運(yùn)算生成一個(gè)160位的數(shù)值。SHA家族的五個(gè)算法,分別是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美國(guó)國(guó)家安全局(NSA)所設(shè)計(jì),并由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)發(fā)布;是美國(guó)的政府標(biāo)準(zhǔn)。后四者有時(shí)并稱為SHA-2。但SHA-1的安全性如今被密碼學(xué)家嚴(yán)重質(zhì)疑;雖然至今尚未出現(xiàn)對(duì)SHA-2有效的攻擊,它的算法跟SHA-1基本上仍然相似;因此有些人開(kāi)始發(fā)展其他替代的雜湊算法。
MAC(Message AuthenticationCode):消息認(rèn)證代碼,是一種使用密鑰的單向函數(shù),可以用它們?cè)谙到y(tǒng)上或用戶之間認(rèn)證文件或消息。HMAC(用于消息認(rèn)證的密鑰散列法)就是這種函數(shù)的一個(gè)例子。
CRC(Cyclic Redundancy Check):循環(huán)冗余校驗(yàn)碼,CRC校驗(yàn)由于實(shí)現(xiàn)簡(jiǎn)單,檢錯(cuò)能力強(qiáng),被廣泛使用在各種數(shù)據(jù)校驗(yàn)應(yīng)用中。占用系統(tǒng)資源少,用軟硬件均能實(shí)現(xiàn),是進(jìn)行數(shù)據(jù)傳輸差錯(cuò)檢測(cè)地一種很好的手段(CRC 并不是嚴(yán)格意義上的散列算法,但它的作用與散列算法大致相同,所以歸于此類)。
三、可逆的單向哈希漏洞會(huì)造成哪些后果?
關(guān)鍵詞:繞過(guò)身份驗(yàn)
因?qū)?shù)據(jù)的加密算法不再安全,攻擊者通過(guò)提供與備用密碼相同的目標(biāo)哈希值,繞過(guò)身份驗(yàn)證,從而進(jìn)行惡意行為。
四、如何修補(bǔ)可逆的單向哈希漏洞?
及時(shí)更新加密算法,使用安全性高的加密算法取代不再被認(rèn)為是安全的加密算法。
五、可逆的單向哈希漏洞樣例:
![]()
六、課后小問(wèn)題:
可逆單向哈希漏洞的構(gòu)成條件是什么?
(答案:當(dāng)使用不再被認(rèn)為是安全的加密算法對(duì)數(shù)據(jù)進(jìn)行加密,就構(gòu)成了一個(gè)該類型的安全漏洞。)

