也許提到MD5時(shí)大家都很熟,但你真的是這樣嗎?了解其是如何進(jìn)行散列的實(shí)際過(guò)程嗎?雖然我們一般的人是不用這樣去尋根問(wèn)底,要用的時(shí)候直接去下載別人已編好的程序用就得了 。
由于算法大多的人都是知道的,所以現(xiàn)在網(wǎng)上有很多破解MD5散列值的工具,但我們搞安全的完全可以發(fā)揮我們的想象力充分地調(diào)動(dòng)自己的積極性,是否想過(guò)自己也重改造一個(gè)MD5的算法呢?讓現(xiàn)在所有的破解MD5的工具下課呢?因?yàn)镸D5在我們網(wǎng)絡(luò)中實(shí)在是用得太廣了,各網(wǎng)站要保存用戶(hù)的資料,但明文保存時(shí)又怕萬(wàn)一被哪個(gè)攻擊者攻入網(wǎng)站,下載了數(shù)據(jù)庫(kù),所以我們常用MD5進(jìn)行散列各種重要的資料 。但是現(xiàn)在有好多工具是可以進(jìn)行簡(jiǎn)單的破解的 。
我們先來(lái)了解一下MD5這個(gè)散列算法,然后我再一個(gè)例子說(shuō)明如何提高了網(wǎng)站的安全性 。
下邊我只是簡(jiǎn)單的說(shuō)明,x與y的所在空間就不作介紹了(x∈A,y∈B) 。我們來(lái)看看一個(gè)散列算法一般是要滿(mǎn)足下面三個(gè)條件之一:
1、 H是一個(gè)單向函數(shù) 。即對(duì)幾乎所有的H(x)=y,已知y要求x,則在計(jì)算上是不可行的 。
2、 已知x,找x′∈A,使H(x)=H(x′)在計(jì)算上是不可能的,這也就是弱無(wú)碰撞性 。
3、 找一對(duì)x和x’, 而x≠x’,使H(x)=H(x′)在計(jì)算上也是不可行的,這也就是強(qiáng)無(wú)碰撞性 。
這樣就稱(chēng)為安全保密的Hash函數(shù) 。下邊是對(duì)消息的散列過(guò)程:
由上邊的表大家也許看到了左邊是不是要求輸入一個(gè)初始向量IV,這也就是今天我說(shuō)明的關(guān)鍵地方,這個(gè)初始向量要MD5算法中是由A、B、C、D四個(gè)緩沖區(qū)寄存器存放的,而每一個(gè)寄存器是32比特 。它們的初始值是:
a = 0x67452301
b = 0x EFCDAB89
c = 0x 98BADCFE
d = 0x 10325476
在這我們可以看到這四個(gè)16進(jìn)制的值,這也可看做是一種初始的種子,如果大家對(duì)MD5的算法過(guò)程清楚的話(huà),我們可知在這過(guò)程在主要是一些異或、求模等的運(yùn)算,對(duì)每一個(gè)分組512比特消息進(jìn)行處理的,而每一分組都進(jìn)行4*16次的運(yùn)算,所以我有個(gè)大膽的想法,只是我們把初始值進(jìn)行稍微的改變的話(huà),那不就是變成另外的MD5散列算法了嗎!我們知道A、B、C、C四個(gè)值共是16進(jìn)制的4*8=32位,那么我們都可計(jì)算可能被破解的概率空間,如果動(dòng)得更多的話(huà),那被破解的可能性也就越小 。只要我們改變一位的話(huà),而同時(shí)我們也不必改動(dòng)算法的其它部分,從而也不會(huì)對(duì)我們的程序進(jìn)行多大的變動(dòng) 。是不是就找到一種新的散列算法了呢,其實(shí),對(duì)散列算法有研究的就可知,美國(guó)的信息壓縮標(biāo)準(zhǔn)SHA也是與MD5有點(diǎn)相似(主要是指思路) 。
現(xiàn)在介紹了這些有關(guān)的MD5知識(shí)后,我們來(lái)看看如何修改我們網(wǎng)站管理程序的源碼,這里我以國(guó)內(nèi)有名的動(dòng)網(wǎng)論壇DVBBS7.0說(shuō)明 。
我們都知道動(dòng)網(wǎng)論壇的用戶(hù)的數(shù)據(jù)如密碼,提問(wèn)的問(wèn)題的答案是以MD5散列的,通常攻擊者就是下載了數(shù)據(jù)庫(kù)來(lái)進(jìn)行破解而得到管理員的密碼的,默認(rèn)的是放在這個(gè)路徑下的:bbs/data/dvbbs7.mdb 而我們一般是采用的是修改數(shù)據(jù)庫(kù)的名字,同時(shí)相應(yīng)的修改一下conn.asp中的相關(guān)設(shè)置 。
現(xiàn)在我們的方法是你找到這個(gè)文件/inc/md5.asp 。這個(gè)頁(yè)面就是我們進(jìn)行散列處理的程序,只是在這修改一下的話(huà),我們就產(chǎn)生了自己的新MD5散列算法 。然后以記事本的方式打開(kāi)它,找到這個(gè)地方 。
看到了吧,a、b、c、d這四個(gè)值了吧,就是我們前邊談的喲,看你如何改了 。隨你的便了吧!但我建議是你最好改一位就可了,還是盡量少改吧 。如你可把a(bǔ) = 0x67452301改為a = 0x67452300這樣你就用了一個(gè)與眾不同的MD5算法呢,這樣,哪怕就是你的數(shù)據(jù)庫(kù)被下載了,你也可以放心的用了 。讓他們的破解MD5的工具見(jiàn)鬼去吧!
推薦閱讀
- 蘋(píng)果手機(jī)在哪設(shè)置DNS地址?iPhone怎么修改DNS地址
- 安卓手機(jī)在哪修改DNS地址?Android手機(jī)怎么修改DNS地址
- 只狼修改器怎么用
- 519值得修改的地方
- oppofindx中微信加密的操作步驟
- 文件加密——CAD如何設(shè)置密碼
- 京東白天怎么修改身份
- oppor17pro中微信加密的操作步驟
- oppoa5取消應(yīng)用加密的操作教程
- S65“上網(wǎng)鍵”功能手機(jī)上也能修改
