加密技術(shù)是如何運(yùn)用在密碼中的?

對(duì)于打開(kāi)了某個(gè)網(wǎng)站,輸入了用戶名和密碼。在很早的時(shí)候,系統(tǒng)里可能直接存的就是用戶的明文密碼,密碼是什么就存什么,然后每次校驗(yàn)直接匹配就好了。后來(lái)人們開(kāi)始使用哈希對(duì)密碼加密,得到現(xiàn)在的普遍使用的密文。加密后的密碼用一連串的字符表示,所以即使別人竊取了你的密碼。他們?nèi)绻恢涝趺唇饷?,他們只能得到一連串的字符,所以這也是一道防線。

最簡(jiǎn)單的基于密文的密碼存儲(chǔ)策略(通??赡苁荕D5加密方式)就是我下面畫的圖:

加密技術(shù)是如何運(yùn)用在密碼中的?

哈希算法是一個(gè)單向的函數(shù),將任意大小的數(shù)據(jù)轉(zhuǎn)換成統(tǒng)一長(zhǎng)度的密文,并且無(wú)法被反向計(jì)算。并且每個(gè)不同數(shù)據(jù)通過(guò)哈希函數(shù) 轉(zhuǎn)換成的結(jié)果都是不同的。

程序中真正比對(duì)的是密文哈希值,只有相同才被授權(quán)。不相同也不要告知到底是用戶名錯(cuò)誤還是密碼錯(cuò)誤,給出一個(gè)模糊的提示就行,防攻擊者在不知道密碼的情況下,遍歷出可用的用戶名。

不是所有的哈希函數(shù)都是安全的,適用于加密的。有些哈希函數(shù)是用于哈希表這類數(shù)據(jù)結(jié)構(gòu),方便快速查找的。適用于加密的有類似于:SHA256,SHA512,RipeMD之類的哈希函數(shù)。

最后要說(shuō)明,單純的哈希加密太容易破解了,從目前的狀況看它并不安全。

之所以說(shuō)單純的哈希加密并不安全因?yàn)槠平獾姆绞接泻芏?,鑒于現(xiàn)在計(jì)算機(jī)性能(CPU發(fā)展已經(jīng)到了一個(gè)瓶頸,現(xiàn)在普通的筆記本性能幾乎就是20年前的超級(jí)計(jì)算機(jī))的提升以及黑客技術(shù)的進(jìn)步,很多網(wǎng)站都提供了破解哈希的功能。下面列舉出一些常用的破解方式:

暴力破解(這是不可阻止的破解方式之一,在給定長(zhǎng)度的情況下嘗試各種字符的組合,雖然效率非常低,但通過(guò)遍歷最終一定會(huì)得到密碼,相當(dāng)于把所有的可能都嘗試一遍。)

字典攻擊(同樣是不可阻止的破解方式之一,相當(dāng)于暴力破解的升級(jí)版,通過(guò)收集常用的單詞、詞組、密碼然后將所有的都存儲(chǔ)起來(lái),根據(jù)這些更加接近的數(shù)據(jù)進(jìn)行比對(duì),碰運(yùn)氣去猜。)

查表法(預(yù)先計(jì)算密碼字典中得每個(gè)密碼,然后把哈希值和對(duì)應(yīng)密碼存儲(chǔ)到一個(gè)快插查詢的數(shù)據(jù)結(jié)構(gòu)中,以后就查詢這個(gè)表就行了。)

彩虹表(這才是大殺器,說(shuō)白了就是把一定長(zhǎng)度的明文密碼以及對(duì)應(yīng)的哈希密碼都存儲(chǔ)下來(lái),然后按照查表法的方式進(jìn)行破解。)

我們上面說(shuō)到的幾種破解方式都是基于一個(gè)最基本的原則,所有密碼都以相同的方式進(jìn)行哈希加密。也就是說(shuō)如果兩個(gè)賬號(hào)明文密碼相同,他們哈希后得到的密文也是相同的。如果我們能通過(guò)一些“小手段”讓它們不同,那么破解的難度就是指數(shù)級(jí)的倍增了。

具體的做法就是在密碼中加入一段“隨機(jī)化”的字符串,然后再進(jìn)行哈?;_@樣就將原來(lái)的同樣明文映射到同樣密文的規(guī)則打亂了,其中混入的'隨機(jī)'字符串就是所謂的“鹽”。

加密技術(shù)是如何運(yùn)用在密碼中的?

這些思想都不復(fù)雜,但是在真正的工作中大多數(shù)人還是會(huì)犯下一些“錯(cuò)誤”,使我們的料加的并不好。比如:

“鹽值”的長(zhǎng)度太短(通常要和密文長(zhǎng)度一樣才行)或者“鹽值”出現(xiàn)重復(fù)。

哈希函數(shù)進(jìn)行嵌套或者組合使用(非常重要的一點(diǎn),別相信自己發(fā)明的某種加密方式,使用由密碼學(xué)家研究出來(lái)的標(biāo)準(zhǔn)算法。)

盡量避免使用已經(jīng)過(guò)時(shí)或者低端的哈希函數(shù),例如:MD5、SH1等,推薦SH256、SH512等等。

“鹽值”的產(chǎn)生并不是一個(gè)隨意的rand函數(shù),要使用基于加密的偽隨機(jī)函數(shù)生成器,更加高度的隨機(jī)性。