萬盛學電腦網

 萬盛學電腦網 >> 病毒防治 >> 修改MD5加密 有效的提高網站安全

修改MD5加密 有效的提高網站安全

  也許提到MD5時大家都很熟,但你真的是這樣嗎?了解其是如何進行散列的實際過程嗎?雖然我們一般的人是不用這樣去尋根問底,要用的時候直接去下載別人已編好的程序用就得了。

  由於算法大多的人都是知道的,所以現在網上有很多破解MD5散列值的工具,但我們搞安全的完全可以發揮我們的想象力充分地調動自己的積極性,是否想過自己也重改造一個MD5的算法呢?讓現在所有的破解MD5的工具下課呢?因為MD5在我們網絡中實在是用得太廣了,各網站要保存用戶的資料,但明文保存時又怕萬一被哪個攻擊者攻入網站,下載了數據庫,所以我們常用MD5進行散列各種重要的資料。但是現在有好多工具是可以進行簡單的破解的。

  我們先來了解一下MD5這個散列算法,然後我再一個例子說明如何提高了網站的安全性。

  下邊我只是簡單的說明,x與y的所在空間就不作介紹了(x∈A,y∈B)。我們來看看一個散列算法一般是要滿足下面三個條件之一:

  1、 H是一個單向函數。即對幾乎所有的H(x)=y,已知y要求x,則在計算上是不可行的。

  2、 已知x,找x′∈A,使H(x)=H(x′)在計算上是不可能的,這也就是弱無碰撞性。

  3、 找一對x和x’, 而x≠x’,使H(x)=H(x′)在計算上也是不可行的,這也就是強無碰撞性。

  這樣就稱為安全保密的Hash函數。下邊是對消息的散列過程:

  由上邊的表大家也許看到了左邊是不是要求輸入一個初始向量IV,這也就是今天我說明的關鍵地方,這個初始向量要MD5算法中是由A、B、C、D四個緩沖區寄存器存放的,而每一個寄存器是32比特。它們的初始值是:

  a = 0x67452301

  b = 0x EFCDAB89

  c = 0x 98BADCFE

  d = 0x 10325476

  在這我們可以看到這四個16進制的值,這也可看做是一種初始的種子,如果大家對MD5的算法過程清楚的話,我們可知在這過程在主要是一些異或、求模等的運算,對每一個分組512比特消息進行處理的,而每一分組都進行4*16次的運算,所以我有個大膽的想法,只是我們把初始值進行稍微的改變的話,那不就是變成另外的MD5散列算法了嗎!我們知道A、B、C、C四個值共是16進制的4*8=32位,那麼我們都可計算可能被破解的概率空間,如果動得更多的話,那被破解的可能性也就越小。只要我們改變一位的話,而同時我們也不必改動算法的其它部分,從而也不會對我們的程序進行多大的變動。是不是就找到一種新的散列算法了呢,其實,對散列算法有研究的就可知,美國的信息壓縮標准SHA也是與MD5有點相似(主要是指思路)。

  現在介紹了這些有關的MD5知識後,我們來看看如何修改我們網站管理程序的源碼,這裡我以國內有名的動網論壇DVBBS7.0說明。

  我們都知道動網論壇的用戶的數據如密碼,提問的問題的答案是以MD5散列的,通常攻擊者就是下載了數據庫來進行破解而得到管理員的密碼的,默認的是放在這個路徑下的:bbs/data/dvbbs7.mdb 而我們一般是采用的是修改數據庫的名字,同時相應的修改一下conn.asp中的相關設置。

  現在我們的方法是你找到這個文件/inc/md5.asp。這個頁面就是我們進行散列處理的程序,只是在這修改一下的話,我們就產生了自己的新MD5散列算法。然後以記事本的方式打開它,找到這個地方。

  看到了吧,a、b、c、d這四個值了吧,就是我們前邊談的喲,看你如何改了。隨你的便了吧!但我建議是你最好改一位就可了,還是盡量少改吧。如你可把a = 0x67452301改為a = 0x67452300這樣你就用了一個與眾不同的MD5算法呢,這樣,哪怕就是你的數據庫被下載了,你也可以放心的用了。讓他們的破解MD5的工具見鬼去吧!

  但是我要說明的是,了解MD5過程的人可能會問,你這樣改變會影響操作嗎?這個問題專家可能都很難把它論證。同時我給大家要說的是,MD5是征對所有的信息的,而我們這樣的改變,僅僅用在一個網站上的幾千個,上萬個用戶的話,應該是沒有多大問題的,但是我們要從數學上證明它這個改變後也能滿足文章開始時說的三個條件的話,確實有一定的難度,這就讓讀者去討論一下吧。

copyright © 萬盛學電腦網 all rights reserved