一种基于多头联盟的安全隐匿数据查询方法转让专利

申请号 : CN202111329881.8

文献号 : CN114003938B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邢冰刘洋谷胜才马煜翔钟马明

申请人 : 蓝象智联(杭州)科技有限公司

摘要 :

本发明公开了一种基于多头联盟的安全隐匿数据查询方法。它包括以下步骤:预处理阶段:每个数据终端都作为一次查询方与其他每个作为数据方的数据终端分别配合进行一次预处理;在线处理阶段:查询方将加密的查询信息及解密密钥发送给协调终端,协调终端将加密的查询信息发送给数据方,数据方根据加密的查询信息找出对应的加密数据并发送给协调终端,协调终端使用每个解密密钥对每个数据方发送的加密数据进行解密,根据解密结果发送查询数据核验是否成功的信息到查询方。本发明能够使得多头联盟中的成员在相互数据不出库的情况下完成了数据的查询,保护每个成员的数据隐私,避免数据泄露。

权利要求 :

1.一种基于多头联盟的安全隐匿数据查询方法,所述多头联盟包括2个以上数据终端,其特征在于,包括预处理阶段和在线处理阶段;

预处理阶段:协调终端预先加载所有数据终端的路由信息,协调终端转发数据终端之间的数据通信,每个数据终端作为查询方与其他每个数据终端作为数据方分别配合进行密钥的交换以及数据方数据的加密处理,每个作为数据方的数据终端将经过加密处理的自身数据发送给作为查询方的数据终端;

在线处理阶段:接收到查询请求的数据终端作为查询方根据作为数据方的每个数据终端发送的加密数据计算出对应的解密密钥,将加密的查询信息及解密密钥发送给协调终端,协调终端将加密的查询信息发送给作为数据方的每个数据终端,作为数据方的数据终端根据加密的查询信息找出对应的加密数据并发送给协调终端,协调终端使用每个解密密钥对每个数据方发送的加密数据进行解密,如果有一次解密成功,则协调终端发送查询数据核验成功的信息到查询方,如果没有一次解密成功,则协调终端发送查询数据核验失败的信息到查询方;

所述预处理阶段的具体步骤如下:

M1:协调终端预先加载所有数据终端的路由信息;

M2:每个数据终端作为查询方与其他每个数据终端分别配合进行一次预处理,其他每个数据终端作为数据方,查询方与某个数据方配合进行一次预处理的步骤如下:M21:数据方使用随机数a、随机数b以及secp256r1椭圆曲线的基点g生成secp256r1椭圆曲线的两个点p0、p1,公式如下:p0 =g * a,p1 = g * b,数据方将p0、p1发送到协调终端,协调终端将p0、p1转发到查询方;

M22:查询方随机生成一个n位的二进制数C,根据p0、p1生成n个密钥KS和n个参数T,第i个密钥KSi的生成方法如下:KSi= p0*RDi,RDi为第i个随机大数,1≤i≤n;

第i个参数Ti的生成方法如下:

如果二进制数C的第i位为1,则Ti= p1‑g*RDi,

如果二进制数C的第i位为0,则Ti= g*RDi,

查询方将生成的n个参数T都通过协调终端转发到数据方;

M23:数据方根据接收到的n个参数T计算出n个密钥对KP,第i个密钥对KPi包括KPi0、KPi1,生成方法如下:KPi0= Ti*a,

KPi1=p1*a‑Ti*a,

其中,KPi0为第i个密钥对KPi的第0个密钥,KPi1为第i个密钥对KPi的第1个密钥;

M24:数据方对自身数据库内的所有数据D使用一致性hash算法进行分桶操作,存储桶总数为E,根据存储桶总数利用一致性hash算法计算出每个数据D应该存储的存储桶的编号,将每个数据D存储到对应编号的存储桶内,每个存储桶内存储的数据D小于或等于n个,对每个存储桶内的每个数据D进行处理,得到每个存储桶内的每个数据D对应的参数CM、参数U,编号为j的存储桶内的第i个数据Dji对应的参数CMji和参数Uji通过如下方法得到:Fji= ENC(zero,KPi0),

CMji= Hash(Fji),

Uji= ENC(zero,KPi0)⊕ENC(zero,KPi1)⊕Dji,其中,ENC(zero, KPi0)表示使用第i个密钥对KPi的第0个密钥对空数据做加密,Hash(Fi)表示对参数Fi进行哈希处理,⊕为按位异或运算符;

数据方将每个存储桶的编号及其内每个数据D对应的参数U绑定后通过协调终端转发到查询方,将得到的每个存储桶内的每个数据D对应的参数CM存储;

M25:查询方根据每个存储桶内的每个数据D对应的参数U计算出加密串Q,编号为j的存储桶内的第i个数据Dji对应的参数Uji对应的加密串Qji的计算方法如下:如果二进制数C的第i位为0,则Qji= ENC(zero, KSi),如果二进制数C的第i位为1,则Qji= ENC(zero, KSi)⊕Uji,ENC(zero, KSi)表示使用第i个密钥KSi对空数据做加密,查询方将计算出的加密串Q存储;

所述在线处理阶段的具体步骤如下:

接收到查询请求的数据终端作为查询方进行数据查询,其他每个数据终端作为数据方,数据查询的步骤如下:N1:查询方读取要查询的数据d,根据数据d、存储桶的总数E利用一致性hash算法计算出数值k,数值k为利用一致性hash算法计算出的数据d应该存储的存储桶的编号;

N2:查询方查询存储的与其他每个数据方对应的加密串Q,找出其他每个数据方的编号为k的存储桶对应的所有加密串Q,计算出其他每个数据方的编号为k的存储桶对应的所有加密串Q对应的所有参数SM,查询方将数值k以及计算出的与其他每个数据方对应的所有参数SM发送到协调终端;

N3:协调终端将数值k发送给每个数据方;

N4:每个数据方查找出编号为k的存储桶内的每个数据D对应的参数CM,对编号为k的存储桶内的每个数据D进行加密得到对应的加密串DEM,每个数据方将得到的所有加密串DEM发送给协调终端;

N5:协调终端依次使用每一个参数SM作为密钥对每个数据方发送的所有加密串DEM进行解密操作,如果有一次解密成功,则协调终端发送查询数据核验成功的信息到查询方,如果没有一次解密成功,则协调终端发送查询数据核验失败的信息到查询方。

2.根据权利要求1所述的一种基于多头联盟的安全隐匿数据查询方法,其特征在于,所述数值k的计算公式如下:k= consistent_hash(d,E)。

3.根据权利要求1所述的一种基于多头联盟的安全隐匿数据查询方法,其特征在于,所述步骤N2中,计算出与某个数据方的编号为k的存储桶对应的第p个加密串Qkp对应的参数SMkp的方法如下:SMkp= Hash(Qkp⊕(Cp&d)),Cp表示二进制数C的第p位的值。

4.根据权利要求1所述的一种基于多头联盟的安全隐匿数据查询方法,其特征在于,所述步骤N4中,对编号为k的存储桶内的第i个数据Dki进行加密得到加密串DEMki的计算方法如下:DEMki = ENC(Dki,CMki),

其中,ENC(Dki,CMki)表示使用编号为k的存储桶内的第i个数据Dki对应的参数CMki对数据Dki进行加密。

5.根据权利要求1所述的一种基于多头联盟的安全隐匿数据查询方法,其特征在于,所述步骤N5中,协调终端使用参数SMkp作为密钥对某个数据方发送的加密串DEMki进行解密操作的步骤如下:RESki = DEC(SMkp,DEMki),

DEC(SMkp,DEMki)表示使用参数SMkp对加密串DEMki做解密;

根据解密结果RESki判断是否解密成功。

6.根据权利要求1所述的一种基于多头联盟的安全隐匿数据查询方法,其特征在于,所述路由信息包括数据终端的IP或域名。

7.根据权利要求1所述的一种基于多头联盟的安全隐匿数据查询方法,其特征在于,所述存储桶总数由多头联盟的所有数据终端预先约定好。

说明书 :

一种基于多头联盟的安全隐匿数据查询方法

技术领域

[0001] 本发明涉及数据查询技术领域,尤其涉及一种基于多头联盟的安全隐匿数据查询方法。

背景技术

[0002] 多头借贷指同一借贷人在2家或者2家以上的金融机构提出借贷需求的行为。一般来说,当借贷人出现了多头借贷的情况,说明该借贷人资金需求出现了较大困难,有理由怀疑其还款能力。由于大多数现金贷平台及数据征信公司并不会让别人共享自己的数据,因此借贷者在多个平台重复借贷,出现以贷养贷的行为,从而使得个人债务越来越多。
[0003] 金融机构的风控系统在预防多头借贷的时候一般都是通过征信渠道、数据公司、爬虫等方式或者借贷申请人的贷款信息来判断借贷申请人是否在多家申请过贷款,但是这种方式在目前隐私保护和征信管理办法下有以下几个缺点:
[0004] 1、金融机构的数据都是一座座的数据孤岛,不会和其他的金融机构共享自己的数据以防自己的潜在客户被别人获取;
[0005] 2、通过数据公司购买数据这种方式目前涉及到个人隐私数据的泄露,已经不可行;
[0006] 3、目前查询是明文交互的,机构之间会有数据泄漏的问题。

发明内容

[0007] 本发明为了解决上述技术问题,提供了一种基于多头联盟的安全隐匿数据查询方法,其能够使得多头联盟中的成员在相互数据不出库的情况下完成了数据的查询,保护每个成员的数据隐私,避免数据泄露。
[0008] 为了解决上述问题,本发明采用以下技术方案予以实现:
[0009] 本发明的一种基于多头联盟的安全隐匿数据查询方法,所述多头联盟包括2个以上数据终端,包括预处理阶段和在线处理阶段:
[0010] 预处理阶段:协调终端预先加载所有数据终端的路由信息,协调终端转发数据终端之间的数据通信,每个数据终端作为查询方与其他每个数据终端作为数据方分别配合进行密钥的交换以及数据方数据的加密处理,每个作为数据方的数据终端将经过加密处理的自身数据发送给作为查询方的数据终端;
[0011] 在线处理阶段:接收到查询请求的数据终端作为查询方根据作为数据方的每个数据终端发送的加密数据计算出对应的解密密钥,将加密的查询信息及解密密钥发送给协调终端,协调终端将加密的查询信息发送给作为数据方的每个数据终端,作为数据方的数据终端根据加密的查询信息找出对应的加密数据并发送给协调终端,协调终端使用每个解密密钥对每个数据方发送的加密数据进行解密,如果有一次解密成功,则协调终端发送查询数据核验成功的信息到查询方,如果没有一次解密成功,则协调终端发送查询数据核验失败的信息到查询方。
[0012] 在本方案中,协调终端负责数据终端的消息路由和转发,不存储数据。数据终端维护自己的名单数据,数据对其他数据终端不可见;各个数据终端的数据查询系统是一致的,并在协调终端注册自己用于被发现的路由信息;每个数据终端在自身查询数据时作为查询方,被其他数据终端查询数据时作为数据方。
[0013] 预处理阶段,每个数据终端都作为一次查询方与其他每个作为数据方的数据终端分别配合进行一次预处理。预处理阶段已经完成了大部分的计算和通信,大大提高了查询效率。整个查询过程中,数据方不知道查询数据的内容,查询方不知道验证成功的信息来自哪个数据方,协调终端既不知道查询数据的内容,也不知道数据方的数据内容,同时保护了查询方、数据方双方的数据安全。预处理阶段、在线处理阶段都是密文交互的,避免数据泄漏。
[0014] 作为优选,所述预处理阶段的具体步骤如下:
[0015] M1:协调终端预先加载所有数据终端的路由信息;
[0016] M2:每个数据终端作为查询方与其他每个数据终端分别配合进行一次预处理,其他每个数据终端作为数据方,查询方与某个数据方配合进行一次预处理的步骤如下:
[0017] M21:数据方使用随机数a、随机数b以及secp256r1椭圆曲线的基点g生成secp256r1椭圆曲线的两个点p0、p1,公式如下:
[0018] p0 =g * a,p1 = g * b,数据方将p0、p1发送到协调终端,协调终端将p0、p1转发到查询方;
[0019] M22:查询方随机生成一个n位的二进制数C,根据p0、p1生成n个密钥KS和n个参数T,第i个密钥KSi的生成方法如下:
[0020] KSi= p0*RDi,RDi为第i个随机大数,1≤i≤n;
[0021] 第i个参数Ti的生成方法如下:
[0022] 如果二进制数C的第i位为1,则Ti= p1‑g*RDi,
[0023] 如果二进制数C的第i位为0,则Ti= g*RDi,
[0024] 查询方将生成的n个参数T都通过协调终端转发到数据方;
[0025] M23:数据方根据接收到的n个参数T计算出n个密钥对KP,第i个密钥对KPi包括KPi0、KPi1,生成方法如下:
[0026] KPi0= Ti*a,
[0027] KPi1=p1*a‑Ti*a,
[0028] 其中,KPi0为第i个密钥对KPi的第0个密钥,KPi1为第i个密钥对KPi的第1个密钥;
[0029] M24:数据方对自身数据库内的所有数据D使用一致性hash算法进行分桶操作,存储桶总数为E,根据存储桶总数利用一致性hash算法计算出每个数据D应该存储的存储桶的编号,将每个数据D存储到对应编号的存储桶内,每个存储桶内存储的数据D小于或等于n个,对每个存储桶内的每个数据D进行处理,得到每个存储桶内的每个数据D对应的参数CM、参数U,编号为j的存储桶内的第i个数据Dji对应的参数CMji和参数Uji通过如下方法得到:
[0030] Fji= ENC(zero,KPi0),
[0031] CMji= Hash(Fji),
[0032] Uji= ENC(zero,KPi0)⊕ENC(zero,KPi1)⊕Dji,
[0033] 其中,ENC(zero, KPi0)表示使用第i个密钥对KPi的第0个密钥对空数据做加密,Hash(Fi)表示对参数Fi进行哈希处理,⊕为按位异或运算符;
[0034] 数据方将每个存储桶的编号及其内每个数据D对应的参数U绑定后通过协调终端转发到查询方,将得到的每个存储桶内的每个数据D对应的参数CM存储;
[0035] M25:查询方根据每个存储桶内的每个数据D对应的参数U计算出加密串Q,编号为j的存储桶内的第i个数据Dji对应的参数Uji对应的加密串Qji的计算方法如下:
[0036] 如果二进制数C的第i位为0,则Qji= ENC(zero, KSi),
[0037] 如果二进制数C的第i位为1,则Qji= ENC(zero, KSi)⊕Uji,
[0038] ENC(zero, KSi)表示使用第i个密钥KSi对空数据做加密,
[0039] 查询方将计算出的加密串Q存储。
[0040] 作为优选,所述在线处理阶段的具体步骤如下:
[0041] 接收到查询请求的数据终端作为查询方进行数据查询,其他每个数据终端作为数据方,数据查询的步骤如下:
[0042] N1:查询方读取要查询的数据d,根据数据d、存储桶的总数E利用一致性hash算法计算出数值k,数值k为利用一致性hash算法计算出的数据d应该存储的存储桶的编号;
[0043] N2:查询方查询存储的与其他每个数据方对应的加密串Q,找出其他每个数据方的编号为k的存储桶对应的所有加密串Q,计算出其他每个数据方的编号为k的存储桶对应的所有加密串Q对应的所有参数SM,查询方将数值k以及计算出的与其他每个数据方对应的所有参数SM发送到协调终端;
[0044] N3:协调终端将数值k发送给每个数据方;
[0045] N4:每个数据方查找出编号为k的存储桶内的每个数据D对应的参数CM,对编号为k的存储桶内的每个数据D进行加密得到对应的加密串DEM,每个数据方将得到的所有加密串DEM发送给协调终端;
[0046] N5:协调终端依次使用每一个参数SM作为密钥对每个数据方发送的所有加密串DEM进行解密操作,如果有一次解密成功,则协调终端发送查询数据核验成功的信息到查询方,如果没有一次解密成功,则协调终端发送查询数据核验失败的信息到查询方。
[0047] 预处理阶段,每个数据终端都作为一次查询方与其他每个作为数据方的数据终端分别配合进行一次预处理;在线处理阶段,查询方发起查询请求,计算出与查询数据对应的所有参数SM并连同数值k发送给协调终端,协调终端将数值k发送给其他所有作为数据方的数据终端,每个数据方计算出对应的所有加密串DEM发送到协调终端,协调终端利用每个参数SM作为密钥对所有加密串DEM进行解密,有一次解密成功则发送查询数据核验成功的信息到查询方,全部解密失败则协调终端发送查询数据核验失败的信息到查询方。
[0048] 预处理阶段已经完成了大部分的计算和通信,过一致性hash数据分桶对数据进行预处理,保证实时接口请求小于50ms,大大提高了查询效率。整个查询过程中,数据方不知道查询数据的内容,查询方不知道验证成功的信息来自哪个数据方,协调终端既不知道查询数据的内容,也不知道数据方的数据内容,同时保护了查询方、数据方双方的数据安全。预处理阶段、在线处理阶段都是密文交互的,避免数据泄漏,通过椭圆曲线密钥生成和bit位选择来控制密钥,通过对称加密和位异或操作来保证数据安全传输。
[0049] 一致性hash用来保证数据是均匀分布在每个存储桶里面,不会出现比如一个存储桶里面有3个数据,另外一个存储桶里面有100个数据的情况,并且一致性hash还是保序的算法,同一条数据调用多次会被分配到相同的桶里。
[0050] 作为优选,所述数值k的计算公式如下:k= consistent_hash(d,E)。
[0051] 作为优选,所述步骤N2中,计算出与某个数据方的编号为k的存储桶对应的第p个加密串Qkp对应的参数SMkp的方法如下:
[0052] SMkp= Hash(Qkp⊕(Cp&d)),Cp表示二进制数C的第p位的值。其他每个数据方的编号为k的存储桶对应的每个加密串Q都有一个对应的参数SM。
[0053] 作为优选,所述步骤N4中,对编号为k的存储桶内的第i个数据Dki进行加密得到加密串DEMki的计算方法如下:
[0054] DEMki = ENC(Dki,CMki),
[0055] 其中,ENC(Dki,CMki)表示使用编号为k的存储桶内的第i个数据Dki对应的参数CMki对数据Dki进行加密。
[0056] 作为优选,所述步骤N5中,协调终端使用参数SMkp作为密钥对某个数据方发送的加密串DEMki进行解密操作的步骤如下:
[0057] RESki = DEC(SMkp,DEMki),
[0058] DEC(SMkp,DEMki)表示使用参数SMkp对加密串DEMki做解密;
[0059] 根据解密结果RESki判断是否解密成功。
[0060] 作为优选,所述路由信息包括数据终端的IP或域名。
[0061] 作为优选,所述存储桶总数由多头联盟的所有数据终端预先约定好。
[0062] 本发明的有益效果是:(1)能够使得多头联盟中的成员在相互数据不出库的情况下完成了数据的查询,保护每个成员的数据隐私,避免数据泄露。(2)高性能实时查询,通过一致性hash数据分桶方式对数据进行预处理,保证实时接口请求小于50ms。(3)高安全实时查询,通过椭圆曲线密钥生成和bit位选择来控制密钥,通过对称加密和位异或操作来保证数据安全传输。

附图说明

[0063] 图1是多头联盟的结构示意图。
[0064] 图中:1、数据终端,2、协调终端。

具体实施方式

[0065] 下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
[0066] 实施例:本实施例的一种基于多头联盟的安全隐匿数据查询方法,如图1所示,多头联盟包括2个以上数据终端1,包括预处理阶段和在线处理阶段:
[0067] 预处理阶段:
[0068] M1:协调终端2预先加载所有数据终端1的路由信息,路由信息包括数据终端的IP或域名;
[0069] M2:每个数据终端作为查询方与其他每个数据终端分别配合进行一次预处理,其他每个数据终端作为数据方,查询方与某个数据方配合进行一次预处理的步骤如下:
[0070] M21:数据方使用随机数a、随机数b以及secp256r1椭圆曲线的基点g生成secp256r1椭圆曲线的两个点p0、p1(p0、p1是包含x,y坐标的点),公式如下:
[0071] p0 =g * a,p1 = g * b,数据方将p0、p1发送到协调终端,协调终端将p0、p1转发到查询方;
[0072] M22:查询方随机生成一个n位的二进制数C,根据p0、p1生成n个密钥KS和n个参数T,第i个密钥KSi的生成方法如下:
[0073] KSi= p0*RDi,RDi为第i个随机大数,1≤i≤n;
[0074] 第i个参数Ti的生成方法如下:
[0075] 如果二进制数C的第i位为1,则Ti= p1‑g*RDi,
[0076] 如果二进制数C的第i位为0,则Ti= g*RDi,
[0077] 查询方将生成的n个参数T都通过协调终端转发到数据方;
[0078] M23:数据方根据接收到的n个参数T计算出n个密钥对KP,第i个密钥对KPi包括KPi0、KPi1,生成方法如下:
[0079] KPi0= Ti*a,
[0080] KPi1=p1*a‑Ti*a,
[0081] 其中,KPi0为第i个密钥对KPi的第0个密钥,KPi1为第i个密钥对KPi的第1个密钥;
[0082] M24:数据方对自身数据库内的所有数据D使用一致性hash算法进行分桶操作,存储桶总数为E,由多头联盟的所有数据终端预先约定好,根据存储桶总数利用一致性hash算法计算出每个数据D应该存储的存储桶的编号,将每个数据D存储到对应编号的存储桶内(将数据库内的所有数据D分配到E个存储桶内),每个存储桶内存储的数据D小于或等于n个,对每个存储桶内的每个数据D进行处理,得到每个存储桶内的每个数据D对应的参数CM、参数U,编号为j的存储桶内的第i个数据Dji对应的参数CMji和参数Uji通过如下方法得到:
[0083] Fji= ENC(zero,KPi0),
[0084] CMji= Hash(Fji),
[0085] Uji= ENC(zero,KPi0)⊕ENC(zero,KPi1)⊕Dji,
[0086] 其中,ENC(zero, KPi0)表示使用第i个密钥对KPi的第0个密钥对空数据(128个0)做国密Sm4加密,Hash(Fi)表示对参数Fi进行哈希处理(哈希处理实现使用国密Sm3实现),⊕为按位异或运算符;
[0087] 数据方将每个存储桶的编号及其内每个数据D对应的参数U绑定后通过协调终端转发到查询方,将得到的每个存储桶内的每个数据D对应的参数CM存储到对应的存储桶内;
[0088] M25:查询方根据每个存储桶内的每个数据D对应的参数U计算出加密串Q,编号为j的存储桶内的第i个数据Dji对应的参数Uji对应的加密串Qji的计算方法如下:
[0089] 如果二进制数C的第i位为0,则Qji= ENC(zero, KSi),
[0090] 如果二进制数C的第i位为1,则Qji= ENC(zero, KSi)⊕Uji,
[0091] ENC(zero, KSi)表示使用第i个密钥KSi对空数据做国密Sm4加密,
[0092] 查询方将计算出的加密串Q存储;
[0093] 在线理阶段:
[0094] 接收到查询请求的数据终端作为查询方进行数据查询,其他每个数据终端作为数据方,数据查询的步骤如下:
[0095] N1:查询方读取要查询的数据d,根据数据d、存储桶的总数E利用一致性hash算法计算出数值k,数值k为利用一致性hash算法计算出的数据d应该存储的存储桶的编号,数值k的计算公式如下:k= consistent_hash(d,E);
[0096] N2:查询方查询存储的与其他每个数据方对应的加密串Q,找出其他每个数据方的编号为k的存储桶对应的所有加密串Q,计算出其他每个数据方的编号为k的存储桶对应的所有加密串Q对应的所有参数SM(每个数据方的编号为k的存储桶对应的每个加密串Q都有一个对应的参数SM),查询方将数值k以及计算出的与其他每个数据方对应的所有参数SM发送到协调终端;
[0097] 计算出与某个数据方的编号为k的存储桶对应的第p个加密串Qkp对应的参数SMkp的方法如下:
[0098] SMkp= Hash(Qkp⊕(Cp&d)),Cp表示二进制数C的第p位的值;
[0099] N3:协调终端将数值k发送给每个数据方;
[0100] N4:每个数据方查找出编号为k的存储桶内的每个数据D对应的参数CM,对编号为k的存储桶内的每个数据D进行加密得到对应的加密串DEM,对编号为k的存储桶内的第i个数据Dki进行加密得到加密串DEMki的计算方法如下:
[0101] DEMki = ENC(Dki,CMki),
[0102] 其中,ENC(Dki,CMki)表示使用编号为k的存储桶内的第i个数据Dki对应的参数CMki对数据Dki进行加密;
[0103] 每个数据方将得到的所有加密串DEM发送给协调终端;
[0104] N5:协调终端依次使用每一个参数SM作为密钥对每个数据方发送的所有加密串DEM进行解密操作,如果有一次解密成功,则协调终端发送查询数据核验成功的信息到查询方,如果没有一次解密成功,则协调终端发送查询数据核验失败的信息到查询方;
[0105] 协调终端使用参数SMkp作为密钥对某个数据方发送的加密串DEMki进行解密操作的步骤如下:
[0106] RESki = DEC(SMkp,DEMki),
[0107] DEC(SMkp,DEMki)表示使用参数SMkp对加密串DEMki做国密Sm4解密;
[0108] 根据解密结果RESki判断是否解密成功,如果解密结果RESki是一堆乱码的串,则判断解密失败,否则判断解密成功。
[0109] 在本方案中,协调终端负责数据终端的消息路由和转发,不存储数据。数据终端维护自己的名单数据,数据对其他数据终端不可见;各个数据终端的数据查询系统是一致的,并在协调终端注册自己用于被发现的路由信息;每个数据终端在自身查询数据时作为查询方,被其他数据终端查询数据时作为数据方。
[0110] 预处理阶段,每个数据终端都作为一次查询方与其他每个作为数据方的数据终端分别配合进行一次预处理;在线处理阶段,查询方发起查询请求,计算出与查询数据对应的所有参数SM并连同数值k发送给协调终端,协调终端将数值k发送给其他所有作为数据方的数据终端,每个数据方计算出对应的所有加密串DEM发送到协调终端,协调终端利用每个参数SM作为密钥对所有加密串DEM进行解密,有一次解密成功则发送查询数据核验成功的信息到查询方,全部解密失败则协调终端发送查询数据核验失败的信息到查询方。
[0111] 预处理阶段已经完成了大部分的计算和通信,过一致性hash数据分桶对数据进行预处理,保证实时接口请求小于50ms,大大提高了查询效率。整个查询过程中,数据方不知道查询数据的内容,查询方不知道验证成功的信息来自哪个数据方,协调终端既不知道查询数据的内容,也不知道数据方的数据内容,同时保护了查询方、数据方双方的数据安全。预处理阶段、在线处理阶段都是密文交互的,避免数据泄漏,通过椭圆曲线密钥生成和bit位选择来控制密钥,通过对称加密和位异或操作来保证数据安全传输。
[0112] 一致性hash用来保证数据是均匀分布在每个存储桶里面,不会出现比如一个存储桶里面有3个数据,另外一个存储桶里面有100个数据的情况,并且一致性hash还是保序的算法,同一条数据调用多次会被分配到相同的桶里。
[0113] 当数据终端为金融机构,数据D为贷款信息时,数据D中包含贷款时间戳(Timestamp格式),当解密成功时,解密结果RESki是贷款时间戳,协调终端发送查询数据核验成功的信息到查询方时还把该贷款时间戳发送给查询方,使得查询方能够知道查询目标的贷款时间,便于金融机构风控。
[0114] 举例说明:
[0115] 预处理阶段:
[0116] 随机数a为:
[0117] 110024555428437346447423970080824423491881674609162802727894000541543059435235;
[0118] 随机数b为:
[0119] 85303938677960333486350915497181941774546740599326905160845294003749532504866;
[0120] 基点g为:
[0121] 046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5;
[0122] p0为:
[0123] 026998965245f5d4756cea2f3f57a15b2ab8e2442664a0b6ca3c6b086a26189638;
[0124] p1为:
[0125] 03b9ed317f6166aae56df106741b39f552ecb043e8512a4e8c3fa9ad78cfa03db9;
[0126] 二进制数C(128位)为:
[0127] 00110111111011000110000010000001110011010011011010011010110001111010100101001000110001110101100000110111110010111011010010010110;
[0128] 密钥KS(16进制格式)有128个,第114个密钥KS为:
[0129] da823af6e19946b80032de9837666d4c1927ae4b50f768027ac9976d90dbf727;
[0130] 数据方A的第114个密钥对KP为:
[0131] da823af6e19946b80032de9837666d4c1927ae4b50f768027ac9976d90dbf727,[0132] 79b2d93063b39c27b100995f6b25446f0593e64ba524ec0b9bc9a05f281fe5d8;
[0133] 数据方A的编号为1的存储桶的第114个数据D为:
[0134] bb9b5aaac118250025ecff509076b113;
[0135] 对应的CM、U、Q分别为:
[0136] CM= f421ae1b4270a0089391eace89c6071b,
[0137] U=287bd49bca237d287645624eabdda760,
[0138] Q= bd82463fd3336493ec831777e1b141f6,
[0139] 在线处理阶段:
[0140] 查询数据bb9b5aaac118250025ecff509076b113,查询方计算出存储桶的编号为1,对应的SM为f421ae1b4270a0089391eace89c6071b,该SM与数据方A的编号为1的存储桶的第114个数据D对应的CM一样,所以数据方A的编号为1的存储桶的第114个数据D经过对应CM加密后能被该SM解密成功,协调终端发送查询数据核验成功的信息到查询方。