加@@密技术是保护外包数据库@@中@@数据安全的一种有效方法@@,但如@@何对加@@密数据进行高效查询@@是一个热点@@,引起了研究界的重视@@。针对这个问题@@,提出了一种基于@@DBMS 内核的加@@密模式@@,通过安全字典和@@@@SQL语句的扩展@@,实现数据的加@@密存储和@@高效查询@@@@。实验证明了该方法的有效性和@@可行性@@。

  1 引言@@

  随着电子商务和@@电子政务@@的迅速发展@@,网络中@@的数据呈爆炸式增长@@,数据规模越来越大@@,涉及的技术越来越复杂@@。2002 年@@,Hakan Hacigumus 首次@@提出了@@“databases as a service”,即@@“外包数据库@@的概念@@”。在@@外包数据库@@系统中@@@@,组织将数据业务外包给专门的数据库@@服务器@@,由它们去完成数据的存储和@@管理等复杂技术工作@@,而数据库@@用户通过网络从外包数据库@@中@@获得服务@@。在@@这种运行模式中@@@@,数据存储在@@非可信的第三方服务器中@@@@,最大的问题就是如@@何保证数据的安全性@@,特别是如@@何防止内部人员@@(如@@:数据库@@管理员@@)泄露@@、丢失@@、甚至破坏数据@@。传统的一些安全机制@@,如@@操作系统安全机制@@、访问控制机制由服务器端操作@@,在@@外包数据库@@这种模式中@@不能完全保障其安全性@@。而利用加@@密技术来保护数据的安全性是一种非常理想的选择@@,即@@使入侵者可以利用操作系统漏洞或者绕过访问控制机制非法窃取数据文件@@,但是@@没有密钥进行解密@@,所获取的信息是不可读的@@。

  2 相关工作@@

  一些工作人员对数据库@@加@@密@@进行了研究@@。文献@@[5]提出了一种同态加@@密方法@@。同态加@@密的思想是加@@密后的数据仍然保持原明文数据的有序性@@,从而可以实现不用解密数据而对加@@密数据直接进行访问和@@算术运算@@。然而@@,从安全性角度来看@@,这种加@@密方法本身具有其固有的缺陷@@,因为它要求密文数据仍然保持有序性@@,这与安全的加@@密算法是相悖的@@。文献@@[6]中@@,在@@数据库@@作为一种服务@@(Database As a Service)的背景下@@,提出了对加@@密数据查询@@的方法@@。存储时@@,除了对关系表@@中@@的元组加@@密外@@,还增加@@一个索引字段@@@@,用来存储加@@密字段@@的分桶号@@(Bucket ID),桶号表@@示明文数据值落在@@某段区间内@@。查询@@时@@,客户端提交的@@SQL查询@@语句可以直接执行在@@加@@密数据上@@,而无须解密@@,但查询@@结果中@@包含不满足调节的元组@@,需要解密进行二次@@查询@@@@。文献@@[7]进一步对它如@@何分桶进行改进@@,给出最优分桶算法@@,使得查询@@代价最少@@。但是@@,这种方法对于多表@@连接查询@@的代价非常大@@。文献@@[8]提出了一种保持有序的加@@密方法@@。给定一个目标分布函数@@,对明文值进行转换得到密文@@,使得密文不仅保持有序@@,而且服从某一目标函数的分布@@。由于其密文保持有序@@,无须解密就可以直接对密文进行等值和@@范围查询@@@@,也可以进行@@MAX、MIN、COUNT 和@@ORDER BY查询@@。但这种方法由于密文保持有序性@@,容易遭受选择密文攻击@@。也就是说@@,如@@果攻击者能够选择一定数量的明文@@(或密文@@),并且把它们加@@密@@(或解密@@)成对应的密文@@(或明文@@),那么他就能够以较大的概率估计出密文对应的明文值@@。类似地@@,如@@果攻击者知道这个域的一些信息@@,比如@@说该域的数据分布@@,他也能够以较大的概率估计密文对应的明文值@@。文献@@[9]中@@,智能卡具有加@@密和@@查询@@处理能力@@,它把数据加@@密后存储在@@服务器中@@@@,密钥也存储在@@智能卡中@@@@。查询@@时@@,智能卡能够对等值查询@@语句进行转换@@,使之能够对密文数据进行查询@@@@。但是@@,它不能对实数类数据进行范围查询@@@@。文献@@[10]中@@使用序列加@@密@@(stream cipher)方法对文本数据进行加@@密处理@@,这样可以无须解密而直接对加@@密文本搜索@@关键词@@,但是@@这种方法没有涉及到如@@何应用到数据库@@中@@@@。文献@@[11]和@@[12]对数据库@@中@@字符型数据的加@@密以及加@@密数据的快速查询@@进行了研究@@。

  3 数据加@@密的体系结构@@

  数据库@@加@@密@@,大致可以分为两种方式@@:DBMS 外部加@@密@@和@@@@DBMS 内部加@@密@@。DBMS 外部加@@密@@,一般选择在@@应用程序和@@操作系统@@,通过调用加@@@@/解密函数来完成加@@密数据的存储和@@访问@@。例如@@@@,在@@操作系统层次@@实现加@@密时@@,可以利用它管理文件系统的功能@@,直接对存储数据的文件进行加@@密@@。在@@操作系统中@@加@@密时@@,加@@密的粒度是基于文件@@,对应到数据库@@中@@的表@@或者整个数据库@@@@,这种加@@密粒度是非常粗糙@@,最直接的影响是@@,加@@/解密的工作相当@@大@@,极大地降低系统性能@@。DBMS 内部加@@密@@,一般选择在@@数据物理存取之前进行加@@@@/解密操作@@。也就是说@@,DBMS 在@@将内存中@@的数据写到磁盘时@@,进行加@@密操作@@,而从磁盘读取数据到内存中@@时@@,进行相应的解密操作@@@@。BMS 能够区分各种粒度的数据@@,所以可以支持各种粒度的加@@密@@,加@@密的灵活性较好@@。另外@@,在@@DBMS 内部实现加@@密@@,可以更有效地和@@@@DBMS 内部的访问控制机制@@、授权机制等各种功能结合起来@@。此外@@,数据库@@中@@的数据具有高度结构化@@,共享性高等特点@@,在@@对数据库@@中@@存储数据进行加@@密时@@,需要结合它们的特点@@,对加@@密算法@@、加@@密粒度以及加@@密方式进行合理选择@@。首先@@,在@@选择加@@密算法时@@,对加@@密尤其是解密速度要求比较快@@,不能因为加@@@@/解密过程而导致系统性能大幅度下降@@。其次@@@@,应当@@支持灵活的加@@密粒度@@。根据用户的需要@@,能够选择对数据库@@@@、表@@、记录@@、字段@@、数据项进行加@@密@@。同时@@,还应结合目前@@DBMS 选择适当@@加@@密方式@@。

  在@@设计数据加@@密的体系结构@@时@@,采用基于@@DBMS 内核层加@@密方法@@,加@@密的粒度为表@@级@@,如@@图@@@@1 所示@@。其中@@系统表@@和@@加@@解密组件是新增的@@。设计思想是@@:用户在@@创建表@@的时候@@,可以指定是否对其加@@密存储@@,如@@果需要加@@密@@,则在@@系统表@@的安全字典中@@插入一条相应的记录@@@@。在@@DBMS 将数据写到磁盘上时@@,查询@@系统表@@的安全字典@@,如@@果需要加@@密@@,则首先@@对数据加@@密@@,再将其写出到外存@@。当@@DBMS 从磁盘中@@读入数据块时@@,如@@果数据块是加@@密过的@@,则加@@@@/解密模块查询@@安全字典@@,取出相应的密钥解密数据块@@。

130119524976655977_new.jpg (437×243)

图@@1 数据库@@加@@密@@体系结构图@@@@

 

责任编辑@@:admin