修改MD5加密 提高网站安全

ps:这样一来,想暴力破解的话也只有获得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是征对所有的信息的,而我们这样的改变,仅仅用在一个网站上的几千个,上万个用户的话,应该是没有多大问题的,但是我们要从数学上证明它这个改变后也能满足文章开始时说的三个条件的话,确实有一定的难度,这就让读者去讨论一下吧。