一种特殊的MD5对称加密方法

一种特殊的MD5对称加密方法

也许提到MD5时大家都很熟,但你真的是这样吗?了解其是如何进行散列的实际过程吗?虽然我们一般的人是不用这样去寻根问底,要用的时候直接去下载别人已编好的程序用就得了。   

由于算法大多的人都是知道的,所以现在网上有很多破解MD5散列值的工具,但我们搞安全的完全可以发挥我们的想象力充分地调动自己的积极性,是否想过自己也重改造一个MD5的算法呢?让现在所有的破解MD5的工具下课呢?因为MD5在我们网络中实在是用得太广了,各网站要保存用户的资料,但明文保存时又怕万一被哪个攻击者攻入网站,下载了数据库,所以我们常用MD5进行散列各种重要的资料。但是现在有好多工具是可以进行简单的破解的。   

我们先来了解一下MD5这个散列算法,然后我再一个例子说明如何提高了网站的安全性。   

下边我只是简单的说明,xy的所在空间就不作介绍了(x∈A,y∈B)。我们来看看一个散列算法一般是要满足下面三个条件之一:  

1、 H是一个单向函数。即对几乎所有的Hx=y,已知y要求x,则在计算上是不可行的。   

2、 已知x,x′∈A,使Hx=Hx′)在计算上是不可能的,这也就是弱无碰撞性。

3、 找一对xx‘, 而x≠x’,使Hx=Hx′)在计算上也是不可行的,这也就是强无碰撞性。   

这样就称为安全保密的Hash函数。

下边是对消息的散列过程:   

由上边的表大家也许看到了左边是不是要求输入一个初始向量IV,这也就是今天我说明的关键地方,这个初始向量要MD5算法中是由ABCD四个缓冲区寄存器存放的,而每一个寄存器是32比特。它们的初始值是:  

a = 0x67452301   

b = 0x EFCDAB89   

c = 0x 98BADCFE   

d = 0x 10325476   

在这我们可以看到这四个16进制的值,这也可看做是一种初始的种子,如果大家对MD5的算法过程清楚的话,我们可知在这过程在主要是一些异或、求模等的运算,对每一个分组512比特消息进行处理的,而每一分组都进行4*16次的运算,所以我有个大胆的想法,只是我们把初始值进行稍微的改变的话,那不就是变成另外的MD5散列算法了吗!我们知道ABCD四个值共是16进制的4*8=32位,那么我们都可计算可能被破解的概率空间,如果动得更多的话,那被破解的可能性也就越小。只要我们改变一位的话,而同时我们也不必改动算法的其它部分,从而也不会对我们的程序进行多大的变动。是不是就找到一种新的散列算法了呢,其实,对散列算法有研究的就可知,美国的信息压缩标准SHA也是与MD5有点相似(主要是指思路)。   

现在介绍了这些有关的MD5知识后,我们来看看如何修改我们网站管理程序的源码,这里我以国内有名的动网论坛DVBBS7.0说明。   

我们都知道动网论坛的用户的数据如密码,提问的问题的答案是以MD5散列的,通常攻击者就是下载了数据库来进行破解而得到管理员的密码的,默认的是放在这个路径下的:bbs\data\dvbbs7.mdb 而我们一般是采用的是修改数据库的名字,同时相应的修改一下conn.asp中的相关设置。   

现在我们的方法是你找到这个文件\inc\md5.asp。这个页面就是我们进行散列处理的程序,只是在这修改一下的话,我们就产生了自己的新MD5散列算法。然后以记事本的方式打开它,找到这个地方。   

看到了吧,abcd这四个值了吧,就是我们前边谈的哟,看你如何改了。随你的便了吧!但我建议是你最好改一位就可了,还是尽量少改吧。如你可把a = 0x67452301改为a = 0x67452300这样你就用了一个与众不同的MD5算法呢,这样,哪怕就是你的数据库被下载了,你也可以放心的用了。让他们的破解MD5的工具见鬼去吧!   

但是我要说明的是,了解MD5过程的人可能会问,你这样改变会影响操作吗?这个问题专家可能都很难把它论证。同时我给大家要说的是,MD5是针对所有的信息的,而我们这样的改变,仅仅用在一个网站上的几千个,上万个用户的话,应该是没有多大问题的,但是我们要从数学上证明它这个改变后也能满足文章开始时说的三个条件的话,确实有一定的难度,这就让读者去讨论一下吧。   

特别说明:此种改变只能用于在刚开始建站时才可,如果你中途改变的话就会出现问题。

 

 

现在提出一种常用的对称MD5加密方法用于常规通信设计!

我们理解了MD5的算法之后不难想到初始向量的巨大潜力,对称MD5加密方法即将通信双方密码各自保存,通信双方各自解密传输的大文本信息。比如ABA用一套MD5算法,B用另外一套MD5算法,A将摘要信息转为MD5算法计算后的大文本信息,传给B时,B用自己的MD5算法计算解密,得到唯一的与B不同的摘要信息(密钥),此时与B手中的密钥进行比对,若相同,证明B为合法的接收者,即A预先指定好了的接收方,但此方法必须在A明确了解BMD5算法的基础上才能实现,因此常用于客户机和服务器之间,如登录验证。

那如何达到完整的通信双方在不知道对方的MD5算法时也能进行加密通信呢?本人再次提出另一种新的对称MD5加密方法。将A方用两次MD5算法计算后的大文本信息发给BB在不知道AMD5算法的时候当然无法解密,但若B知道A的第二个MD5的计算方法,问题就得到解决了,B先将A的大文本信息用A的方法解密,解密后再用BMD5算法再度解密,而A则将第一次MD5算法规定为BMD5算法时则恰好B最后解密的信息匹配A的摘要信息,当然你肯定会提出这不等于没有做事吗?纯粹浪费我的时间,那你就没有深度思考了。当我们有很多用户的时候,我们只要将所有用户的MD5算法逐个利用加密一次,再用公用MD5算法加密(防止外部被盗用数据库)然后分批次群发给所有用户,就到达了指定用户。当然,这只是星形用户,对于网状形用户,那我们就只有MD5算法约定通信了或者用RSA非对称加密(公钥机制)和DH协定。而且该方法实现了数字证书,防止抵赖的功能,只需要A将自己的身份用第二种MD5算法计算同时传送摘要信息。(作者:黄端)

联系QQ:944841552

 

<!--EndFragment-->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值