数据一次写入方法和基于该方法的数据库安全管理方法

文档序号:6420236阅读:170来源:国知局
专利名称:数据一次写入方法和基于该方法的数据库安全管理方法
技术领域
本发明涉及信息安全技术,特别涉及一种利用多重数字签名机制来保证数据库系统内数据不被篡改的数据一次写入方法以及基于该方法的数据库安全管理方法。
背景技术
在互联网尚未普及的时代,只有内部人员能够访问本企业的数据库,并且数据库不是唯一和最重要的数据管理工具,因此数据库被非法访问或使用的可能性不大,而且即使有人篡改了其中的数据,那些重要的文档资料(尤其是有法律效应的合同、协议、委托书、授权书等)因为都有书面材料备份,因此也有据可查。但是随着互联网和电子商务的迅猛发展,网上服务和交易正在成为主流业务渠道,书面材料作为记录载体,已经远远不能满足现代商业速度的需要,因此人们越来越多地依赖数据库系统,尤其是利用大型数据库提供的功能来管理所有数据。此外,企业的内部网络都通过互联网与外部相连,本企业的数据库不仅可被内部人员访问,而且外部的任何人也可能通过互联网访问,这大大增加了数据库受到非法侵入和破坏的机率。
在现代信息社会,保护好机密和重要信息是一个企业赖以生存的必要条件,为此,必须为数据库提供强有力的安全保护机制。在安全保护机制中,数据库记录的不可否认性或一次写入性是一个非常重要的方面,这不仅因为这些记录的非法篡改有可能导致商业纠纷或重大的经济损失,而且因为这些记录如果要在商业纠纷或诉讼案件中作为法律证据使用则必须具备不可否认性,例如证券交易系统内的交易记录、合同文本内容和双方的电子签名以及诊断书上化验内容和医生诊断结论等。在本说明书中,所谓数据库记录的不可否认性或一次写入性应理解为,每条记录一俟写入数据库,则不论是其内容的改动还是记录之间相对顺序的改变都将被严格跟踪和完整地记录下来。
现有数据库系统一般都通过提供强制性机制来确保数据修改(例如插入、更改或删除操作)后的数据库满足如下的完整性要求1)涉及任一数据库操作的每个数据域的数据类型必须符合数据库设计方案中的规定。
2)涉及任一数据库操作的每个数据域的取值必须在数据库设计方案配置的数值范围之内。
3)在每次数据库操作中,必须确保所有数据都插入到数据库内正确的位置上。
但是上述强制性机制不能阻止合法授权用户对数据的篡改(即在不被察觉的情况下修改数据)。例如,假设某一数据库包含一个专用于存储日期的表格,根据上述强制性机制,只要数据类型为日期,则拥有最高权限的数据库管理员对表格内数据域的任何修改操作都将被数据库接受。因此,该数据库管理员完全可以将已经生成的数据域数据改为其他值而又不被察觉,换句话说,虽然数据已经被该数据库管理员篡改,但是上述强制性机制却无法捕捉到这类事件。
由上可见,为了满足不可否认性或一次写入性的要求,必须对数据库完整性的含义作进一步的拓展,即,在上述强制性机制的基础上增加如下的安全保护条件1)数据库内任何数据域数据的改变都将使数据库其它部分发生某种变化从而导致数据库完整性的破坏。
2)被篡改的数据可被轻易地检测定位。
3)任何人(包括拥有最高权限的数据库管理员)都无法篡改数据(即修改数据而又不导致数据库其它部分发生变化),除非系统的所有用户与数据库管理员共同参与数据篡改。

发明内容
本发明的目的是提供一种数据一次写入方法,它为数据库系统提供了不可否认性或一次写入性的安全机制,保证数据不被篡改(包括合法和非法)。
本发明的上述目的通过以下技术方案实现一种数据一次写入方法,数据库系统按照下列步骤将数据一次写入数据库(1)利用散列算法生成当前写入数据与至少一个先前写入数据的系统数字签名的组合的消息摘要;(2)利用当前写入数据用户的私钥对所述消息摘要进行处理以生成当前写入数据的用户数字签名;(3)利用系统私钥对当前写入数据的用户数字签名与至少一个先前写入数据的系统数字签名的组合进行处理以生成当前写入数据的系统数字签名;以及(4)将当前写入数据、当前写入数据的用户数字签名和系统数字签名存入数据库。
比较好的是,在上述数据一次写入方法中,在步骤(1)中,按照下列步骤生成消息摘要(1a)按照预先设定的方式将写入数据库记录分解为数据域组并将部分或全部数据域选定为一次写入数据;(1b)为选定的数据域和至少一个先前写入数据的系统数字签名构造Merkle散列树并将所述Merkle散列树的根摘要作为消息摘要。
比较好的是,在上述数据一次写入方法中,步骤(1)中所述至少一个先前写入数据的系统数字签名为前第n个先前写入数据的系统数字签名,n为正整数。更好的是,在步骤(1)中,如果当前写入记录属于数据库内写入的前n条记录,则由数据库系统提供字符串作为所述至少一个先前写入数据的系统数字签名。
比较好的是,在上述数据一次写入方法中,步骤(3)中所述至少一个先前写入数据的系统数字签名为前一个先前写入数据的系统数字签名。
本发明的另一个目的是提供一种基于上述一次写入方法的数据库安全管理方法,它提供了不可否认性或一次写入性的安全功能,保证数据不被篡改(包括非法和合法)。
本发明的上述发明目的通过以下技术方案实现一种数据库安全管理方法,数据库系统包括客户端计算机、一次写入数据库、普通数据库以及位于客户端计算机与数据库之间的接口模块,其特征在于,用户按照下列步骤将数据写入数据库(a)客户端计算机将写入数据划分为一次写入数据和非一次写入数据,并且利用散列算法生成当前一次写入数据与至少一个先前一次写入数据的系统数字签名的组合的消息摘要;(b)客户端计算机利用该用户的私钥对所述消息摘要进行处理以生成当前一次写入数据的用户数字签名,并将当前写入数据、该用户数字签名和身份证书发送至接口模块;(c)接口模块根据该用户数字签名和身份证书验证当前一次写入数据的真实性和完整性,如果验证通过,则利用系统私钥对该用户数字签名与至少一个先前一次写入数据的系统数字签名的组合进行处理以生成当前一次写入数据的系统数字签名;以及(d)接口模块将当前一次写入数据、该用户数字签名和当前写入数据的系统数字签名存入一次写入数据库,而将非一次写入数据存入普通数据库。
比较好的是,在上述数据库安全管理方法中,步骤(a)包括下列步骤(a1)按照预先设定的模板将写入数据库记录分解为数据域组并且选定部分或全部数据域作为一次写入数据;(a2)为选定的数据域和至少一个先前写入数据的系统数字签名构造Merkle散列树并将所述Merkle散列树的根摘要作为消息摘要。
比较好的是,在上述数据库安全管理方法中,客户端计算机通过定期向接口模块发送请求获得步骤(a)中所述至少一个先前一次写入数据的系统数字签名。
比较好的是,在上述数据库安全管理方法中,步骤(1)中所述至少一个先前一次写入数据的系统数字签名为前第n个先前一次写入数据的系统数字签名,n为正整数。更好的是,如果当前写入记录属于数据库内写入的前n条记录,则将预先确定的字符串作为所述至少一个先前一次写入数据的系统数字签名。
比较好的是,在上述数据库安全管理方法中,步骤(a3)中所述至少一个先前一次写入数据的系统数字签名为前一个先前一次写入数据的系统数字签名。
在本发明的数据一次写入方法和数据库安全管理方法中,当前写入的数据不仅与当前的用户数字签名和系统数字签名直接地联结在一起,而且还与先前的用户数字签名和系统数字签名间接地联结在一起,从而形成一个将数据库内的数据环环相扣起来并且写入时间排序非常巧妙的链条,这使得对数据库内任何数据域的篡改都将导致数字签名发生错综复杂的变化,因此提供了极强的安全时间戳或安全追踪审计能力。此外,由于引入了基于公开密钥基础设施(PKI)的数字签名技术,因此也为数据的完整性和不可否认性提供了有力保障。最后,利用Merkle散列树来生成消息摘要特别适合处理写入数据由多个数据域构成的情况,便于在数据库系统中推广应用。


通过以下结合附图对本发明较佳实施例的描述,可以进一步理解本发明的目的、特征和优点,其中图1涉及按照本发明的数据一次写入方法,它示出了该方法一个较佳实施例的流程图。
图2示出了采用本发明的数据安全管理方法的数据库系统示意图。
图3涉及按照本发明的数据库安全管理方法,它示出了该方法一个较佳实施例的流程图。
具体实施例方式
为了保证写入数据的不可否认性或一次写入性,一方面,必须确保数据不被非法用户篡改(即确保某一用户对其它用户写入数据库数据进行的任何修改都能被跟踪监测到),另一方面,还必须确保数据不被合法用户篡改(即确保某一用户对自己已写入数据库数据进行的任何修改也能被跟踪监测到)。
对于前者,可利用基于公开密钥基础设施(PKI)的用户数字签名实现,例如用户在向数据库写入数据时还提供用自己私钥对数据摘要进行加密处理的数字签名,日后,为了验证数据是否被篡改,只要将根据数据库内存储数据生成的摘要与用该用户公钥解密数字签名后得到的摘要进行比较即可,如果二者不相同,则表明数据肯定被篡改。
上述这种安全机制的前提条件是非法用户无法获得被篡改的数据的用户的私钥,但是对于合法用户,由于其掌握着自己的私钥,因此仅利用用户的数字签名无法判断数据是否已经被其篡改。为此,在本发明中引入系统数字签名的概念。所谓系统数字签名,也就是数据库系统以其私钥所作的数字签名,在本发明中,其签名对象不仅包括当前写入数据的用户数字签名,而且还与先前写入数据的用户数字签名间接地关联起来。此外,在本发明中,用户数字签名的对象不仅涉及写入数据,而且还包含先前写入数据的系统数字签名。因此,任何数据的修改将不仅导致写入该数据时生成的数字签名发生改变,而且还将导致其后写入数据库数据时生成的数字签名改变,虽然合法用户可以使修改的数据与自己的数字签名自洽,但是却无法使后续写入的数据与相应的数字签名自洽,除非该用户获得全部后续写入数据、相应的用户私钥以及数据库系统的私钥,显然,这种情况发生的概率几乎为零,可见本发明提供的安全机制具有极高的可靠性和强壮性,并且具有很好的跟踪追溯能力,能够迅速定位被篡改的数据。
在上述原理的基础上,本发明采用如下方式将用户数字签名和系统数字签名有机地结合在一起对于每次当前一次写入的数据,以写入该数据用户的私钥对消息摘要进行处理以得到当前一次写入数据的用户数字签名,该消息摘要利用散列算法从当前一次写入数据和至少一个先前一次写入数据的系统数字签名的组合生成;数据库系统以自己的私钥对当前一次写入数据的用户数字签名和至少一个先前一次写入数据的系统数字签名的组合进行处理以得到当前一次写入数据的系统数字签名。
值得指出的是,这里参与生成用户数字签名和系统数字签名的系统数字签名并不一定要相同或不同,而且参与的系统数字签名数量也无限制,对于本领域的普通技术人员来说,在理解上述基本原理之后,如何通过选择合适数量和种类的系统数字签名以在系统安全性要求与处理负荷之间取得折衷是显而易见的事情而且也与本发明的原理无关。此外,由上可见,本发明的原理不依赖于具体的用于生成消息摘要的散列算法和生成数字签名的签名算法,对于本领域的普通技术人员来说,在理解上述基本原理之后,根据具体的应用环境来选择合适的算法应该是毫无困难的事情。因此,下述较佳实施例中具体的细节描述不应理解为是对本发明保护范围的限定。
以下借助附图描述本发明的较佳实施例。
第一实施例在本实施例中,我们假设写入数据库的记录包含数据域C1~C10,(这个发明与XML格式无关)其中数据域C1~C4被选定为存入一次写入数据库,其它数据域写入普通数据库,但是也完全可以将其它数据域选定为一次写入数据,这取决于业务逻辑而与本发明无关。
图1为按照本发明一个实施例的数据一次写入方法的示意图。如图1所示,当向数据库写入第i条记录Ri时,进入步骤1。在步骤1中,按照绘制模板的定义,该记录被分解为一组数据域C1~C10并且其中的C1~C4被选定为需要一次写入的数据,假设选定数据域的顺序为C1、C2、C3和C4。
随后进入步骤2,按照上述绘制模板定义的顺序为数据域C1~C4建立Merkle散列树,例如可将散列函数作用于串接在一起的数据域C1和C2从而形成散列值,然后将该散列值与C3串接在一起并应用散列函数,所生成的新的散列值再与C4串接并继续应用散列函数以得到该散列树的根摘要。
接着进入步骤3a,判断写入记录编号i是否大于一个预先设定的正整数n,如果判断结果为是,则转入步骤3b,否则,进入步骤3c。
在步骤3b中,将前第n个写入数据的系统数字签名Si-n加入步骤2中的Merkle散列树以构造出最终的Merkle散列树,即,步骤2中所述根摘要与系统数字签名Si-n串接在一起并应用散列函数,从而得到最终的Merkle散列树的根摘要并将其作为下列步骤4中进行数字签名用的消息摘要Di。
在步骤3c中,由于前第n个写入数据的系统数字签名Si-n不存在,因此在本实施例中,由数据库系统提供一个字符串替代系统数字签名Si-n,该字符串被加入步骤2中的Merkle散列树以构造出最终的Merkle散列树,从而得到最终的Merkle散列树的根摘要并将其作为下列步骤4中进行数字签名用的消息摘要Di。另外一种做法是在前第n个写入数据的系统数字签名Si-n不存在时直接用数据域的Merkle散列树的根摘要作为消息摘要,这种方式更为简便,但是以降低数据安全性为代价。
值得指出的是,在步骤3b和3c中,为简单起见,仅采用一个系统数字签名与一次写入的数据域组合,但是实际上也可以采用更多的系统数字签名与一次写入数据组合,这可以提高安全性,但是系统的开销将会增加。
接着转入步骤4,利用当前用户的私钥Qi对消息摘要Di进行处理以生成当前写入数据的用户数字签名Ui。在步骤4和下述步骤5中,进行数字签名的算法可以有多种。
随后进入步骤5,利用数据库系统的私钥Q对当前写入数据的用户数字签名Ui与前一个先前写入数据的系统数字签名Si-1的组合进行处理以生成当前写入数据的系统数字签名Si。这里最简单的组合方式就是将用户数字签名Ui与系统数字签名Si-1串接在一起,但是也可以采用其它的方式进行组合。
最后,在步骤6中,将当前一次写入数据域C1~C4、相应的数字签名和系统数字签名都存入一次写入数据库,数据域C5~C10则写入普通数据库。
值得指出的是,当采用客户机/服务器架构的数据库系统时,比较好的是,上述步骤1~4在客户机上完成,而步骤5在服务器上完成,但是这并非实现本发明上述数据一次写入方法的必要条件。
第二实施例以下描述基于上述数据一次写入方法的数据库安全管理方法的实施例。本实施例应用于图2所示的数据库系统,该数据库系统采用客户机/服务器架构,其中,数据库1包括存储一次写入数据的一次写入数据库11和存储非一次写入数据的普通数据库12,并且客户端计算机21和22通过接口模块3访问数据库1。值得指出的是,一次写入数据库11与普通数据库12既可以分布于不同的物理位置,也可以是同一台存储设备上不同的存储区域,这些对本发明的实现都没有任何本质上的影响。
在本实施例中,我们仍然假设写入数据库的记录包含数据域C1~C10,其中数据域C1~C4被选定为存入一次写入数据库11,其它数据域则写入普通数据库12。
图3为数据库安全管理方法的流程示意图。如图3所示,当客户机21向数据库1写入第i条记录Ri时,即开始执行本实施例的处理流程。
在步骤1中,客户端计算机21按照绘制模板的定义将该记录分解为一组数据域C1~C10,将其中的C1~C4选定为写入一次写入数据库11的数据而其余的数据域C5~1C10则写入普通数据库12,这里仍然假设一次写入数据域的顺序为C1、C2、C3和C4。
随后,在步骤2中,客户机21按照上述第一实施例中步骤2相同的方式为数据域C1~C4建立Merkle散列树。
接着进入步骤3a,客户机21判断写入记录编号i是否大于一个预先设定的正整数n,如果判断结果为是,则转入步骤3b,否则,进入步骤3c。
在步骤3b中,客户机21采用与第一实施例中步骤3b相同的方式,通过加入前第n个一次写入数据的数字签名Si-n构造出最终的Merkle散列树,从而得到最终的Merkle散列树的根摘要并将其作为下列步骤4中进行数字签名用的消息摘要Di。前第n个一次写入数据的系统数字签名Si-n可以下列方式获得,即,客户端计算机21在后台运行一个定期向接口模块3发送请求的线程,而接口模块3在接收到请求后向该客户端计算机21返回先前一次写入数据的系统数字签名。另一种方式为,在步骤1中,客户端计算机21在完成数据分解后才向接口模块3发送请求,而接口模块3在接收到请求后向该客户端计算机21返回先前一次写入数据的系统数字签名。
在步骤3c中,客户机21也采用与第一实施例中步骤3c相同的方式构造出最终的Merkle散列树,从而得到最终的Merkle散列树的根摘要作为下列步骤4中进行数字签名用的消息摘要Di。
接着,在步骤4中,客户端计算机21利用当前写入数据用户的私钥Qi对消息摘要Di进行处理以生成当前一次写入数据(包含数据域C1~C4)的用户数字签名Ui。
随后,在步骤5中,客户端计算机21将当前写入记录Ri(包含数据域C1~C10)、用户身份证书Ci和用户数字签名Ui打包为报文Mi并发送至接口模块3。
接着,在步骤6中,接口模块3根据接收到的报文Mi中的用户身份证书Ci确定用户身份,并以该用户的公钥Pi解密报文中的用户数字签名Ui从而得到消息摘要Di。
随后,在步骤7中,接口模块3采用与步骤1、步骤3b或步骤3c中相同的散列算法从接收报文Mi中的当前写入记录生成消息摘要D′i,并且将其与步骤6得到的消息摘要Di进行比较,如果一致,则表明数据的真实性和完整性验证通过,因此转入步骤8,否则,终止数据写入。
在步骤8中,接口模块采用数据库系统的私钥Q对当前一次写入数据的用户数字签名Ui与前一个先前写入数据的系统数字签名Si-1的组合进行处理以生成当前一次写入数据的系统数字签名Si。同样,这里最简单的组合方式就是将用户数字签名Ui与系统数字签名Si-1串接在一起,但是也可以采用其它的方式进行组合。
最后,在步骤9中,将当前一次写入数据域C1~C4、相应的用户数字签名Ui和系统数字签名Si都存入一次写入数据库11,数据域C5~C10则写入普通数据库系统12。
权利要求
1.一种数据一次写入方法,其特征在于,数据库系统按照下列步骤将数据一次写入数据库(1)利用散列算法生成当前写入数据与至少一个先前写入数据的系统数字签名的组合的消息摘要;(2)利用当前写入数据用户的私钥对所述消息摘要进行处理以生成当前写入数据的用户数字签名;(3)利用系统私钥对当前写入数据的用户数字签名与至少一个先前写入数据的系统数字签名的组合进行处理以生成当前写入数据的系统数字签名;以及(4)将当前写入数据、当前写入数据的用户数字签名和系统数字签名存入数据库。
2.如权利要求1所述的数据一次写入方法,其特征在于,在步骤(1)中,按照下列步骤生成消息摘要(1a)按照预先设定的方式将写入数据记录分解为数据域组并将部分或全部数据域选定为一次写入数据;(1b)为选定的数据域和至少一个先前写入数据的系统数字签名构造Merkle散列树并将所述Merkle散列树的根摘要作为消息摘要。
3.如权利要求1或2所述的数据一次写入方法,其特征在于,步骤(1)中所述至少一个先前写入数据的系统数字签名为前第n个先前写入数据的系统数字签名,n为正整数。
4.如权利要求3所述的数据一次写入方法,其特征在于,在步骤(1)中,如果当前写入记录属于数据库内写入的前n条记录,则由数据库系统提供字符串作为所述至少一个先前写入数据的系统数字签名。
5.如权利要求4所述的数据一次写入方法,其特征在于,步骤(3)中所述至少一个先前写入数据的系统数字签名为前一个先前写入数据的系统数字签名。
6.一种数据库安全管理方法,数据库系统包括客户端计算机、一次写入数据库、普通数据库以及位于客户端计算机与数据库之间的接口模块,其特征在于,用户按照下列步骤将数据写入数据库(a)客户端计算机将写入数据划分为一次写入数据和非一次写入数据,并且利用散列算法生成当前一次写入数据与至少一个先前一次写入数据的系统数字签名的组合的消息摘要;(b)客户端计算机利用该用户的私钥对所述消息摘要进行处理以生成当前一次写入数据的用户数字签名,并将当前写入数据、该用户数字签名和身份证书发送至接口模块;(c)接口模块根据该用户数字签名和身份证书验证当前一次写入数据的真实性和完整性,如果验证通过,则利用系统私钥对该用户数字签名与至少一个先前一次写入数据的系统数字签名的组合进行处理以生成当前一次写入数据的系统数字签名;以及(d)接口模块将当前一次写入数据、该用户数字签名和当前写入数据的系统数字签名存入一次写入数据库,而将非一次写入数据存入普通数据库。
7.如权利要求6所述的数据库安全管理方法,其特征在于,步骤(a)包括下列步骤(a1)按照预先设定的模板将写入数据库记录分解为数据域组并且选定部分或全部数据域作为一次写入数据;(a2)为选定的数据域和至少一个先前写入数据的系统数字签名构造Merkle散列树并将所述Merkle散列树的根摘要作为消息摘要。
8.如权利要求6或7所述的数据库安全管理方法,其特征在于,客户端计算机通过定期向接口模块发送请求获得步骤(a)中所述至少一个先前一次写入数据的系统数字签名。
9.如权利要求8所述的数据库安全管理方法,其特征在于,步骤(a)中所述至少一个先前一次写入数据的系统数字签名为前第n个先前一次写入数据的系统数字签名,n为正整数。
10.如权利要求9所述的数据库安全管理方法,其特征在于,在步骤(a)中,如果当前写入记录属于数据库内写入的前n条记录,则将预先确定的字符串作为所述至少一个先前一次写入数据的系统数字签名。
全文摘要
一种数据一次写入方法和基于该方法的数据库安全管理方法,其按照下列步骤将数据一次写入数据库(1)利用散列算法生成当前写入数据与至少一个先前写入数据的系统数字签名的组合的消息摘要;(2)利用当前写入数据用户的私钥对所述消息摘要进行处理以生成当前写入数据的用户数字签名;(3)利用系统私钥对用户数字签名与至少一个先前写入数据的系统数字签名的组合进行处理以生成当前写入数据的系统数字签名;以及(4)将当前写入数据、相应的用户数字签名和系统数字签名存入数据库。本发明是安全时间戳或安全追踪审计的超强能力的核心,为数据的完整性和不可否认性提供了有力保障,适于在各种数据库系统中推广应用。
文档编号G06F17/30GK1547136SQ200310109150
公开日2004年11月17日 申请日期2003年12月8日 优先权日2003年12月8日
发明者李嫚, 陈少鹏, 李 申请人:李嫚, 陈少鹏, 李
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1