一种基于SQL改写实现的数据库同态加密方法与流程

文档序号:17004980发布日期:2019-03-02 01:59阅读:387来源:国知局
本发明属于信息安全
技术领域
:,涉及一种数据库敏感信息保护技术,尤其是一种基于sql语句改写实现的数据库同态加密方法。
背景技术
::随着云服务器的发展,越来越多的企业和个人把数据外包到公有云的数据库系统上进行管理。但是,云服务器数据泄露事件时有发生,数据安全成为用户采用云计算和云数据库的重大顾虑。数据库加密是解决数据安全问题的重要手段,目前有一种主流的数据库加密方案,也就是数据库产品自带的透明数据加密tde(transparentdataencryption),但是tde存在一个问题,无法支持对加密后的密文进行运算,也就是原先在云数据库上对于明文的操作无法正常运用。考虑一种很常见的场景,在云数据库中检索符合某些条件的记录。云数据库加密存储数据后,这个问题的处理方式一般是:应用程序从云数据库获取所有密文状态的记录,在本地全部进行解密,然后对明文检索,过滤出符合条件的记录。这显然会存在严重的性能问题,在数据规模大的情况下,这种方式基本不可使用。也就是说,上面的方式仅仅利用了云服务器的存储能力,并没有利用云服务器的计算能力。另外一方面,应用程序需要比较大的改动,在代码中进行加密解密操作,这部分的代码修改是侵入性的,对应用程序不透明。为了利用云服务器的计算能力,本发明使用同态加密技术来支持对密文进行运算。同态加密作为一种加密手段,支持直接对密文进行运算,运算的结果解密后等于对明文做同样操作的结果。换句话说,同态方案对操作和加密具有交换律,即先对明文进行加密后做同态运算,与先对明文进行运算后进行加密,得到的结果是等价的。比如,具有同态性质的加密函数a、b满足dec(en(a)⊙en(b))=a的加密函数,其中en是加密运算,dec是解密运算,⊙分别对应明文和密文域上的运算。当代表加法时,称该加密为加同态加密,⊙表示密文域上的加法运算;当代表乘法时,称该加密为乘同态加密,⊙表示密文域上的乘法运算。为了支持对应用程序是透明的,本发明采用前置代理的方式,在应用程序和数据库系统dbms之间增加一层代理proxy,对proxy进行改造。proxy截取客户端的sql请求,进行sql改写,转发给dbms,从dbms获取到结果后,对结果进行处理,回复给应用程序。整个过程对于应用程序是透明的。技术实现要素:本发明的目的在于解决现有技术的不足,提出一种设计合理、安全高效的方法,即提供一种基于sql语句改写实现的数据库同态加密,利用了云服务器的计算能力,同时对应用程序是透明的。本发明解决其技术问题所采用的技术方案是:应用程序向proxy发送sql请求,在proxy对原始sql语句解析,然后进行改写。改写后的sql语句满足密文运算的功能。目前的全同态加密算法(全同态的“全”指的是能够满足对任意函数进行计算),由于效率问题,无法在实际项目上应用。已知成熟的加密算法,可以在某一方面满足密文的同态运算,也就是部分同态加密。比如说ope(order-preservingencryption,ope)支持保序的同态加密算法,paillier支持加法的同态加密算法。因此,本发明使用多种加密算法来支持密文的同态运算,在请求密文运算的时候,选取支持该运算的同态加密算法。为了支持sql语句的同态运算,需要对表的字段进行扩展,用于支持不同的同态运算。在实际的应用场景中,用户往往只有部分信息是敏感信息,对这部分数据(对应表的字段)才有加密的需求。同时加解密会带来一定的性能损耗,如果所有的字段都进行加密,会带来比较大的性能损耗。考虑到这些因素,本发明支持字段级别的加密粒度。在创建表的时候,通过关键字enc修饰字段,表示这个字段是敏感信息,需要加密处理。考虑sql支持的运算,对于数值类型(int、float等),支持的密文运算有:相等、大小比较、加减乘除,对于字符串类型,支持的密文运算有:相等、大小比较、关键词检索。在创建表的时候,假定原始字段名为xxx。如果加密的字段是数值类型,扩展后的三个字段分别为:xxxoeq,xxxoorder,xxxoadd,这三个字段分别用于相等,大小比较,加减乘除的密文同态运算。如果加密的类型是字符串,扩展后的三个字段分别为:xxxoeq,xxxoorder,xxxoswp,这三个字段分别用于相等,大小比较,关键词检索的同态运算。对于insert操作,proxy将请求中的加密字段,分别调用加密算法对该字段的明文数据进行加密,加密后的结果作为扩展字段的取值,插入到数据库中。对于select操作,proxy首先改写查询的字段,如果是相等运算,使用xxxoeq,如果是大小比较运算,使用xxxoorder,如果是加减乘除,使用xxxoadd。然后改写查询条件where,将查询条件改写为对应扩展字段的密文运算。对于update操作,proxy首先改写加密字段更新的值,分别调用加密算法对该字段的明文数据进行加密,加密后的结果作为扩展字段的更新值,更新到数据库中。然后改写查询条件where,将查询条件改写为对应扩展字段的密文运算。对于delete操作,proxy将查询条件where中与加密字段相关的条件,改写为对应扩展字段的密文运算。对于创建index操作,由于原始的字段扩展为多个字段,proxy将在多个字段创建index,用于提高查询效率。proxy将改写后的sql语句,发给dbms执行,dbms上执行密文的运算,并且将执行结果发给proxy。对于select操作,proxy获取查询的结果集,将查询字段中涉及到加密字段的数据,进行解密处理,然后将解密后的结果集回复给应用程序。对于insert、update、delete操作,没有结果集需要处理,proxy直接转发dbms的处理结果给应用程序。整个过程对于应用程序是透明的。在实际的项目中,用户为了提高查询性能,往往采取一些优化手段,典型的做法是根据查询条件,在相应字段创建索引。对于这种场景,proxy对创建索引的请求进行处理,改写为在扩展字段上建立索引,当查询的时候,能够利用扩展字段的索引大大提高查询效率。通过本发明提出的方案,取得了以下的技术效果:利用云服务器的计算能力,支持的密文运算包括排序/加减乘除/关键词搜索;对应用程序是透明的;支持字段级别的加密粒度;创建索引的优化手段应用到密文数据。附图说明图1为一种基于sql语句改写实现的数据库同态加密方法示意图图2为创建table请求的改写流程图图3为insert请求的改写流程图图4为select请求的改写流程图图5为update请求的改写流程图图6为delete请求的改写流程图图7为创建index请求的改写流程图具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。如图1所示是一种基于sql语句改写实现的数据库同态加密方法,在proxy进行改造,内部包含了sql语句改写模块和结果处理模块。应用程序的sql请求,处理的具体步骤如下:步骤一:应用程序发送原始的sql请求给proxy;步骤二:proxy截取到sql请求,在内部通过sql语句改写模块对语句进行改写,然后转发给数据库系统;步骤三:数据库系统收到改写后的sql请求,内部处理后,返回结果给proxy;步骤四:proxy收到结果,在内部调用结果处理模块对结果进行处理,然后转发给应用程序。以现实场景中的一个实例来详细说明sql语句的改写流程,考虑在数据库中创建表staff,用于保存员工的薪水信息,员工姓名和薪水是敏感信息,需要进行加密。在创建表的时候,通过enc关键字设置员工姓名name和薪水salary字段加密。图2所示,创建表的sql请求:createtablestaff(idint,nameencvarchar(64),salaryencfloat);在步骤s201,proxy收到创建table的请求;在步骤s202,proxy解析创建table的sql语句;在步骤s203,遍历创建表的字段,检查字段是否为敏感信息;在步骤s204,检查字段是否有enc修饰;在步骤s205,存在enc修饰字段,对字段扩展。在本实例中,name是字符串类型,扩展后的三个字段分别为nameoeq,nameoorder,nameoswp,分别用于相等、大小比较、关键词检索的密文同态运算,salary扩展后的三个字段分别为:salaryoeq,salaryoorder,salaryoadd,分别用于相等、大小比较、加减乘除的密文同态运算。没有enc修饰字段,不需要处理,在本实例中,id字段不改写;在步骤s206,序列化为改写后的sql语句。改写后的创建table请求为:createtablestaff(idint,nameoeqvarbinary(80),nameoorderbigint(64)unsigned,nameoswpblob,salaryoeqbigintunsigned,salaryoorderbigintunsigned,salaryoaddvarbinary(1024)以下实例详细阐述本发明一种基于sql语句改写实现的数据库同态加密方法,对insert操作的具体处理。图3所示,应用程序的insert请求:insertintostaff(id,name,salary)value(1,"andy",12000.50);在步骤s301,proxy收到insert的请求;在步骤s302,proxy解析insertsql语句;在步骤s303,proxy对insert请求中的加密字段名,根据之前创建表时扩展的多个字段,分别调用加密算法对明文andy和12000.50加密,作为扩展字段的取值。对于字符串类型的加密字段name,加密明文生成nameoswp的流程稍微有些不同。处理步骤是:先对明文分词处理,然后分别加密,加密后的结果拼接在一起,作为nameoswp的取值,从而满足密文关键词的检索;在步骤s304,序列化为改写后的sql语句。改写后的insert请求为:insertintostaff(staff.id,staff.nameoeq,staff.nameoorder,staff.nameoswp,staff.salaryoeq,staff.salaryoorder,staff.salaryoadd)values(1,'j......p..o^c...',9285947977645734917,'rgmhwfvnqo4/lr7hlgh3vw==\n',459624123921347545,6492391523980144710,.d.\0\0.....\r^...0.t)di....~.....s.4\rw.(b.#....=..5.........p=m.^\r.q.*..<\r.u.z.!..&.....sn.i...9...t.-q....w..rd...g.o"..j..n...\'<..(...2*rt.+em..\\..tc..t.+n\\[..):..<.-..9.1.r.:j....m5......m..7.s.....=..2..n.m.=.).......o.r.5..fo)...2.l#."...@......l([%_-10')以下实例详细阐述本发明一种基于sql语句改写实现的数据库同态加密方法,对select操作的具体处理。图4所示,应用程序的select请求:selectid,salaryfromstaffwherenamelike"andy%"andsalary>12000;在步骤s401,proxy收到select的请求;在步骤s402,proxy解析selectsql语句;在步骤s403,proxy对select的字段id、salary进行改写,id字段不是加密字段,不需要改写,而salary字段改写为扩展的字段salaryoeq;在步骤s404,proxy对where条件进行改写,name使用了关键词索引,因此改写为扩展字段nameoswp,并对andy进行加密,salary进行大小比较,因此改写为扩展字段salaryoorder,并对12000加密;在步骤s405,序列化为改写后的sql语句。改写后的select请求为:selectstaff.id,staff.salaryoeqfromstaffwhere((staff.nameoswplike'rgmhwfvnqo4/lr7hlgh3vw==\n%')and(staff.salaryoorder>6492377008868418684))对于有些select请求,还可能涉及加减乘除的密文运算,比如select请求:selectsum(salary)fromstaff;改写后的select请求为:selectsum(staff.salaryoadd)fromstaff;proxy转发改写后的select请求给数据库系统,数据库系统进行密文运算后,返回密文状态的结果集,proxy对结果集进行解密,然后返回解密后的结果集给应用程序。以下实例详细阐述本发明一种基于sql语句改写实现的数据库同态加密方法,对update请求的具体处理。图5所示,应用程序的update请求:updatestaffsetsalary=1300.50wherename="andy";在步骤s501,proxy收到update的请求;在步骤s502,proxy解析updatesql语句;在步骤s503,proxy对更新的加密字段salary进行改写,salary字段扩展为三个字段,因此对明文1300.50分别调用对应的同态加密算法加密,更新扩展字段salaryoeq,salaryoorder,salaryoadd的取值;在步骤s504,proxy对where条件进行改写,name相等的运算,因此改写为扩展字段nameoeq;在步骤s505,序列化为改写后的sql语句。改写后的update请求为:updatestaffsetstaff.salaryoeq=7881609985374103194,staff.salaryoorder=6186002783274185051,staff.salaryoadd='.#.....w\'}.vl..........p452.....l.w.........z.o.x.)......j..h%..y.......~.(...|k...p.;..8~...p..j..e.....\r.../.84u..k7....|7..3.....&z.g....<.\rb2.=...sl!..#..e.h.e....=..\r..e..v).o2}.....>..\0....i..>d.b...t.s......~k........[...e.......&....}..v6p.1..&.._-11'where(staff.nameoeq='j......p..o^c...');以下实例详细阐述本发明一种基于sql语句改写实现的数据库同态加密方法,对delete请求的具体处理。图6所示,应用程序的delete请求:deletefromstaffwheresalary<100;在步骤s601,proxy收到delete的请求;在步骤s602,proxy解析deletesql语句;在步骤s603,proxy对where条件进行改写,涉及到salary的大小比较,因此改写为salaryoorder,并对100进行加密;在步骤s604,序列化为改写后的sql语句。改写后的delete请求为:deletefromstaffwhere(staff.salaryoorder<6151637655693588069);以下实例详细阐述本发明一种基于sql语句改写实现的数据库同态加密方法,对创建index请求的具体处理。图7所示,应用程序的创建index请求:altertablestaffaddindexindex_salary(salary);在步骤s701,proxy收到创建index的请求;在步骤s702,proxy解析创建index的sql语句;在步骤s703,proxy对创建索引的语句改写,salary字段扩展为三个字段,而用于查询条件的扩展字段为salaryoeq,salaryoorder,因此改写为在salaryoeq和salaryoorder创建索引;在步骤s704,序列化为改写后的sql语句。改写后的创建index请求为:altertablestaffaddindexindex_774423715256214172(salaryoeq),addindexindex_14443895881503514814(salaryoorder);以上所述仅为本发明的较佳实施例而已,并不以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1