一种基于同态加密的隐匿SQL查询方法与流程

文档序号:32487787发布日期:2022-12-10 01:42阅读:254来源:国知局
一种基于同态加密的隐匿SQL查询方法与流程
一种基于同态加密的隐匿sql查询方法
技术领域
1.本发明涉及基于同态加密的隐匿sql查询方法领域。


背景技术:

2.sql查询是指客户端通过结构化查询语言sql,向服务端数据库(如mysql,oracle),查询满足指定条件的数据记录,数据库服务器在解析sql语句后,向客户端返回满足条件的数据记录。
3.同态加密是一种可以直接对密文进行计算,其解密结果与明文进行同样的计算结果相同的一种加密算法。目前在保护用户数据隐私方面有非常多的应用场景。
4.同态加密又主要分为全同态加密,半同态加密和有限级数的全同态加密。
5.(1)全同态加密
6.全同态加密是一种对密文可以进行任意计算(分为算术上的加法,乘法,或者逻辑比特位上的异或与and)的一种同态加密算法。
7.(2)半同态加密,有限级数的全同态加密
8.目前,由于全同态加密在应用上往往存在效率和存储上的限制,应用更加广泛的是半同态加密,或者有限级数的全同态加密。其中半同态加密算法是只支持密文加法或者乘法的同态运算,而有限级数的全同态加密则支持加法同态及有限层数的乘法同态运算。
9.数据是互联网的基础,也是互联网最具有价值的资产,信息时代最重要的生产要素。包括云计算,人工智能,数据挖掘,区块链等高新技术的发展,都离不开数据。
10.而数据的使用则离不开数据库来存储,管理,数据库是“按照数据结构来组织、存储和管理数据的仓库”,长期存储在计算机系统内、有组织的、可共享的、统一管理的大量数据的集合。
11.sql语言则是一种用户用来与数据库交互的计算机语言,通过将sql语句发送给数据库管理系统解析并执行,客户端可以对数据库执行查询、创建、更新、删除数据库表等操作。当前各类主流的关系型数据库,非关系型数据库如mysql,sql server,oracle,redis,postgresql,mongodb,hbase等,都支持sql语言。
12.sql语言中,sql查询是最常见的一种,用于客户端从数据库服务端获取满足某些条件的数据记录。
13.在实际应用中,由于互联网云计算等的发展,客户端和数据库服务端往往不是同一个主体,很多数据库均已部署在云上,用于对外提供数据服务。如果客户端直接使用明文sql语句向数据库服务端发送请求,容易导致客户端隐私泄露,如客户端如果使用如下sql查询一些用户的基本信息“select*from people where age》25and age《50and salary》20000”,那么服务端在收到此sql语句后,可得知客户端感兴趣的目标群体为年龄在25和50之间,以及月薪大于2w的人,进一步分析可获得其商业模式。如果服务端将这类信息泄露给客户端的商业竞争对手,则会给客户端带来一定经济损失。
14.此外,很用户多为了更加方便服务自己的业务,很多企业、机构还会将自己的数据
库直接部署在云数据库服务上,这时候也需要采取加密等一定措施防止云服务商获取其隐私敏感数据。
15.另一方面,隐私计算这几年也在飞速发展中,各项技术逐渐由学术研究拓展到了实际应用中,如可信执行环境tee,同态加密he,多方计算mpc,联邦学习等等。
16.其中同态加密可以在不泄露明文数据的情况下,直接对密文进行计算分析,是隐私计算技术的一个重要分支。尽管早期的同态加密算法,尤其是全同态加密,效率很低,占用存储很大。但是近年来,随着硬件的更新换代,学术研究的深入,全同态加密的计算效率不断提升,也扩大了其商业应用场景,不少云厂商都开始提供全同态加密服务。其在金融,医疗,大数据等方向也都有了应用场景。
17.当前,已有一些研究成果通过使用同态加密,保护数据库查询的隐私,如two-cloud secure database for numeric-related sql range queries with privacy preserving(用于数字相关sql范围查询的具有隐私保护的两个云安全数据库,)中,使用同态加密,提供基于数值类型的数据库查询。支持加密数据库的数值类型的查询,此方案需要部署两台数据库服务器,一个负责存储加密数据库,以及同态密文运算,一个负责计算满足查询条件的记录索引。
18.另外,cryptdb,cryptdb:protecting confidentiality with encrypted query processing(通过加密查询处理保护机密性)也是在加密数据库上进行sql查询,需要在客户端和数据库服务端部署一台代理proxy,proxy对用户的sql的关键字段请求进行加密,并且依然保证sql语句的语法要求,然后发送给服务端,处理完成以后,返回加密的数据给proxy,在proxy处解密,然后返回给客户端。
19.目前,这些成果中,有的只支持数值的查询,不支持字符串的查询。有的应用场景针对直接将加密数据库部署在云上,保护查询条件及返回数据的场景,但没有覆盖数据库服务商提供数据查询服务,只保护用户sql查询隐私的场景。此外,有的方案还要求部署两台以上数据库服务器。另外,有些成果中,需要部署代理服务器,基于普通的对称加密,顺序保留加密等。应用场景也是针对加密的数据库隐私sql执行,非只保护用户sql查询隐私的场景。这种方案中,sql语句也需要泄露给代理服务器,若代理非客户端自身部署,则达不到对隐藏sql查询语句的目的。此外,为了支持多种查询操作,需要对同一个数据进行多种类型加密,生成多个密文,密文存储占用较大空间。


技术实现要素:

20.本发明的目的是针对目前sql查询方法中,有的要求部署两台以上数据库服务器,有的需要部署代理服务器的不足,提供一种基于同态加密的隐匿sql查询方法,实现一个可以保护用户sql查询语句隐私的sql查询。
21.本发明为实现其技术目的所采用的技术方案是:一种基于同态加密的隐匿sql查询方法,该方法在服务器/客户端的框架上实现;包括以下步骤:
22.步骤1、客户端在本地生成同态加密公钥pk、私钥sk,初始化查询列名col以及查询值y;如果查询条件是in或者between,那么查询值y就需要用一个数组,y=[y1,y2,

yk]来代替;
[0023]
步骤2、客户端在本地使用公钥(pk)加密查询值(encrypt
pk
(y));
[0024]
步骤3、客户端将公钥(pk)、初始化后的查询列名(col)以及加密后的查询值(encrypt
pk
(y))发送给服务器;
[0025]
步骤4、服务器将本地数据库表所有记录的编号(id)对应查询列名(x)列数据与加密后的查询值(encrypt
pk
(y))做密文减法以及密文常数乘法,生成密文(c
id
);
[0026]
步骤5、服务器将id、密文(c
id
)集合返回客户端;
[0027]
步骤6、客户端解密密文(c
id
),生成m
id
,通过判断m
id
与0的大小关系,客户端可以判断id对应的记录是否满足查询条件,根据查询条件筛选数据库表记录的编号(id),同时加入干扰数据库表记录的编号(id),生成查询数据库表记录的编号(id)集合({id});
[0028]
步骤7,将查询数据库表记录的编号(id)集合({id})发送给服务器;
[0029]
步骤8、服务器返回集合({id})对应的数据库数据记录集合到客户端。
[0030]
进一步的,上述的基于同态加密的隐匿sql查询方法中:步骤1中,客户端选取同态加密算法及参数,,生成公钥(pk)私钥(sk);
[0031]
进一步的,上述的基于同态加密的隐匿sql查询方法中:步骤2中,通过查询条件确定查询值y,如查询条件为where t_host.label=1,那么查询值y=1,(encrypt
pk
(y)=encrypt
pk
(1));如果查询条件为between,in;那么查询值是一个数组(y=[y1,y2,

,yk]),数组的值都需要加密,加密数组值(encrypt
pk
([y1,y2,

,yk])。
[0032]
进一步的,上述的基于同态加密的隐匿sql查询方法中:所述的步骤4中,服务器使用客户端发送过来的公钥(pk),加密本地数据库表查询列col的值,数据库表某条记录的编号(id),查询值(x),那么服务器计算enc
pk
(x),同时与客户端发送过来的加密查询条件值做密文减法以及密文常数乘法生成加密密文c
id
=(enc
pk
(x)-enc
pk
(y))*rand;其中rand为随机值,rand可以防止客户端解密后直接推导x值。
[0033]
进一步的,上述的基于同态加密的隐匿sql查询方法中:所述的步骤6中,客户端解密密文(c
id
),得到明文(m
id
),服务器根据查询条件,以及明文(m
id
)与0的大小关系判断数据库表某条记录的编号(id)对应的库表记录是否是需要查询的;
[0034]
如果查询条件是x《y,那么解密后明文(m
id
)的值小于0;
[0035]
如果查询条件是x》y,那么解密后明文(m
id
)的值大于0;
[0036]
如果查询条件是x=y,那么解密后明文(m
id
)的值等于0;
[0037]
如果查询条件是between,y1《=x《y2那么解密后明文(m
id
)的值会有两个值m
id
=(m1,m2),需满足m1》0,m2《0;
[0038]
如果查询条件是in,那么解密后明文(m
id
)的值会有多个值m
id
=(m1,m2,m3,

,mj),需满足其中某个等于0。
[0039]
本发明基于同态加密,实现一个可以保护用户sql查询语句隐私的sql查询方法,具体来说:如果客户端client方发起sql查询任务,如:select t_host.money from t_host where t_host.label=1,查询过程中,可以实现:
[0040]
隐匿查询条件,server方不知道client的查询条件,如这里的t_host.label=1,就是查询条件。支持查询条件包括大于、小于、between、in等sql查询条件。
[0041]
本发明具有如下特点:
[0042]
使用同态加密算法加密查询条件以及密文运算,保护sql查询条件的隐私。
[0043]
(enc
pk
(x)-enc
pk
(y))*rand,通过密文乘以一个随机值,以防止client根据解密值
还原所有x值。
[0044]
为了防止server从{id}中反推查询条件,client在{id}中插入一定比例的不满足条件的id。
[0045]
下面结合附图和具体实施方式对本发明进行进一步的说明。
附图说明
[0046]
附图1为本发明实施例1基于同态加密的隐匿sql查询方法流程图。
具体实施方式
[0047]
如图1所示,本实施例的基本思路是:sql查询本质上是比较数据库表查询列的值与查询条件值的大小,而大小的比较可以通过减法以及减后的值是否大于0来实现。如果使用支持减法的同态加密来加密查询条件,则可以做到隐藏sql查询条件的目的。
[0048]
包括以下步骤:
[0049]
client客户端本地生成同态加密公私钥:pk,sk。初始化查询值y,这里,使用pk加密查询条件值encrypt
pk
(y),如查询条件为where t_host.label=1,那么查询值y值等于1,如果查询条件为between,in等,那么查询值y是一个查询值数组y=[y1,y2,

,yk],那么数组的值都需要加密encrypt
pk
([y1,y2,

,yk])。
[0050]
client将pk,加密后的查询条件值encrypt
pk
(y),查询条件中的列名col(如label),发送给server。
[0051]
server服务端使用client发送过来的pk,加密本地数据库表查询列的值,假设数据库表某条记录的编号为id,查询列col的值为x,那么server计算enc
pk
(x),同时与client发送过来的加密查询条件值做密文减法生成加密密文c
id
=(enc
pk
(x)-enc
pk
(y))*rand。其中rand为随机值,为了防止client通过解密值获取server的x值,导致隐私泄露。
[0052]
server将查询库表所有的{id,c
id
}集合返回给client。client解密{id,c
id
}中的c
id
,得到明文m
id
,client根据查询条件,以及m
id
与0的大小关系判断id对应的库表记录是否是需要查询的。
[0053]
如果查询条件是x《y,那么解密后值m
id
小于0。
[0054]
如果查询条件是x》y,那么解密后值m
id
大于0。
[0055]
如果查询条件是x=y,那么解密后值m
id
等于0。
[0056]
如果查询条件是between,y1《=x《y2那么解密会有两个值m
id
=(m1,m2),需满足m1》0,m2《0。
[0057]
如果查询条件是in,那么解密会有多个值m
id
=(m1,m2,m3,

,mj),需满足其中某个等于0。
[0058]
client生成所有满足查询条件的id集合{id},并发送给server。此外,为了防止server根据查询{id}的集合,反推查询条件,可以在{id}中加入小部分不满足查询条件的id。
[0059]
server在得到client的查询{id}集合后,返回{id}对应的库表记录{data}给client。
[0060]
本实施例的具体过程如下:
[0061]
(1)、首先选取一个实施的客户端client和服务端server计算通信的框架,这里选择开源的联邦学习框架fate,sql查询语句可以在fate的任务conf文件中配置。
[0062]
(2)、client端选取同态加密算法paillier及安全参数(2048bit密钥长度),并生成公私钥pk,sk。
[0063]
(3)、client端确定查询条件,比如查询server的people表中age》25的记录,那么查寻条件列col为age,查询条件值y为25。(如果查询条件为in或者between,那么y是一个数组)。
[0064]
(4)、client加密查询中条件值生成encrypt
pk
(y)=encrypt
pk
(25),查询条件中的列名col=age,以及pk,发送给server。
[0065]
(5)、server获取pk后,加密本地people表中所有记录age的值,假设记录id的age值为x,那么server生成二元组(id,c
id
),其中(enc
pk
(x)-enc
pk
(y))*rand,其中rand取1-200之间的随机整数,以防止client根据解密值还原所有x值。
[0066]
(6)、server计算所有记录的(id,c
id
),并打包成集合{(id,c
id
)}发送给client。
[0067]
(7)、client从集合{(id,c
id
)}中提取c
id
并解密得到m
id
,因为查询的是age》25,那么如果m
id
》0,说明此id对应的记录满足查询条件,将id加入集合{id}中。
[0068]
(8)、为了防止server从{id}中反推查询条件,client在{id}中插入一定比例的不满足条件的id,如满足条件总数10%比例的id,使得m
id
《=0。
[0069]
(9)、client将{id}发送给server。
[0070]
(10)server将{id}集合对应的数据记录{data}返回给client。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1