您当前所在位置:

浅谈基于数字摘要的高招数据库防篡改技术的研究与实现

2013-01-15

 

系统可以先把正确数据每记录字段组合为一个摘要,然后保存在安全位置,系统鉴别时同时对安全数据表和运行的表逐摘要比较。这样,虽然保证了安全,但是性能降低,因此我们在这里引入了安全字符串R,由系统管理员自己定义存储在内存中,在数据导入和查询时都将使用它,这样鉴别时就可以不再跨库查询。

如图1中的导入数据过程,MD5以数据表一行记录为基础输入M,同时系统定义安全字符串R,产生摘要数据H(M+R)。作为数据库中新增字段M’,在数据库被查询时,取数据库原始字段进行一次H(M+R)与M’的比较,异常则转入异常处理模块。数据在对外发布过程首先走鉴别过程,这样就杜绝了错误信息的发布,确保了数据的可靠。

三、 数据库防篡改的实现

防篡改平台作为一个中间件平台存在,只要对数据库平台进行访问都要经过此平台的检验,没发现篡改才会把数据转发给用户,如果有篡改发生马上转入异常报警和数据恢复。在这里,安全字符串需要用户自己掌握,在记录进行摘要和篡改鉴定中必须保持一致。

数据库防篡改的整体过程分为7步。第一步,外网用户通过web提交查询数据,传入查询的关键字。第二步,鉴别模块接受查询的关键字,进入数据库检索数据。第三步,检索到该记录,提取所有字段与系统设定的关键字符串串接,进行数字摘要。若没检索到记录退出系统。第四步,将数字摘要与前面生成的摘要字段M’进行比对。如果异常转入第六步。第五步,核对正确,查询结果返回给用户,系统退出。第六步,出现异常,马上联动告警信息,如联动短信设备或电话设备,及时报警。第七步,从安全设备上获取数据,重新生成摘要,恢复正常数据。

从以上过程我们可以看出,整个过程中,即使攻击者获取系统控制权限,对数据记录进行恶意修改,只要查询用户通过web页面查询数据,鉴别模块就会发现异常,及时联动恢复模块进行数据恢复。

四、关键算法及其实现

系统基于windows 2003或linux平台。采用java做平台开发,采用mysql数据库进行数据存储。关键算法如下:

MD5在java下的实现

import java.security.MessageDigest;

public static Stringmd5(String inputstr) throws Exception

{ int tempi=0;

MessageDigest md5 = MessageDigest.getInstance

("md5");