一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种实现隐私信息检索的方法、系统、服务器和客户端与流程

2023-02-25 20:29:23 来源:中国专利 TAG:


1.本说明书实施例属于隐私计算技术领域,尤其涉及一种实现隐私信息检索的方法、系统、服务器和客户端。


背景技术:

2.隐私保护计算(privacy-preserving computing)是在保护数据本身不对外泄露的前提下实现数据分析计算的技术集合,实现数据的可用不可见。通过隐私保护计算技术,可以在充分保护数据和隐私安全的前提下,实现数据价值的转化和释放。
3.目前实现隐私保护计算的主流技术主要包括三大方向:第一类是以多方安全计算(secure multi-party computation,smpc)为代表的基于密码学的隐私计算技术;第二类是以联邦学习(federated learning,fl)为代表的人工智能与隐私保护技术融合衍生的技术;第三类是以可信执行环境(trust execution environment)为代表的基于可信硬件的机密计算(confidential computing,cc)技术。此外,还包括差分隐私(differential privacy,dp)等。差分隐私(differential privacy,dp)实际则是对计算结果的保护,而不是针对计算过程;联邦学习、安全多方计算以及机密计算则是对计算过程以及计算过程中间结果进行保护。
4.第一类的多方安全计算,又包括四大基础技术,分别是混淆电路(garbled circuit,gc)、秘密分享(secret sharing)、不经意传输(oblivious transfer)和同态加密(homomorphic encryption,he)。其中,同态加密是一种特殊的加密算法,在密文基础上直接进行计算,与基于解密后的明文是一样的计算结果,其又包括半同态加密(partially homomorphic encryption,phe)和全同态加密(fully homomorphic encryption,fhe)。
5.安全多方计算凭借其坚实的安全理论基础提供输入秘密数据的隐私保护能力,实现隐私保护计算过程的安全。目前安全多方计算主要有两条实施技术路线,包括通用安全多方计算和特定问题安全多方计算。前者可以解决各类计算问题,但是这种“万能型”的技术路线通常体系庞大,各种开销较大;后者针对特定问题设计专用协议,如隐私集合求交psi(private set intersection,psi),隐私信息检索(privacy information retrieval,pir)等,往往能够以比通用安全多方计算协议更低的代价得到计算结果,但是需要领域专家针对应用场景进行精心设计,一般无法适用于通用场景且设计成本较高。
6.隐私集合求交是参与双方在不泄露任何额外信息的情况下,得到双方持有数据的交集。额外的信息指的是除了双方的数据交集以外的任何信息。隐私集合求交在现实场景中非常有用,比如在纵向联邦学习中做数据对齐,或是在社交软件中通过通讯录做好友发现等。
7.隐私信息检索是客户端从数据库检索信息的一种方法。检索过程中,查询方隐藏查询目标标识,数据服务方提供匹配的查询结果却无法获知具体的查询对象。


技术实现要素:

8.本说明书的目的在于提供一种实现隐私信息检索的方法、系统、服务器和客户端,包括:
9.一种实现隐私信息检索的方法,服务端将数据库加密后得到查询基,并发送该查询基至客户端;客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法;
10.在一次检索过程中,包括:
11.所述客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;
12.所述客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识;
13.所述服务端与所述客户端之间通过不经意传输方式将所述数据库中所述匹配标识对应记录中感兴趣字段的值传输至所述客户端。
14.一种实现隐私信息检索的方法,服务端将数据库加密后得到查询基,并发送该查询基至客户端;客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法;
15.在一次检索过程中,包括:
16.所述客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;
17.所述客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识,并生成包含感兴趣字段在内的m大小的混淆集;
18.所述服务端与所述客户端之间通过不经意传输方式将所述数据库中所述匹配记录中由m大小的混淆集指示的字段的值传输至所述客户端。
19.一种实现隐私信息检索的方法,服务端将数据库加密后得到查询基,并发送该查询基至客户端;客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法;
20.在一次检索过程中,包括:
21.客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;
22.客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配的标识;
23.服务端采用双重不经意传输方式返回所述数据库中包含所述匹配标识在内的预定大小标识集合对应记录中的感兴趣字段的值至客户端;所述双重不经意传输方式是结合预定大小标识集合的不经意传输和感兴趣字段的不经意传输。
24.一种实现隐私信息检索的系统,包括服务端与客户端,客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
25.所述服务端配置有数据库,并将该数据库加密后得到查询基,并发送该查询基至客户端;
26.在一次检索过程中:
27.所述客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由
服务端加密的同一敏感字段;
28.所述客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识;
29.所述服务端与所述客户端之间通过不经意传输方式将所述数据库中所述匹配标识对应记录中感兴趣字段的值传输至所述客户端。
30.一种实现隐私信息检索的服务端,所述服务端与客户端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
31.所述服务端配置有数据库,并将该数据库加密后得到查询基,并发送该查询基至客户端;
32.在一次检索过程中:
33.所述服务端接收所述客户端发送的经自身加密的敏感字段并再次加密后返回至所述客户端;所述服务端还与所述客户端之间通过不经意传输方式将所述数据库中所述匹配标识对应记录中感兴趣字段的值传输至所述客户端。
34.一种实现隐私信息检索的客户端,该客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
35.所述客户端配置有查询基,所述查询基由所述服务端将数据库加密后得到;
36.在一次检索过程中:
37.所述客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;所述客户端还在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识;所述客户端还与所述服务端之间通过不经意传输方式获得所述数据库中与所述匹配标识对应记录中感兴趣字段的值。
38.一种实现隐私信息检索的系统,包括服务端与客户端,客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
39.所述服务端配置有数据库,并将该数据库加密后得到查询基,并发送该查询基至客户端;
40.在一次检索过程中:
41.所述客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;
42.所述客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识,并生成包含感兴趣字段在内的m大小的混淆集;
43.所述服务端与所述客户端之间通过不经意传输方式将所述数据库中所述匹配记录中由m大小的混淆集指示的字段的值传输至所述客户端。
44.一种实现隐私信息检索的系统,包括服务端与客户端,客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
45.所述服务端配置有数据库,并将该数据库加密后得到查询基,并发送该查询基至客户端;
46.在一次检索过程中:
47.客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;
48.客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配的标识;
49.服务端采用双重不经意传输方式返回所述数据库中包含所述匹配标识在内的预定大小标识集合对应记录中的感兴趣字段的值至客户端;所述双重不经意传输方式是结合预定大小标识集合的不经意传输和感兴趣字段的不经意传输。
50.上述实施例中,通过将查询基预先配置到客户端的形式,实现不暴露数据库明文的情况下由客户端通过与服务端交互及查询基定位要查询的字段在查询基中的标识,进一步根据标识向服务端发起查询,保证了服务端对数据库的隐私保护,且可以支持结构化查询语句。而且,所述服务端与所述客户端之间传输匹配标识对应记录/对应记录中感兴趣字段的值,采用了不经意传输方式,这样不会暴露客户端的匹配标识至服务器,保护了客户端隐私。
附图说明
51.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
52.图1是一实施例的流程示意图;
53.图2是一实施例的流程示意图;
54.图3是一实施例的流程示意图;
55.图4是一实施例的流程示意图。
具体实施方式
56.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
57.如前所述,pir是客户端从数据库检索信息的一种方法。pir方案是由chor b等在1995年提出的解决保护用户查询隐私的方案。pir方案的主要目的是,保证查询用户向服务器上的数据库提交的查询请求,在用户查询的隐私信息不被泄漏的条件下完成查询,即在检索过程中服务器不知道用户具体查询信息及检索出的数据项。
58.隐私信息检索的应用场景包括有:
59.i.病患想通过医药系统查询其疾病的治疗药物,如果以该疾病名为查询条件,医疗系统将会得知该病人可能患有这样的疾病,从而病人的隐私被泄露,通过隐私信息查询可以避免此类泄露问题。
60.ii.在域名、商标申请过程,用户需要首相向相关数据库提交自己申请的域名或商标信息以查询是否已存在,但有不想让服务提供方知晓自己的申请名称,从而能够抢先注册。
61.iii.在证券市场中,某用户想查询某个股票信息,但又不能将自己感兴趣的股票
泄露给服务方从而影响股票价格和自己的偏好。
62.一个简单的实现方案是数据库把所有数据发送给客户端,但无法保护数据库安全,即无法保证服务端的隐私。能够同时保证客户端和数据库隐私安全的pir,称为对称的pir(symmetrical pir,spir),同时保证客户端和数据库两者之一隐私安全的pir,称为非对称的pir(asymmetrical pir,apir)。根据数据库副本的个数分为多副本pir和单副本pir。多副本pir协议要求多个数据库副本之间不能合谋,这在现实场景中很难满足,因此考虑更多的是单副本pir。单副本pir只能达到计算安全(computational pir,cpir)。在大多数pir方案中,总是假设客户端知道想要检索的是数据库的第几个比特(单比特)。但是在现实场景中,客户端往往是根据关键字检索(并不知道该关键字对应数据库的具体位置),且希望取回的是字符串(多比特)。总而言之,一个实用的pir通常需要最好同时满足对称、单副本、按关键字检索、返回字符串等多个条件,并达到计算效率和通信效率的平衡。通过同态加密、不经意传输(oblivious transfer,ot)、单向陷门函数(one-way trapdoor function)等密码学技术,可以满足或部分满足上述条件。
63.本说明书提供一种实现隐私信息检索的方法实施例。
64.该实施例中,服务端(server)可以预先将数据库加密后得到查询基,并发送该查询基至客户端。
65.一般的,服务端本地具有数据库,可以供客户端查询。服务端本地的数据库例如为如下:
66.idnameagenative_placejob_numberid_0a24anhui263158id_1b25shanghai223700id_2c30anhui193267id_3d46henan183456id_4e34shandong193345id_5f54shanghai271156id_6g24beijing223455id_7h34shandong274500id_8i42guangdong805591id_9j56zhejiang708947
67.表1、服务端具有的数据库
68.上述表1的例子中,包括id、name、age、native_place这4个字段,例如有id_0,...id_9共10条记录,每一行为一个记录。其中,id_0,...id_9为每一行记录的标识。
69.为了让客户端可以进行检索,而又不暴露服务端的隐私安全,服务端可以加密该数据库,得到查询基。加密方式可以采用rsa(一种使用广泛的非对称加密算法,1977年由罗纳德
·
李维斯特(ron rivest)、阿迪
·
萨莫尔(adi shamir)和伦纳德
·
阿德曼(leonard adleman)一起提出的)或ecc(elliptical curve cryptography,椭圆曲线密码学)加密。具体的,服务端可以使用rsa私钥/ecc私钥α对数据加密,即对除了id列的其它每个字段(即每个单元格中的数据)采用rsa私钥/ecc私钥α进行加密。
70.采用ecc加解密算法的情况下,具体的,服务端可以生成一个秘密值α并妥善保存,
该秘密值α也就是ecc私钥。此外,服务端可以将name字段的值通过一个哈希函数转换为椭圆曲线上的一个点,可以表达为hash(c)或表达为h(c)。
71.根据椭圆曲线上标量乘法的运算性质,椭圆曲线上的一个点p和一个整数k,计算q=kp很容易,且得到的结果q也是该椭圆曲线上的一个点;反之,如果知道椭圆曲线上的一个点对p、q,求解q=kp中使等式成立的k的值很难。
72.这里,根据椭圆曲线上的标量乘法运算α
·
h(c)很容易计算得到,但是知道α
·
h(c)的结果和h(c)却很难推算出α的值。很难得到α的值的情况下,知道α
·
h(c)的结果,也很难得到知道h(c)的值。
73.进而,服务端采用秘密值α加密后的数据库如下所示:
74.idnameagenative_placejob_numberid_0α
·
h(a)α
·
h(24)α
·
h(anhui)α
·
h(263158)id_1α
·
h(b)α
·
h(25)α
·
h(shanghai)α
·
h(223700)id_2α
·
h(c)α
·
h(30)α
·
h(anhui)α
·
h(193267)id_3α
·
h(d)α
·
h(46)α
·
h(henan)α
·
h(183456)id_4α
·
h(e)α
·
h(34)α
·
h(shandong)α
·
h(193345)id_5α
·
h(f)α
·
h(54)α
·
h(shanghai)α
·
h(271156)id_6α
·
h(g)α
·
h(24)α
·
h(beijing)α
·
h(223455)id_7α
·
h(h)α
·
h(34)α
·
h(shandong)α
·
h(274500)id_8α
·
h(i)α
·
h(42)α
·
h(guangdong)α
·
h(805591)id_9α
·
h(j)α
·
h(56)α
·
h(zjejiang)α
·
h(708947)
75.表2、服务端采用ecc私钥加密后的查询基
76.需要说明的是,上述hash函数,不仅能将原始输入转换为固定长度和格式的输出,还能将输出转换为椭圆曲线上的一个点的x轴坐标。例如采用curve25519这样的椭圆曲线,任意的256bits数据都可以作为这条椭圆曲线上的一个合法的x轴坐标。相应的,可以采用sha256或sha3-256,也可以采用sha384、sha512或者sha3-384、sha3-512的结果中截取256bits。更广泛的说,任意hash值(不局限于hash结果是256bits)可以对椭圆曲线的阶取模,取模结果与生成元点乘之积(标量乘法)即为该椭圆曲线上的一个点。
77.进而,服务端可以将该查询基发送至需要进行检索的客户端。一种方式中,服务端可以直接发送该查询基至客户端,例如直接发送至客户端的设备,或者发送至客户端的代理服务器之类;另一种方式中,服务端可以在一个统一资源定位系统(uniform resource locator,url)上发布该查询基,进而客户端可以从该url上获取该查询基。
78.相应的,客户端可以接收到该查询基,并将接收到的查询基保存在本地。
79.类似的,采用rsa的情况下,服务端可以生成一个秘密值α并妥善保存,该秘密值也就是rsa私钥。此外,服务端可以将name字段的值通过一个哈希函数转换为椭圆曲线上的一个点,可以表达为hash(c)或表达为h(c)。
80.根据模幂运算的性质,已知秘密值α,对于一个大质数q和底数g,计算p=g
α
mod q很容易;反之,如果知道p、q和底数g,求解p=g
α
mod q中使等式成立的α的值很难。底数g也称为原根。
81.这里,根据模拟运算计算(h(c))
α
mod q很容易,但是知道(h(c))
α
mod q的结果和h
(c)、q却很难推算出α的值。很难得到α的值的情况下,知道(h(c))
α
mod q的结果,也很难得到知道h(c)的值。后续,将形如(h(c))
α
mod q的表达式省略mod q,简略表示为(h(c))
α

82.进而,服务端采用秘密值α加密后的数据库如下所示:
83.idnameagenative_placejob_numberid_0(h(a))
α
(h(24))
α
(h(anhui))
α
(h(263158))
α
id_1(h(b))
α
(h(25))
α
(h(shanghai))
α
(h(223700))
α
id_2(h(c))
α
(h(30))
α
(h(anhui))
α
(h(193367))
α
id_3(h(d))
α
(h(46))
α
(h(henan))
α
(h(183456))
α
id_4(h(e))
α
(h(34))
α
(h(shandong))
α
(h(193345))
α
id_5(h(f))
α
(h(54))
α
(h(shanghai))
α
(h(271156))
α
id_6(h(g))
α
(h(24))
α
(h(beijing))
α
(h(223455))
α
id_7(h(h))
α
(h(34))
α
(h(shandong))
α
(h(274500))
α
id_8(h(i))
α
(h(42))
α
(h(guangdong))
α
(h(805591))
α
id_9(h(j))
α
(h(56))
α
(h(zhejiang))
α
(h(708947))
α
84.表3、服务端采用rsa私钥加密后的查询基
85.进而,服务端可以将该查询基发送至需要进行检索的客户端。类似的,服务端可以直接发送该查询基至客户端,例如直接发送至客户端的设备,或者发送至客户端的代理服务器之类;另一种方式中,服务端可以在一个统一资源定位系统(uniform resource locator,url)上发布该查询基,进而客户端可以从该url上获取该查询基。
86.相应的,客户端可以接收到该查询基,并将接收到的查询基保存在本地。
87.s110:客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段。
88.例如,客户端的检索条件为age字段值为25,而25为敏感字段,即不希望让对端知道。为了避免让服务端知道客户端检索条件是age字段的值25,客户端可以将该25加密。例如,采用rsa/ecc私钥加密,客户端采用的加密算法与服务端生成查询基采用的加密算法相同。
89.具体的,采用rsa私钥加密的情况下,客户端自身生成秘密β并妥善保存。进而,客户端可以采用自身私钥β对25加密。具体的,可以是对25或对25的hash值加密。这里以对25的hash加密为例加以说明,对25直接加密的情况类似,客户端与服务端采用相同的hash算法。例如,客户端采用与服务端相同的大质数q作为模数。客户端可以将对25采用β对25的hash值进行rsa加密,得到(h(25))
β
。则客户端发送至服务端的敏感字段可以为(h(25))
β
,其中,(h(25))
β
表示敏感字段的值25的密文。
90.另一方面,客户端也可以构造检索语句,并将检索语句中的敏感字段加密后得到隐私字段,并用隐私字段替换敏感字段,将替换后的隐私检索语句发送至服务端。
91.例如,客户端构造的查询语句为select name where age=25。
92.为了保护隐私,即不让服务端获得查询的是age=25这个条件,例如是将其中的25隐私保护起来,结果如下:
93.select name where age=?
94.其中,?表示替换后的检索语句。
95.具体的,客户端可以将25用rsa私钥加密。例如,客户端可以将对25采用与服务端相同hash函数进行hash计算,进而采用β对25的hash值进行rsa加密,得到(h(25))
β
。则客户端发送至服务端的查询语句例如为如下:
96.select name where age=(h(25))
β
97.如前所述,(h(25))
β
为密文,即为上面检索语句中的“?”代表的内容,服务端获得后并不能知晓其中的β和25。
98.采用ecc私钥加密的情况下,客户端采用与服务端相同的椭圆曲线,即具有相同的椭圆曲线参数和生成元。客户端自身生成秘密β并妥善保存。进而,客户端可以采用自身私钥β对25加密。具体的,可以是对25的hash值加密,客户端与服务端采用相同的hash算法。例如,客户端可以采用β对25的hash值进行ecc加密,得到β
·
h(25)。则客户端发送至服务端的敏感字段可以为β
·
h(25),其中,β
·
h(25)表示敏感字段的值25的密文。
99.另一方面,客户端也可以构造检索语句,并将检索语句中的敏感字段加密后得到隐私字段,并用隐私字段替换敏感字段,将替换后的隐私检索语句发送至服务端。
100.例如,客户端构造的查询语句为select name where age=25。
101.为了保护隐私,即不让服务端获得查询的是age=25这个条件,例如是将其中的25隐私保护起来,结果如下:
102.select name where age=?
103.其中,?表示替换后的检索语句。
104.具体的,客户端可以将25用ecc私钥加密。例如,客户端采用与服务端相同的椭圆曲线,即具有相同的椭圆曲线参数和生成元。客户端可以将检索语句中的敏感字段用自身ecc私钥加密后替换,将替换后的隐私检索语句发送至服务端。例如客户端自身生成秘密β并妥善保存。此外,客户端可以将对25采用与服务端相同hash函数进行hash计算,进而采用β对25的hash值进行ecc加密,得到β
·
h(25)。则客户端发送至服务端的查询语句例如为如下:
105.select name where age=β
·
h(25)
106.如前所述,β
·
h(25)为密文,即为上面检索语句中的“?”代表的内容,服务端获得后并不能知晓其中的β和25。
107.所述客户端通过与服务端的交互得到由服务端加密的同一敏感字段,可以包括服务端采用自身密钥对由客户端加密的敏感字段再次加密后发送至客户端,客户端采用自身密钥对两次加密后的敏感字段解密得到由服务端加密的敏感字段。该内容的核心是需要找到一个满足连续两次加密操作(两方先后加密)可以交换顺序进行解密的加密算法。根据ecc的密码学性质,双方约定采用相同的椭圆曲线,即具有相同的椭圆曲线参数和生成元,各自持有私钥α和β,加密操作为用α(或β)进行标量乘法运算,不论先用α加密后用β加密还是先用β加密后用α加密,都可以用相同或不同的顺序解密,即可以对加密结果用不同的顺序解密。类似的,根据rsa的密码学性质加密,双方约定采用一个相同的大质数q和原根g,各自持有私钥α和β,加密操作为用α(或β)求幂并用q取模,不论先用α加密后用β加密还是先用β加密后用α加密,都可以用相同或不同的顺序解密,即可以对加密结果用不同的顺序解密。整体来说,这里客户端和服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法。
108.具体的,可以是服务端收到隐私检索语句后,对隐私字段再次加密后返回至客户端,也可以是服务端收到客户端发送的经客户端自身加密的敏感字段后,服务端对加密的敏感字段再次用服务端自身密钥加密后返回至客户端。进而,客户端采用自身密钥对两次加密后的敏感字段解密得到由服务端加密的敏感字段。
109.例如,情况1:服务端可以接收到客户端发送的(h(25))
β

110.服务端可以对加密后的敏感字段(亦即隐私字段)再次加密,并将再次加密后的敏感字段返回至客户端。具体的,服务端可以对隐私字段(h(25))
β
采用自身的rsa私钥α进行再次加密,得到((h(25))
β
)
α

111.例如,情况1':服务端可以接收到客户端发送的隐私检索语句select name where age=(h(25))
β
。这样,服务端可以获得该隐私检索语句中的隐私字段(h(25))
β

112.服务端可以对隐私字段再次加密,并将再次加密后的隐私字段返回至客户端。
113.具体的,服务端可以对隐私字段(h(25))
β
采用自身的rsa私钥α进行再次加密,得到((h(25))
β
)
α
,具体过程类似上述,这里不再赘述。
114.例如,情况2:服务端可以接收到客户端发送的β
·
h(25)。
115.服务端可以对隐私字段再次加密,并将再次加密后的隐私字段返回至客户端。具体的,服务端可以对隐私字段β
·
h(25)采用自身的ecc私钥α进行再次加密,得到α
·
β
·
h(25)。
116.例如,情况2':服务端可以接收到客户端发送的隐私检索语句select name where age=β
·
h(25)。这样,服务端可以获得该隐私检索语句中的隐私字段β
·
h(25)。
117.服务端可以对隐私字段再次加密,并将再次加密后的隐私字段返回至客户端。
118.具体的,服务端可以对隐私字段β
·
h(25)采用自身的ecc私钥α进行再次加密,得到α
·
β
·
h(25),具体过程类似上述,这里不再赘述。
119.服务端采用自身密钥对由客户端加密的敏感字段(即隐私字段)再次加密后发送至客户端后,客户端可以采用自身密钥对两次加密后的隐私字段解密得到由服务端加密的敏感字段。
120.例如,对应上面情况1和1',客户端接收到服务端发送的((h(25))
β
)
α
,其中的幂次方运算存在性质如下:((h(25))
β
)
α
=(h(25))
βα
=(h(25))
αβ
=((h(25))
α
)
β
。进而,客户端可以采用自身私钥β的逆元对两次加密后的敏感字段解密,如下:这样,客户端得到由服务端加密的同一敏感字段,即(h(25))
α

121.对应上面情况2和2',客户端接收到服务端发送的α
·
β
·
h(25),其中的标量乘法运算存在性质如下:α
·
β2h(25)=β
·
α
·
h(25)。进而,客户端可以采用自身私钥β的逆元β-1
对两次加密后的敏感字段解密,如下:β-1
·
α
·
β
·
h(25)=β-1
·
β
·
α
·
h(25)=α
·
h(25)。这样,客户端同样得到由服务端加密的同一敏感字段,即α
·
h(25)。
122.需要说明的是,rsa中,根据欧拉定理,pk
·
sk=1mod(p-1)
·
(q-1),其中p和q两个大质数,所以pk和sk互为逆元。类似的,ecc中,pk=sk*g,g为ecc选定曲线上的的一个生成元,所以pk和sk也是互为逆元。
123.s120:客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录
的标识,并将该标识返回至服务端。
124.s110执行后,客户端可以得到由服务端加密的同一敏感字段。
125.客户端可以基于该由服务端加密的敏感字段在查询基中查询。例如,客户端解密后得到由服务端加密的隐私字段α
·
h(25)或(h(25))
α
,从而客户端基于该隐私字段在查询基中查询,例如分别在表2或表3中查询,可以得到age中包含该隐私字段的记录为id=d_1的这条记录,id为这条记录的标识。这样,客户基于该由服务端加密的隐私字段在查询基中查询,匹配到记录后可以定位得到匹配记录的标识。
126.所述客户端将匹配记录的标识返回至服务端,可以包括两种情况。
127.一种是s110中,客户端构造检索语句,并将检索语句中的敏感字段加密后得到隐私字段,并用隐私字段替换敏感字段,将替换后的隐私检索语句发送至服务端的情况。该情况下,客户端可以直接将匹配记录的标识返回至服务端。
128.另一种是s110中,客户端发送经自身加密的敏感字段的值至服务端的情况。该情况下,s120中,客户端可以构造检索语句,例如检索语句为:
129.select name where id=id_1
130.这样,s120中,客户端可以将构造的上述检索式发送至服务端,该检索式中包含了匹配记录的标识,并指示感兴趣的字段是name,也就是select后面紧跟的字段名称。
131.换句话说,s110和s120这两个步骤中,可以选择在其中的一个步骤中发送检索式,该检索式中包含了感兴趣字段。
132.s130:服务端返回所述数据库中所述标识对应记录中的感兴趣字段的值至客户端。
133.仍然按照上述例子,服务端接收到客户端发来的标识后,可以在所述数据库中查找所述标识对应记录,并按照s110或s120的感兴趣字段取出查找到的记录中的相应值,并将该取出的感兴趣字段的值返回至客户端。例如,返回id_1对应记录中的name=b,即返回b至客户端。
134.上述实施例中,通过将查询基预先配置到客户端的形式,实现不暴露数据库明文的情况下由客户端通过与服务端交互及查询基定位要查询的字段在查询基中的标识,进一步根据标识向服务端发起查询,得到标识对应记录中的感兴趣字段的值。相对于传统的多副本pir,显然不需要多个副本数据库之间不能合谋的前提假设,实用性更好。相对于传统的单副本pir中只能实现比特位检索的情形,本实施例不需要关注要检索的关键字在数据库中的具体位置(比特位置),可以实现字符串的查询,且可以支持结构化查询语句(structured query language,sql)。本实施例中数据库仍然保持在服务端,同时将数据库加密得到的查询基配置到客户端,以便于客户端检索时基于查询基进行数据定位以得到记录的标识,同时查询基的加密特性使得客户端不会获得数据库的内容,保证了服务端对数据库的隐私保护。整体来说,本实施例中数据库、查询基的形式,在一个服务端配置数据库和一个客户端配置查询基的情况下可以称为“非对称双副本”,在多个客户端配置查询基的情况下可以称为“非对称多副本”。
135.上述实施例中,通过sql查询语句,客户端可以发起对感兴趣字段的查询,例如上述select name...中要查询的name字段。这在一定程度上暴露了客户端的感兴趣字段。另一种方式中,可以查询符合条件的记录,即符合条件的整行数据,这样可以保护客户端的隐
私,但是需要服务端返回整条记录,这就一定程度上暴露了服务端的整行数据。例如s110/s120中通过“select*where age=?”或“select*where id=id_1”这样的检索语句。这样,服务端返回的结果可以是id_1这条的记录,例如如下:
136.id_1b 25shanghai
137.另外,为了保证传输过程的安全,所述服务端可以加密返回所述数据库中所述标识对应记录/对应记录中感兴趣字段的值至所述客户端。例如,服务端可以采用与客户端协商所得的对称密钥对数据库中所述标识对应记录/对应记录中感兴趣字段的值加密后返回至所述客户端,或者采用所述客户端的非对称密钥中的公钥对数据库中所述标识对应记录/对应记录中感兴趣字段的值加密后返回至所述客户端,从而客户端可以用自身私钥解密,以及采用数字信封方式等等。
138.上述s120中,客户端直接将匹配得到的id返回至服务端,虽然可以从服务端获得该id对应的记录或记录中的感兴趣字段,如s130,但是,这会一定程度上暴露客户端的隐私,即会让服务端知道客户端想查询的标识是id_1。为了保护客户端的隐私,可以通过下述实施例中的方式实现:
139.s210:客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段。
140.例如,客户端的检索条件为age字段值为25,而25为敏感字段,即不希望让对端知道。为了避免让服务端知道客户端检索条件是age字段的值25,客户端可以将该25加密。例如,采用rsa/ecc私钥加密,客户端采用的加密算法与服务端生成查询基采用的加密算法相同。
141.具体的,采用rsa私钥加密的情况下,客户端自身生成秘密β并妥善保存。进而,客户端可以采用自身私钥β对25加密。具体的,可以是对25或对25的hash值加密。这里以对25的hash加密为例加以说明,对25直接加密的情况类似,客户端与服务端采用相同的hash算法。例如,客户端采用与服务端相同的大质数q作为模数。客户端可以将对25采用β对25的hash值进行rsa加密,得到(h(25))
β
。则客户端发送至服务端的敏感字段可以为(h(25))
β
,其中,(h(25))
β
表示敏感字段的值25的密文。
142.采用ecc私钥加密的情况下,客户端采用与服务端相同的椭圆曲线,即具有相同的椭圆曲线参数和生成元。客户端自身生成秘密β并妥善保存。进而,客户端可以采用自身私钥β对25加密。具体的,可以是对25的hash值加密,客户端与服务端采用相同的hash算法。例如,客户端可以采用β对25的hash值进行ecc加密,得到β
·
h(25)。则客户端发送至服务端的敏感字段可以为β
·
h(25),其中,β
·
h(25)表示敏感字段的值25的密文。
143.所述客户端通过与服务端的交互得到由服务端加密的同一敏感字段,可以包括服务端采用自身密钥对由客户端加密的敏感字段再次加密后发送至客户端,客户端采用自身密钥对两次加密后的敏感字段解密得到由服务端加密的敏感字段。该内容的核心是需要找到一个满足连续两次加密操作(两方先后加密)可以交换顺序进行解密的加密算法。根据ecc的密码学性质,双方约定采用相同的椭圆曲线,即具有相同的椭圆曲线参数和生成元,各自持有私钥α和β,加密操作为用α(或β)进行标量乘法运算,不论先用α加密后用β加密还是先用β加密后用α加密,都可以用相同或不同的顺序解密,即可以对加密结果用不同的顺序解密。类似的,根据rsa的密码学性质加密,双方约定采用一个相同的大质数q和原根g,各
自持有私钥α和β,加密操作为用α(或β)求幂并用q取模,不论先用α加密后用β加密还是先用β加密后用α加密,都可以用相同或不同的顺序解密,即可以对加密结果用不同的顺序解密。整体来说,这里客户端和服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法。
144.具体的,可以是服务端收到客户端发送的经客户端自身加密的敏感字段后,服务端对加密的敏感字段再次用服务端自身密钥加密后返回至客户端。进而,客户端采用自身密钥对两次加密后的敏感字段解密得到由服务端加密的敏感字段。
145.例如,情况1:服务端可以接收到客户端发送的(h(25))
β

146.服务端可以对加密后的敏感字段(亦即隐私字段)再次加密,并将再次加密后的敏感字段返回至客户端。具体的,服务端可以对隐私字段(h(25))
β
采用自身的rsa私钥α进行再次加密,得到((h(25))
β
)
α

147.例如,情况2:服务端可以接收到客户端发送的β
·
h(25)。
148.服务端可以对隐私字段再次加密,并将再次加密后的隐私字段返回至客户端。具体的,服务端可以对隐私字段β
·
h(25)采用自身的ecc私钥α进行再次加密,得到α
·
β
·
h(25)。
149.服务端采用自身密钥对由客户端加密的敏感字段(即隐私字段)再次加密后发送至客户端后,客户端可以采用自身密钥对两次加密后的隐私字段解密得到由服务端加密的敏感字段。
150.例如,对应上面情况1,客户端接收到服务端发送的((h(25))
β
)
α
,其中的幂次方运算存在性质如下:((h(25))
β
)
α
=(h(25))
βα
=(h(25))
αβ
=((h(25))
α
)
β
。进而,客户端可以采用自身私钥β的逆元对两次加密后的敏感字段解密,如下:对两次加密后的敏感字段解密,如下:这样,客户端得到由服务端加密的同一敏感字段,即(h(25))
α

151.对应上面情况2,客户端接收到服务端发送的α
·
β
·
h(25),其中的标量乘法运算存在性质如下:α
·
β
·
h(25)=β
·
α
·
h(25)。进而,客户端可以采用自身私钥β的逆元β-1
对两次加密后的敏感字段解密,如下:β-1
·
α
·
β
·
h(25)=β-1
·
β
·
α
·
h(25)=α
·
h(24)。这样,客户端同样得到由服务端加密的同一敏感字段,即α
·
h(25)。
152.需要说明的是,rsa中,根据欧拉定理,pk
·
sk=1mod(p-1)
·
(q-1),其中p和q两个大质数,所以pk和sk互为逆元。类似的,ecc中,pk=sk
·
g,g为ecc选定曲线上的的一个生成元,所以pk和sk也是互为逆元。
153.s220:客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识。
154.s210执行后,客户端可以得到由服务端加密的同一敏感字段。
155.客户端可以基于该由服务端加密的敏感字段在查询基中查询。例如,客户端解密后得到由服务端加密的隐私字段α
·
h(25)或(h(25))
α
,从而客户端基于该隐私字段在查询基中查询,例如分别在表2或表3中查询,可以得到age中包含该隐私字段的记录为id=d_1的这条记录,id为这条记录的标识。这样,客户基于该由服务端加密的隐私字段在查询基中查询,匹配到记录后可以定位得到匹配记录的标识。
156.s230:服务端采用不经意传输方式返回所述数据库中包含所述匹配标识在内的预定大小标识集合对应记录中的感兴趣字段的值至客户端。
157.s220中,客户端并不将匹配得到的id返回至服务端,这样服务端无法获知客户端想要查找的是哪一条或哪几条记录;s210中客户端发送的经过客户端加密的敏感字段使得服务端也无法获知客户端查找的敏感字段将命中哪一条或哪几条记录,而只有客户端自己知道。这样,保护了客户端的隐私。但是,最终仍需要完成检索,这就需要服务端将客户端想查询的记录返回至客户端。
158.这里,服务端可以采用不经意传输方式。
159.不经意传输(oblivious transfer,ot)可以基于rsa、ecc等实现,可以实现2选1、n选1和m选1、m选k(k《m《n)等多种ot。以2选1ot为例说明其原理,发送者有两个秘密,分别是m1和m2,需要发送2个秘密至接收者,接收者只能选择解密其中的1个而无法获知另一个,同时发送者也无法得知接收者选择的是哪一个。以rsa为例,2选1的一个简单的实施流程如下:
160.首先,发送者生成两对不同的公私钥,并公开两个公钥,记这两个公钥分别为公钥1和公钥2。假设接收者希望知道m1,但不希望发送人知道他想要的是m1。接收者生成一个随机数r,再用公钥1对r进行加密,传给发送者。发送者用自身的两个私钥对这个加密后的r进行解密,用私钥1解密得到r1,用私钥2解密得到r2。显然,只有r1是和r相等的,r2则是一串毫无意义的数(也是解密结果)。但发送者不知道接收者加密时用的哪个公钥,因此发送者也不知道自己算出来的r1和r2中的哪个才是真的r。发送者接收到m1和m2后,用r1对m1进行对称加密,用r2对m2进行对称加密,并将两个对称加密结果发送至接收者。接收者本地具有的r=r1,所以接收者用r对发来的两个结果分别进行对称解密可以得到m1,但是无法解密得到m2,这是因为接收者所具有的r≠r2,接收者也就无法用正确的对称密钥进行解密得到m2的值。这个过程中,发送者也不知道接收者算出的是m1和m2中的哪一个。
161.有了2选1作为基础,可以将2个公私钥对扩展为n个公私钥对,就成为了n选1的ot。n选1的核心在于,服务端用n个不同密钥分别加密所述数据表中的n个记录/对应记录中感兴趣字段的值得到n个加密结果,并发送该n个加密结果至客户端;客户端采用匹配标识对应的密钥解密所述服务端发送的n个加密结果中匹配标识对应的1个加密结果。
162.结合本说明书上述实施例,假设服务端的数据表中具有总计n条记录,这样,客户端的查询基中相应的也具有n条加密的记录。为了方便,数据记录的id按照顺序标识为id_0、id_1、id_2、...id_n-1。一个简单的实施流程如下:
163.s231:服务端预先生成n对不同的公私钥对并公开公钥。
164.这里的n等于数据库中的记录的数量。
165.服务端生成n对不同的公私钥对(pk-sk;pk是publick key,表示公钥;sk是secret key,表示私钥;公钥可以公开,私钥需要保密),例如分别是pk
0-sk0,pk
1-sk1,pk
2-sk2,...,pk
n-1-sk
n-1
,并公开这n个公钥,即公开pk0,pk1,pk2,...,pk
n-1
。服务端公开这n个有序的公钥后,客户端可以获得这n个公钥。
166.s232:客户端生成随机数r,并用期望获得的id对应的公钥对r进行加密后发送至服务端。
167.这里假设客户端希望获得id_1的那条记录,同时不希望服务端知道客户端想要获
得的记录是id_1的那条。这样,客户端可以采用pk1对r进行加密后发送至服务端。上述的有序,主要是指id和公钥有对应关系,而这样的对应关系可以被客户端知晓。例如上述例子中,客户端希望获得id_1的那条记录但同时不希望服务端知道客户端想要获得的记录是id_1的那条,客户端可以采用id_1对应的pk1对r进行加密后发送至服务端;类似的,客户端希望获得id_t的那条记录但同时不希望服务端知道客户端想要获得的记录是id_t的那条,客户端可以采用id_t对应的pk
t
对r进行加密后发送至服务端。
168.此外,客户端可以采用pk1对r进行加密后与包含混淆集的检索语句一并发送,例如:
169.select name where id=id_t|enc(r,pk1)
170.其中,“|”用于分割前面的检索语句和后面的加密后的随机数,下同。此外,客户端也可以采用pk1对r进行加密后与感兴趣字段一并发送至服务端。
171.s233:服务端接收到加密的r后,用n个私钥分别对其解密。
172.服务端分别用sk0,sk1,sk2,...,sk
n-1
分别解密经过pk1加密的随机数r。例如,服务端用sk0解密得到r0,用sk1解密得到r1,...,用sk
n-1
解密得到r(n-1)。
173.显然,只有r1是和r相等的,因为只有用sk1进行解密的才是用对应pk1加密的;而用不对应pk1的sk0、sk2、...、sk
n-1
解密得到的结果r0、r2、...、r(n-1)都不会与r相同。通过解密,服务端只是得到形式相同的解密结果,并不知道真正的r是什么,也不知道客户端是用哪个公钥进行加密的。换句话说,服务端不知道客户端加密r时用的哪个公钥,因此服务端也不知道解密得到的n个结果r0、r1、r2、...、r(n-1)中的哪个才是真正的r。
174.s234:服务端将数据库中每条记录按照序号采用对应序号的解密结果进行对称加密,将对称加密后的结果发送至客户端。
175.例如,服务端将id_0这条记录采用r0进行对称加密,将id_1这条记录采用r1进行对称加密,...,将id_n-1这条记录采用r(n-1)进行对称加密,并将这n个对称加密结果发送至客户端。
176.s235:客户端采用所述随机数r对所述对称加密结果中期望获得的id对应的加密结果进行对称解密,得到检索结果。
177.客户端采用所述随机数r对所述对称加密结果中期望获得的id对应的加密结果进行对称解密。具体的,例如上述s232中客户端期望获得的是id_1对应的那条记录/记录中的感兴趣字段的值,则客户端采用对应的公钥pk1对所述随机数r进行加密;s233中,服务端用对应的私钥sk1对解密结果进行解密,得到的r1=r,而用不对应pk1的sk0、sk2、...、sk
n-1
解密得到的结果r0、r2、...、r(n-1)都不会与r相同;s234中,服务端用r0、r1、r2、...、r(n-1)分别对对应的id_0、id_1、...、id_n-1这些记录/记录中的感兴趣字段的值进行对称加密,并将这n个对称加密结果发送至客户端;s235中,客户端采用所述随机数r对所述n个对称加密结果进行对称解密。其中,n个对称解密结果中,只有id_1的加密结果是用r对称加密的,因此这里只有对id_1的加密结果采用r进行解密才能得到正确的值。从而,客户端可以获得正确的检索结果,即获得对应记录/对应记录中感兴趣字段的值。
178.当然,为了减少计算量,客户端可以仅采用所述随机数r对所述n个对称加密结果中期望获得的id对应的加密结果进行对称解密,即客户端仅采用r对id_1的加密结果进行解密,从而获得id_1的对应记录/对应记录中感兴趣字段的值,而无须采用r对id_0、id_
2、...、id_n-1这些对称加密结果进行对称解密,因为客户端可以知道这些加密结果并非采用r进行的对称加密,即使采用r进行对称解密也无法解出正确结果。
179.为了更清楚的呈现,这里对客户端采用所述随机数r对所述n个对称加密结果进行对称解密,进行如下解释:
180.s234中,服务端用r0、r1、r2、...、r(n-1)分别对对应的id_0、id_1、...、id_n-1这些记录/记录中的感兴趣字段的值进行对称加密,例如对对应的id_0、id_1、...、id_n-1这些记录进行对称加密:
181.enc(id_0,r0),其中r0≠r;
182.enc(id_1,r1),其中r1=r;
183.enc(id_2,r2),其中r2≠r;
184....
185.enc(id_n-1,r(n-1)),其中r(n-1)≠r;
186.上述enc表示加密(encrypt),enc()括号中的前一部分的id_0、id_1、id_2、...、id_n-1表示n条记录/n条记录中感兴趣字段的值,后一部分的r0、r1、r2、...、r(n-1)表示加密密钥。
187.s235中,客户端采用随机数r对所述对s234中的加密结果进行对称解密。具体的,客户端采用所述随机数r对下述内容分别进行对称解密:
188.dec(enc(id_0,r0),r),其中r0≠r;
189.dec(enc(id_1,r1),r),其中r1=r;
190.dec(enc(id_2,r2),r),其中r2≠r;
191....
192.dec(enc(id_n-1,r(n-1),r),其中r(n-1)≠r;
193.上述dec表示解密(decrypt),dec()中的前一部分表示解密对象,这里也就是上面的加密结果,dec()中的后一部分表示解密采用的密钥。
194.可见,客户端只能解密得到id_1的那条记录,而无法推测出其它记录。这是因为服务端只有对id_1的那条记录采用了随机数r进行对称加密,而对其它id采用的并非随机数r进行的对称加密,而客户端也无法获得除r1=r以外的r0、r2、...、r(n-1)。
195.需要说明的是,s231可以是在s230之后,或者是在s230之前,这里并不限制。
196.上面是所述客户端在查询基中检索得到匹配记录的数量为1时,通过n选1不经意传输,将所述数据库中包含所述匹配标识在内的所有所述标识对应记录/对应记录中感兴趣字段的值传输至所述客户端。
197.上述实施例中,服务端并不知道客户端查询的是哪个或哪些id,而是将数据库中的所有记录均加密返回至客户端,保护了客户端的隐私。但是,s233中,服务端用n个私钥分别对接收到加密的r进行解密,这样进行大量的非对称解密计算,需要消耗大量的cpu和内存资源。并且,s234中传输n个对称加密后的结果也将占用大量带宽。尤其是当n的数量比较大时,服务端的计算量较大,带宽占用也较大。
198.此外,可能匹配的结果大于1,例如为k条(k》1),则可以通过n选k不经意传输来实现。关于n选k,一种实现方案是将n个记录中的每k个组成一个集合,每个集合对应一个公私钥对,这样总计会有(c表示组合公式,n里任选k个构成的组合的数量)。接下来,采用
选1的不经意传输方式将所述数据库中包含所述匹配标识在内的所有所述标识对应记录/对应记录中感兴趣字段的值传输至所述客户端。选1的不经意传输方式,实现过程类似于上述n选1不经意传输的实现过程。即所述服务端用个不同密钥分别加密所述数据表中的每k个记录/对应记录中感兴趣字段的值得到个加密结果,并发送该个加密结果至客户端;所述客户端采用匹配标识对应的密钥解密所述服务端发送的个加密结果中匹配标识对应的1个加密结果。具体实现类似上述s231-s235的过程,这里不再赘述。
199.需要说明的是,上述的r也可以是非对称密钥中的公钥,这样,客户端接收到由r加密的结果后,可以采用自身的私钥对其解密得到结果。即s234和s235中,服务端将id_0这条记录采用r0进行非对称加密,将id_1这条记录采用r1进行非对称加密,...,将id_n-1这条记录采用r(n-1)进行非对称加密,并将这n个加密结果发送至客户端,客户端接收到这些加密的结果后,可以采用自身私钥对其中期望获得的id对应的加密结果进行非对称解密得到结果。下面也类似,不再重复。
200.基于此,本说明书给出以下增加了构造混淆集的一种实施方式:
201.s310:客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段。
202.例如,客户端的检索条件为age字段值为25,而25为敏感字段,即不希望让对端知道。为了避免让服务端知道客户端检索条件是age字段的值25,客户端可以将该25加密。例如,采用rsa/ecc私钥加密,客户端采用的加密算法与服务端生成查询基采用的加密算法相同。
203.具体的,采用rsa私钥加密的情况下,客户端自身生成秘密β并妥善保存。进而,客户端可以采用自身私钥β对25加密。具体的,可以是对25或对25的hash值加密。这里以对25的hash加密为例加以说明,对25直接加密的情况类似,客户端与服务端采用相同的hash算法。例如,客户端采用与服务端相同的大质数q作为模数。客户端可以将对25采用β对25的hash值进行rsa加密,得到(h(25))
β
。则客户端发送至服务端的敏感字段可以为(h(25))
β
,其中,(h(25))
β
表示敏感字段的值25的密文。
204.采用ecc私钥加密的情况下,客户端采用与服务端相同的椭圆曲线,即具有相同的椭圆曲线参数和生成元。客户端自身生成秘密β并妥善保存。进而,客户端可以采用自身私钥β对25加密。具体的,可以是对25的hash值加密,客户端与服务端采用相同的hash算法。例如,客户端可以采用β对25的hash值进行ecc加密,得到β
·
h(25)。则客户端发送至服务端的敏感字段可以为β
·
h(25),其中,β
·
h(25)表示敏感字段的值25的密文。
205.所述客户端通过与服务端的交互得到由服务端加密的同一敏感字段,可以包括服务端采用自身密钥对由客户端加密的敏感字段再次加密后发送至客户端,客户端采用自身密钥对两次加密后的敏感字段解密得到由服务端加密的敏感字段。该内容的核心是需要找到一个满足连续两次加密操作(两方先后加密)可以交换顺序进行解密的加密算法。根据ecc的密码学性质,双方约定采用相同的椭圆曲线,即具有相同的椭圆曲线参数和生成元,各自持有私钥α和β,加密操作为用α(或β)进行标量乘法运算,不论先用α加密后用β加密还是先用β加密后用α加密,都可以用相同或不同的顺序解密,即可以对加密结果用不同的顺序解密。类似的,根据rsa的密码学性质加密,双方约定采用一个相同的大质数q和原根g,各
自持有私钥α和β,加密操作为用α(或β)求幂并用q取模,不论先用α加密后用β加密还是先用β加密后用α加密,都可以用相同或不同的顺序解密,即可以对加密结果用不同的顺序解密。整体来说,这里客户端和服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法。
206.具体的,可以是服务端收到客户端发送的经客户端自身加密的敏感字段后,服务端对加密的敏感字段再次用服务端自身密钥加密后返回至客户端。进而,客户端采用自身密钥对两次加密后的敏感字段解密得到由服务端加密的敏感字段。
207.例如,情况1:服务端可以接收到客户端发送的(h(25))
β

208.服务端可以对加密后的敏感字段(亦即隐私字段)再次加密,并将再次加密后的敏感字段返回至客户端。具体的,服务端可以对隐私字段(h(25))
β
采用自身的rsa私钥α进行再次加密,得到((h(25))
β
)
α

209.例如,情况2:服务端可以接收到客户端发送的β
·
h(25)。
210.服务端可以对隐私字段再次加密,并将再次加密后的隐私字段返回至客户端。具体的,服务端可以对隐私字段β
·
h(25)采用自身的ecc私钥α进行再次加密,得到α
·
β
·
h(25)。
211.服务端采用自身密钥对由客户端加密的敏感字段(即隐私字段)再次加密后发送至客户端后,客户端可以采用自身密钥对两次加密后的隐私字段解密得到由服务端加密的敏感字段。
212.例如,对应上面情况1,客户端接收到服务端发送的((h(25))
β
)
α
,其中的幂次方运算存在性质如下:((h(25))
β
)
α
=(h(25))
βα
=(h(25))
αβ
=((h(25))
α
)
β
。进而,客户端可以采用自身私钥β的逆元对两次加密后的敏感字段解密,如下:对两次加密后的敏感字段解密,如下:这样,客户端得到由服务端加密的同一敏感字段,即(h(25))
α

213.对应上面情况2,客户端接收到服务端发送的α
·
β
·
h(25),其中的标量乘法运算存在性质如下:α
·
β
·
h(25)=β
·
α
·
h(25)。进而,客户端可以采用自身私钥β的逆元β-1
对两次加密后的敏感字段解密,如下:β-1
·
α
·
β
·
h(25)=β-1
·
β
·
α
·
h(25)=α
·
h(25)。这样,客户端同样得到由服务端加密的同一敏感字段,即α
·
h(25)。
214.需要说明的是,rsa中,根据欧拉定理,pk
·
sk=1mod(p-1)
·
(q-1),其中p和q两个大质数,所以pk和sk互为逆元。类似的,ecc中,pk=sk
·
g,g为ecc选定曲线上的的一个生成元,所以pk和sk也是互为逆元。
215.s320:客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识。
216.s310执行后,客户端可以得到由服务端加密的同一敏感字段。
217.客户端可以基于该由服务端加密的敏感字段在查询基中查询。例如,客户端解密后得到由服务端加密的隐私字段α
·
h(25)或(h(25))
α
,从而客户端基于该隐私字段在查询基中查询,例如分别在表2或表3中查询,可以得到age中包含该隐私字段的记录为id=d_1的这条记录,id为这条记录的标识。这样,客户基于该由服务端加密的隐私字段在查询基中查询,匹配到记录后可以定位得到匹配记录的标识。
218.s330:服务端采用不经意传输方式返回所述数据库中包含所述匹配标识在内的预定大小标识集合对应记录中的感兴趣字段的值至客户端。
219.s310中客户端发送的经过客户端加密的敏感字段使得服务端也无法获知客户端查找的敏感字段将命中哪一条记录,而只有客户端自己知道。这样,保护了客户端的隐私。但是,最终仍需要完成检索,这就需要服务端将客户端想查询的记录返回至客户端。
220.上述图2对应的实施例给出了n选1不经意传输的实现方式,这里,可以采用m选1的不经意传输,其中m《n。s320中,客户端还可以不将匹配得到的id单独返回至服务端,而是将匹配得到的id与其它一些伪造的id混淆组合在一起构造成混淆集,将混淆集发送至服务端,这样服务端无法准确获知客户端想要查找的是混淆集中的哪一条记录,并且需要保证客户端只能获得其中要查找的那一条记录,而无法获得其它记录。s320中,客户端发送的混淆集可以连同检索语句一并发送,例如select name where id=混淆集。或者,混淆集也可以在下面的s332发送,这里并不限定。
221.结合本说明书上述实施例,假设服务端的数据表中具有总计n条记录,这样,客户端的查询基中相应的也具有n条加密的记录。为了方便,数据记录的id按照顺序标识为id_0、id_1、id_2、...id_n-1。一个简单的实施流程如下:
222.s331:服务端预先生成n对不同的公私钥对并公开公钥。
223.服务端生成n对不同的公私钥对(pk-sk;pk是publick key,表示公钥;sk是secret key,表示私钥),例如分别是pk
0-sk0,pk
1-sk1,pk
2-sk2,...,pk
n-1-sk
n-1
,并公开这n个公钥,即公开pk0,pk1,pk2,...,pk
n-1
。服务端公开这n个有序的公钥后,客户端可以获得这n个公钥。
224.s332:客户端生成包含期望获得id在内的m大小的混淆集,并生成随机数r,并用期望获得的id对应的公钥对r进行加密后与混淆集一并发送至服务端。
225.这里假设客户端希望获得id_1的那条记录,同时不希望服务端知道客户端想要获得的记录是id_1的那条,便生成m大小的混淆集,m=4时这个混淆集例如为:{id_1,id_2,id_3,id_4}。
226.这4个id与公钥对例如存在以下对应关系:
227.pk1,id_1
228.pk2,id_2
229.pk3,id_3
230.pk4,id_4
231.客户端可以采用pk1对r进行加密后与混淆集一并发送至服务端。
232.此外,客户端可以将混淆集连同检索语句一并发送至服务端。这样,客户端可以采用pk1对r进行加密后与包含混淆集的检索语句一并发送,例如:
233.select name where id={id_1,id_2,id_3,id_4}|enc(r,pk1)
234.其中,“|”用于分割前面的检索语句和后面的加密后的随机数,下同。
235.s333:服务端接收到混淆集和加密的r后,用对应的m个私钥分别对加密的r进行解密。
236.服务端分别用sk1,sk2,sk3,sk4,分别解密经过pk1加密的随机数r。例如,服务端用sk1解密得到r1,用sk2解密得到r2,用sk3解密得到r3,用sk4解密得到r4。
237.显然,只有r1是和r相等的,因为只有用sk1进行解密的才是用对应pk1加密的;而用不对应pk1的sk2、sk3、sk4解密得到的结果r2、r3、r4都不会与r相同。通过解密,服务端只是得到形式相同的解密结果,并不知道真正的r是什么,也不知道客户端是用哪个公钥进行加密的。换句话说,服务端不知道客户端加密r时用的哪个公钥,因此服务端也不知道解密得到的4个结果r1、r2、r3、r4中的哪个才是真正的r。
238.此外,服务端接收到混淆集{id_1,id_2,id_3,id_4}后,可以从混淆集中得知客户端想要获取的数据是混淆集中4个id中的1个,但不确定是其中哪一个,从而保护了客户端隐私。
239.s334:服务端将混淆集中指定的记录采用对应序号的解密结果进行对称加密,将对称加密后的结果发送至客户端。
240.例如,服务端将id_1这条记录采用r1进行对称加密,将id_2这条记录采用r2进行对称加密,将id_3这条记录采用r3进行对称加密,将id_4这条记录采用r4)进行对称加密,并将这4个对称加密结果发送至客户端。
241.s335:客户端采用所述随机数r对所述对称加密结果中期望获得的id对应的加密结果进行对称解密,得到检索结果。
242.客户端采用所述随机数r对所述对称加密结果中期望获得的id对应的加密结果进行对称解密。具体的,例如上述s332中客户端期望获得的是id_1对应的那条记录/记录中的感兴趣字段的值,则客户端采用对应的公钥pk1对所述随机数r进行加密;s333中,服务端用对应的私钥sk1对解密结果进行解密,得到的r1=r,而用不对应pk1的sk2、sk3、sk4解密得到的结果r2、r3、r4都不会与r相同;s334中,服务端用r1、r2、r3、r4分别对对应的id_1、id_2、id_3、id_4这些记录/记录中的感兴趣字段的值进行对称加密,并将这个对称加密结果发送至客户端;s335中,客户端采用所述随机数r对所述4个对称加密结果进行对称解密。其中,4个对称解密结果中,只有id_1的加密结果是用r对称加密的,因此这里只有对id_1的加密结果采用r进行解密才能得到正确的值。从而,客户端可以获得正确的检索结果,即获得对应记录/对应记录中感兴趣字段的值。
243.当然,为了减少计算量,客户端可以仅采用所述随机数r对所述4个对称加密结果中期望获得的id对应的加密结果进行对称解密,即客户端仅采用r对id_1的加密结果进行解密,从而获得id_1的对应记录/对应记录中感兴趣字段的值,而无须采用r对id_2、id_3、id_4这些对称加密结果进行对称解密,因为客户端可以知道这些加密结果并非采用r进行的对称加密,即使采用r进行对称解密也无法解出正确结果。
244.上述s331~s335仅是示例性的一种实现方式。在另一种实现方式中,可以将混淆集的构建和传输与ot协议的执行进行解耦,用ot协议来传输密钥。具体的,一方面,客户端可以将m大小的混淆集发送至服务端,当然客户端知道m大小的混淆集中的第几个是真正想要获得的结果的标识,另一方面,服务端可以生成m个对称密钥,通过m选1的ot,客户端可以获得其中指定的一个对称密钥,即客户端获得真正想要获得结果的那个标识对应的对称密钥。这样,服务端可以将客户端混淆集中m个标识对应的记录采用对应的对称密钥加密后发送至客户端,从而客户端对其中真正想要获得的结果采用正确的对称密钥解密,从而得到结果。其中,服务端可以预先生成生成m个对称密钥,这样可以在进行ot交互之前批量完成密钥准备的工作,而不会占用ot协议执行的时间。
key,表示私钥;公钥可以公开,私钥需要保密),例如分别是pk
1-sk1,pk
2-sk2,...,pk
n-skn,并公开这n个公钥,即公开pk1,pk2,...,pkn。服务端公开这n个有序的公钥后,客户端可以获得这n个公钥。
259.s432:客户端生成随机数r,并用期望获得的字段对应的公钥对r进行加密后发送至服务端。
260.这里假设客户端希望获得field_1的那个字段,同时不希望服务端知道客户端想要获得的是field_1的字段。这样,客户端可以采用pk1对r进行加密后发送至服务端。上述的有序,主要是指字段和公钥有对应关系,而这样的对应关系可以被客户端知晓。例如上述例子中,客户端希望获得field_1的那个字段的值但同时不希望服务端知道客户端想要获得的是field_1的值,客户端可以采用field_1对应的pk1对r进行加密后发送至服务端;类似的,客户端希望获得field_t的那个字段的值但同时不希望服务端知道客户端想要获得的是field_t的值,客户端可以采用field_t对应的pk
t
对r进行加密后发送至服务端。
261.s433:服务端接收到加密的r后,用n个私钥分别对其解密。
262.服务端分别用sk1,sk2,...,skn分别解密经过pk1加密的随机数r。例如,服务端用sk1解密得到r1,...,用skn解密得到rn。
263.显然,只有r1是和r相等的,因为只有用sk1进行解密的才是用对应pk1加密的;而用不对应pk1的sk2、...、skn解密得到的结果r2、...、rn都不会与r相同。通过解密,服务端只是得到形式相同的解密结果,并不知道真正的r是什么,也不知道客户端是用哪个公钥进行加密的。换句话说,服务端不知道客户端加密r时用的哪个公钥,因此服务端也不知道解密得到的n个结果r1、r2、...、rn中的哪个才是真正的r。
264.s434:服务端将数据库匹配记录的各个字段按照序号采用对应序号的解密结果进行对称加密,将对称加密后的结果发送至客户端。
265.例如,服务端将field_1这个字段采用r1进行对称加密,将field_2这个字段采用r2进行对称加密,...,将field_n这个字段采用rn进行对称加密,并将这n个对称加密结果发送至客户端。
266.s435:客户端采用所述随机数r对所述对称加密结果中期望获得的字段对应的加密结果进行对称解密,得到检索结果。
267.客户端采用所述随机数r对所述对称加密结果中期望获得的字段对应的加密结果进行对称解密。具体的,例如上述s432中客户端期望获得的是field_1字段的值,则客户端采用对应的公钥pk1对所述随机数r进行加密;s433中,服务端用对应的私钥sk1对解密结果进行解密,得到的r1=r,而用不对应pk1的sk2、...、skn解密得到的结果r2、...、rn都不会与r相同;s434中,服务端用r1、r2、...、rn分别对对应的field_1、...、field_n这些字段的值进行对称加密,并将这n个对称加密结果发送至客户端;s435中,客户端采用所述随机数r对所述n个对称加密结果进行对称解密。其中,n个对称解密结果中,只有field_1的加密结果是用r对称加密的,因此这里只有对field_1的加密结果采用r进行解密才能得到正确的值。从而,客户端可以获得正确的检索结果,即获得对应记录中感兴趣字段的值。
268.当然,为了减少计算量,客户端可以仅采用所述随机数r对所述n个对称加密结果中期望获得的字段对应的加密结果进行对称解密,即客户端仅采用r对field_1的加密结果进行解密,从而获得field_1的对应记录中感兴趣字段的值,而无须采用r对field_2、...、
field_n这些对称加密结果进行对称解密,因为客户端可以知道这些加密结果并非采用r进行的对称加密,即使采用r进行对称解密也无法解出正确结果。
269.需要说明的是,s431可以是在s430之后,或者是在s430之前,这里并不限制。
270.上面是所述客户端在查询基中检索得到匹配记录的感兴趣字段数量为1时,通过n选1不经意传输,将所述数据库中包含所述匹配标识在内的所有所述标识对应记录中感兴趣字段的值传输至所述客户端。
271.上述实施例中,服务端并不知道客户端查询的是哪个字段,而是将数据库中匹配记录的所有字段均加密返回至客户端,保护了客户端的隐私。但是,s433中,服务端用n个私钥分别对接收到加密的r进行解密,这样进行大量的非对称解密计算,需要消耗大量的cpu和内存资源。并且,s434中传输n个对称加密后的结果也将占用大量带宽。尤其是当n的数量比较大时,服务端的计算量较大,带宽占用也较大。
272.此外,可能匹配记录的感兴趣字段大于1,例如为k条(k》1),则可以通过n选k不经意传输来实现。关于n选k,一种实现方案是将n个字段中的每k个组成一个集合,每个集合对应一个公私钥对,这样总计会有(c表示组合公式,n里任选k个构成的组合的数量)。接下来,采用选1的不经意传输方式将所述数据库中包含所述感兴趣字段在内的所有字段的值传输至所述客户端。选1的不经意传输方式,实现过程类似于上述n选1不经意传输的实现过程。即所述服务端用个不同密钥分别加密所述匹配记录中的每k个字段的值得到个加密结果,并发送该个加密结果至客户端;所述客户端采用感兴趣字段对应的密钥解密所述服务端发送的个加密结果中对应的1个加密结果。具体实现类似上述s431-s435的过程,这里不再赘述。
273.需要说明的是,上述的r也可以是非对称密钥中的公钥,这样,客户端接收到由r加密的结果后,可以采用自身的私钥对其解密得到结果。即s434和s435中,服务端将field_1这个字段采用r1进行非对称加密,将field_2这个字段采用r2进行非对称加密,...,将field_n这个字段采用rn进行非对称加密,并将这n个加密结果发送至客户端,客户端接收到这些加密的结果后,可以采用自身私钥对其中期望获得的感兴趣字段对应的加密结果进行非对称解密得到结果。下面也类似,不再重复。
274.此外,本说明书给出以下增加了构造字段混淆集的一种实施方式:
275.s510:客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段。
276.s520:客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识。
277.s530:服务端采用不经意传输方式返回所述数据库中所述匹配标识对应记录中的感兴趣字段的值至客户端。
278.上述图3对应的实施例给出了n选1不经意传输的实现方式,这里,可以采用m选1的不经意传输,其中m《n。s520中,客户端还可以将感兴趣字段与其它一些伪造的感兴趣字段混淆组合在一起构造成混淆集,将混淆集发送至服务端,这样服务端无法准确获知客户端想要查找的是混淆集中的哪一条字段,并且需要保证客户端只能获得其中要查找的那一条
感兴趣字段,而无法获得其它字段。s520中,客户端发送的混淆集可以连同检索语句一并发送,或者混淆集也可以在下面的s532发送,这里并不限定。
279.结合本说明书上述实施例,假设服务端的数据表中除去id的字段总数为n,一个简单的实施流程如下:
280.s531:服务端预先生成n对不同的公私钥对并公开公钥。
281.服务端生成n对不同的公私钥对(pk-sk;pk是publick key,表示公钥;sk是secret key,表示私钥),例如分别是pk
1-sk1,pk
2-sk2,...,pk
n-skn,并公开这n个公钥,即公开pk1,pk2,...,pkn。服务端公开这n个有序的公钥后,客户端可以获得这n个公钥。
282.s532:客户端生成包含感兴趣字段在内的m大小的混淆集,并生成随机数r,并用期望获得的感兴趣字段对应的公钥对r进行加密后与混淆集一并发送至服务端。
283.这里假设客户端希望获得field_1的那个字段,同时不希望服务端知道客户端想要获得的记录是field_1的那个,便生成m大小的混淆集,m=4时这个混淆集例如为:{field_1,field_2,field_3,field_4}。
284.这4个字段与公钥对例如存在以下对应关系:
285.pk1,field_1
286.pk2,field_2
287.pk3,field_3
288.pk4,field_4
289.客户端可以采用pk1对r进行加密后与混淆集一并发送至服务端。
290.此外,客户端可以将混淆集连同检索语句一并发送至服务端。这样,客户端可以采用pk1对r进行加密后与包含混淆集的检索语句一并发送,例如:
291.select{field_1,field_2,field_3,field_4}where id=1|enc(r,pk1)
292.其中,“|”用于分割前面的检索语句和后面的加密后的随机数,下同。
293.s533:服务端接收到混淆集和加密的r后,用对应的m个私钥分别对加密的r进行解密。
294.服务端分别用sk1,sk2,sk3,sk4,分别解密经过pk1加密的随机数r。例如,服务端用sk1解密得到r1,用sk2解密得到r2,用sk3解密得到r3,用sk4解密得到r4。
295.显然,只有r1是和r相等的,因为只有用sk1进行解密的才是用对应pk1加密的;而用不对应pk1的sk2、sk3、sk4解密得到的结果r2、r3、r4都不会与r相同。通过解密,服务端只是得到形式相同的解密结果,并不知道真正的r是什么,也不知道客户端是用哪个公钥进行加密的。换句话说,服务端不知道客户端加密r时用的哪个公钥,因此服务端也不知道解密得到的4个结果r1、r2、r3、r4中的哪个才是真正的r。
296.此外,服务端接收到混淆集field_1,field_2,field_3,field_4}后,可以从混淆集中得知客户端想要获取的数据是混淆集中4个字段中的1个,但不确定是其中哪一个,从而保护了客户端隐私。
297.s534:服务端将混淆集中指定的字段采用对应序号的解密结果进行对称加密,将对称加密后的结果发送至客户端。
298.例如,服务端将field_1这个字段采用r1进行对称加密,将field_2这个字段采用r2进行对称加密,将field_3这个字段采用r3进行对称加密,将field_4这个字段采用r4进
行对称加密,并将这4个对称加密结果发送至客户端。
299.s535:客户端采用所述随机数r对所述对称加密结果中期望获得的感兴趣字段对应的加密结果进行对称解密,得到检索结果。
300.客户端采用所述随机数r对所述对称加密结果中期望获得的感兴趣字段对应的加密结果进行对称解密。具体的,例如上述s532中客户端期望获得的是field_1对应的字段的值,则客户端采用对应的公钥pk1对所述随机数r进行加密;s533中,服务端用对应的私钥sk1对解密结果进行解密,得到的r1=r,而用不对应pk1的sk2、sk3、sk4解密得到的结果r2、r3、r4都不会与r相同;s534中,服务端用r1、r2、r3、r4分别对对应的field_1、field_2、field_3、field_4这些字段的值进行对称加密,并将这个对称加密结果发送至客户端;s535中,客户端采用所述随机数r对所述4个对称加密结果进行对称解密。其中,4个对称解密结果中,只有field_1的加密结果是用r对称加密的,因此这里只有对field_1的加密结果采用r进行解密才能得到正确的值。从而,客户端可以获得正确的检索结果,即获得对应感兴趣字段的值。
301.当然,为了减少计算量,客户端可以仅采用所述随机数r对所述4个对称加密结果中期望获得的感兴趣字段对应的加密结果进行对称解密,即客户端仅采用r对field_1的加密结果进行解密,从而获得field_1的对应字段的值,而无须采用r对field_2、field_3、field_4这些对称加密结果进行对称解密,因为客户端可以知道这些加密结果并非采用r进行的对称加密,即使采用r进行对称解密也无法解出正确结果。
302.上述s531~s535仅是示例性的一种实现方式。在另一种实现方式中,可以将混淆集的构建和传输与ot协议的执行进行解耦,用ot协议来传输密钥。具体的,一方面,客户端可以将m大小的混淆集发送至服务端,当然客户端知道m大小的混淆集中的第几个是真正想要获得的感兴趣字段,另一方面,服务端可以生成m个对称密钥,通过m选1的ot,客户端可以获得其中指定的一个对称密钥,即客户端获得真正想要获得结果的那个感兴趣字段对应的对称密钥。这样,服务端可以将客户端混淆集中m个字段采用对应的对称密钥加密后发送至客户端,从而客户端对其中真正想要获得的结果采用正确的对称密钥解密,从而得到结果。其中,服务端可以预先生成生成m个对称密钥,这样可以在进行ot交互之前批量完成密钥准备的工作,而不会占用ot协议执行的时间。
303.上面是所述客户端在查询基中检索得到匹配记录的感兴趣字段数量为1时,通过m选1不经意传输,服务端将所述混淆集中指明的m个感兴趣字段的值传输至所述客户端。此外,可能匹配的结果大于1,例如为k条(k》1),则可以通过m选k不经意传输来实现。m选k不经意传输的核心在于,客户端构造m大小的混淆集并发送至服务端,1《m《n,该m个混淆集中的1个包含所述匹配的k个字段,例如m=4,k=2,匹配标识为field_1和field_3,则构造的混淆集例如为{{field_1,field_3},{field_2和field_4},{field_3和field_4},{field_2}},显然其中第一个为感兴趣字段构成的子集合;进而,服务端生成m个对称密钥,通过m选1的ot协议使客户端获得其指定的那个对称密钥;服务端用m个不同对称密钥分别加密所述混淆集中的m个子集合得到m个加密结果子集合,并发送该m个加密结果子集合至客户端;客户端采用获得的对称密钥解密感兴趣字段构成的那个子集合,从而获得正确的解密结果。具体实现与上述将混淆集的构建和传输与ot协议的执行进行解耦,用ot协议来传输密钥的过程类似,不再展开。
304.上述s210~s230和s310~s330的过程分别给出了对匹配id采用不经意传输和结合混淆集的不经意传输方式,上述s410~s430的过程给出了对感兴趣字段采用不经意传输的方式,两者可以叠加,具体例如图4所示,过程如下:
305.s610:客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段。
306.s620:客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配的标识。
307.s630:服务端采用双重不经意传输方式返回所述数据库中包含所述匹配标识在内的预定大小标识集合对应记录中的感兴趣字段的值至客户端;所述双重不经意传输方式是结合预定大小标识集合的不经意传输和感兴趣字段的不经意传输。
308.例如预定大小标识集合是全部的标识,匹配标识的数量是1,感兴趣字段的数量也是1。则,第一重不经意传输可以包括:
309.服务端将生成的行非对称密钥对中的每一个公钥发送至客户端,例如n行(一行一个记录)n个非对称密钥对(称为行非对称密钥对);客户端采用每一公钥分别对客户端生成的第一随机数加密分别加密后返回至服务端。第二重不经意传输可以包括:服务端将生成的列非对称密钥对中的每一个公钥发送至客户端,例如m列(一列一个字段)有m个非对称密钥对(称为列非对称密钥对);客户端采用每一公钥分别对客户端生成的第二随机数加密分别加密后返回至服务端。
310.服务端采用每一行对称密钥对中的私钥对对应公钥加密的第一随机数解密,得到等于行数量的第一解密结果并分别对应每一行,并采用每一列非对称密钥对中的私钥对对应公钥加密的第二随机数解密,得到等于列数量的第二解密结果并分别对应每一列。
311.服务端采用每一第一解密结果分别对称加密每一列中对应行的值,并采用每一第二解密结果分别对称加密每一行中的对称加密结果,并将两次对称加密后的结果返回至客户端。或者是服务端采用每一第二解密结果分别对称加密每一行的对应列的值,并采用每一第一解密结果分别对称加密每一行中的对称加密结果,并将两次对称加密后的结果返回至客户端。
312.客户端采用匹配标识对应行对称密钥和感兴趣字段对应对称密钥先后对称解密对应行、对应列的两次对称加密结果,从而得到值,先后两次对称解密的顺序对应于两次对称加密的顺序。
313.涉及的非对称密钥的生成,随机数作为对称密钥,对称加密和非对称加密的过程可以参阅上述各相关实施例,不再赘述。可见,上述叠加的过程相当于两个n选1ot的叠加。类似的,可以是前述行的n选k和列的n选k的叠加。
314.类似的,行中引入混淆集的n中的m选1ot,也可以与列的n选1ot过程叠加,这将影响s630中预定大小表示集合,如前所述。其中m为行的混淆集的大小(n为行的数量)。
315.上述s210~s230和s310~s330的过程分别给出了对匹配id采用不经意传输和结合混淆集的不经意传输方式,上述s510~s530的过程给出了对感兴趣字段采用引入混淆集的不经意传输的方式,两者也可以叠加。对感兴趣字段采用引入混淆集的不经意传输的方式,可以是n选1ot,n选k ot,n选m中的k ot,这里的m为除去id的列的混淆集的大小(n为除去id的列的数量)。例如对于下面的检索语句:
316.select{field_1,field_2,field_3,field_4}where id={{id_1,id_3},{id_2和id_4},{id_3和id_4},{id_2}}
317.前者的混淆集为{field_1,field_2,field_3,field_4}中,客户端感兴趣字段例如是field_1;后者的混淆集为{{id_1,id_3},{id_2和id_4},{id_3和id_4},{id_2}}中,匹配的标识实际对应的是{id_1,id_3}。则,可以采用混淆集并通过双重ot传输id_1,id_3的field_1字段的值,同时服务端无法确定匹配的id是后者混淆集中的哪一个,也无法确定感兴趣字段是前者混淆集中的哪一个,而客户端除了可以获得id_1,id_3这两条记录中field_1字段的值以外并不会获得更多的信息。具体过程可以参考上述实施例并组合得到。
318.以下介绍本说明书一实施例中的实现隐私信息检索的系统,包括服务端与客户端,客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
319.所述服务端配置有数据库,并将该数据库加密后得到查询基,并发送该查询基至客户端;
320.在一次检索过程中:
321.所述客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;
322.所述客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识;
323.所述服务端与所述客户端之间通过不经意传输方式将所述数据库中所述匹配标识对应记录中感兴趣字段的值传输至所述客户端。
324.以下介绍本说明书一实施例中的实现隐私信息检索的服务端,所述服务端与客户端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
325.所述服务端配置有数据库,并将该数据库加密后得到查询基,并发送该查询基至客户端;
326.在一次检索过程中:
327.所述服务端接收所述客户端发送的经自身加密的敏感字段并再次加密后返回至所述客户端;所述服务端还与所述客户端之间通过不经意传输方式将所述数据库中所述匹配标识对应记录中感兴趣字段的值传输至所述客户端。
328.以下介绍本说明书一实施例中的实现隐私信息检索的客户端,该客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
329.所述客户端配置有查询基,所述查询基由所述服务端将数据库加密后得到;
330.在一次检索过程中:
331.所述客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;所述客户端还在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识;所述客户端还与所述服务端之间通过不经意传输方式获得所述数据库中与所述匹配标识对应记录中感兴趣字段的值。
332.以下介绍本说明书一实施例中的实现隐私信息检索的系统,包括服务端与客户端,客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
333.所述服务端配置有数据库,并将该数据库加密后得到查询基,并发送该查询基至客户端;
334.在一次检索过程中:
335.所述客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;
336.所述客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配记录的标识,并生成包含感兴趣字段在内的m大小的混淆集;
337.所述服务端与所述客户端之间通过不经意传输方式将所述数据库中所述匹配记录中由m大小的混淆集指示的字段的值传输至所述客户端。
338.以下介绍本说明书一实施例中的实现隐私信息检索的系统,包括服务端与客户端,客户端与服务端对同一目标执行的加/解密采用可交换顺序的加/解密算法,且:
339.所述服务端配置有数据库,并将该数据库加密后得到查询基,并发送该查询基至客户端;
340.在一次检索过程中:
341.客户端发送经自身加密的敏感字段至服务端,并通过与服务端的交互得到由服务端加密的同一敏感字段;
342.客户端在查询基中根据所述由服务端加密的敏感字段检索,得到匹配的标识;
343.服务端采用双重不经意传输方式返回所述数据库中包含所述匹配标识在内的预定大小标识集合对应记录中的感兴趣字段的值至客户端;所述双重不经意传输方式是结合预定大小标识集合的不经意传输和感兴趣字段的不经意传输。
344.在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmable logic device,pld)(例如现场可编程门阵列(field programmable gate array,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advanced boolean expression language)、ahdl(altera hardware description language)、confluence、cupl(cornell university programming language)、hdcal、jhdl(java hardware description language)、lava、lola、myhdl、palasm、rhdl(ruby hardware description language)等,目前最普遍使用的是vhdl(very-high-speed integrated circuit hardware description language)与verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
345.控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可
读介质、逻辑门、开关、专用集成电路(application specific integrated circuit,asic)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc 625d、atmel at91sam、microchip pic18f26k20以及silicone labs c8051f320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
346.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本说明书不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
347.虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
348.为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
349.本说明书是参照根据本说明书实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
350.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
351.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
352.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
353.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
354.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
355.本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
356.本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
357.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意
性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
358.以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献