1.本发明涉及计算机技术领域,尤其涉及一种隐私计算方法和隐私计算系统。
背景技术:2.隐私计算是一种在计算参与方不共享各自数据且没有可信第三方的情况下安全地计算约定函数的技术。通过安全的算法和协议,计算参与方将明文形式的数据加密后或转化后再提供给其他方,其他计算参与方都无法接触到其他方的明文形式的数据,从而保证各方数据的安全。
3.为保证各方数据在计算过程中不被泄露,可以借助多方安全计算技术在密文端进行计算。然而,完全基于密文的计算会导致多方安全计算效率下降。
技术实现要素:4.本发明实施例提供一种隐私计算方法和隐私计算系统,可以并发执行密文指令和密文指令,可以进一步提高计算效率。
5.为了解决上述问题,本发明实施例公开了一种隐私计算方法,应用于隐私计算系统,所述系统包括调度器、编程接口、密文引擎、各数据方的明文引擎、所述密文引擎对应的密文缓存,以及每个明文引擎对应的明文缓存,所述方法包括:所述调度器接收计算任务,并将所述计算任务分发至所述编程接口;所述编程接口对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,并将所述明文指令发送至相应数据方的明文引擎,以及将所述密文指令发送至密文引擎;所述明文引擎基于持有的明文数据和/或从所述明文引擎对应的明文缓存中读取的明文数据,执行接收到的明文指令;所述密文引擎基于从所述密文缓存中读取的密文数据,执行接收到的密文指令。
6.可选地,所述方法还包括:所述编程接口向目标数据方的明文引擎发送第一指令,所述第一指令中携带有待编码数据的标识信息;所述目标数据方的明文引擎响应于所述第一指令,将所述待编码数据以及所述第一指令发送至所述目标数据方的明文引擎对应的明文缓存;所述目标数据方的明文引擎对应的明文缓存响应于所述第一指令,将所述待编码数据转换为密文数据后发送至所述密文缓存。
7.可选地,所述第一指令中还携带有编码信息,所述将所述待编码数据转换为密文数据后发送至所述密文缓存,包括:按照所述编码信息对应的目标密码学协议,对所述待编码数据进行编码,得到符合所述目标密码学协议的密文数据并发送至所述密文缓存。
8.可选地,所述方法还包括:
所述编程接口向所述密文引擎发送第二指令,所述第二指令中携带有待解码数据在所述密文缓存中的地址信息;所述密文引擎响应于所述第二指令,将所述第二指令发送至所述密文缓存;所述密文缓存响应于所述第二指令,将所述地址信息中存储的所述待解码数据转换为明文数据后发送至所述第二指令指示的明文缓存。
9.可选地,所述编程接口对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,包括:所述编程接口逐条解析所述计算任务中的计算指令,识别每条计算指令中的数据隐私类型;对于每条计算指令,根据所述计算指令中的数据隐私类型,将所述计算指令解析为明文指令和/或密文指令。
10.可选地,所述编程接口对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,包括:所述编程接口根据所述计算指令中的操作类型以及所述密文引擎支持的密码学协议,确定目标密码学协议;将所述计算指令转换为符合所述目标密码学协议的密文指令。
11.可选地,所述调度器接收计算任务,并将所述计算任务分发至所述编程接口,包括:所述调度器接收计算任务,并确定所述计算任务的操作数据量;若确定所述操作数据量超过单次任务的预设数据量,则按照所述预设数据量将所述计算任务切分为子任务;将包含所述子任务的计算任务分发至所述编程接口。
12.可选地,所述方法还包括:所述明文引擎将执行所述明文指令得到的明文计算结果发送至所述明文引擎对应的明文缓存;所述密文引擎将执行所述密文指令得到的密文计算结果发送至所述密文缓存。
13.另一方面,本发明实施例公开了一种隐私计算系统,所述系统包括调度器、编程接口、密文引擎、各数据方的明文引擎、所述密文引擎对应的密文缓存,以及每个明文引擎对应的明文缓存;其中,所述调度器,用于接收计算任务,并将所述计算任务分发至所述编程接口;所述编程接口,用于对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,并将所述明文指令发送至相应数据方的明文引擎,以及将所述密文指令发送至密文引擎;所述明文引擎,用于在接收到所述明文指令时,基于持有的明文数据和/或从所述明文引擎对应的明文缓存中读取的明文数据,执行所述明文指令;所述密文引擎,用于在接收到所述密文指令时,基于从所述密文缓存中读取的密文数据,执行所述密文指令。
14.可选地,所述编程接口,还用于向目标数据方的明文引擎发送第一指令,所述第一指令中携带有待编码数据的标识信息;
所述明文引擎,还用于在其属于所述目标数据方时,响应于所述第一指令,将所述待编码数据以及所述第一指令发送至其对应的明文缓存;所述目标数据方的明文引擎对应的明文缓存,用于响应于所述第一指令,将所述待编码数据转换为密文数据后发送至所述密文缓存。
15.可选地,所述第一指令中还携带有编码信息;所述目标数据方的明文引擎对应的明文缓存,具体用于按照所述编码信息对应的目标密码学协议,对所述待编码数据进行编码,得到符合所述目标密码学协议的密文数据并发送至所述密文缓存。
16.可选地,所述编程接口,还用于向所述密文引擎发送第二指令,所述第二指令中携带有待解码数据在所述密文缓存中的地址信息;所述密文引擎,还用于响应于所述第二指令,将所述第二指令发送至所述密文缓存;所述密文缓存,用于响应于所述第二指令,将所述地址信息中存储的所述待解码数据转换为明文数据后发送至所述第二指令指示的明文缓存。
17.可选地,所述编程接口,具体用于逐条解析所述计算任务中的计算指令,识别每条计算指令中的数据隐私类型;对于每条计算指令,根据所述计算指令中的数据隐私类型,将所述计算指令解析为明文指令和/或密文指令。
18.可选地,所述编程接口,具体用于根据所述计算指令中的操作类型以及所述密文引擎支持的密码学协议,确定目标密码学协议;将所述计算指令转换为符合所述目标密码学协议的密文指令。
19.可选地,所述调度器,具体用于接收计算任务,并确定所述计算任务的操作数据量;若确定所述操作数据量超过单次任务的预设数据量,则按照所述预设数据量将所述计算任务切分为子任务;将包含所述子任务的计算任务分发至所述编程接口。
20.可选地,所述明文引擎,还用于将执行所述明文指令得到的明文计算结果发送至所述明文引擎对应的明文缓存;所述密文引擎,还用于将执行所述密文指令得到的密文计算结果发送至所述密文缓存。
21.又一方面,本发明实施例公开了一种机器可读介质,其上存储有指令,当所述指令由装置的一个或多个处理器执行时,使得装置执行如前述一个或多个所述的隐私计算方法。
22.本发明实施例包括以下优点:本发明实施例提出了一种分层的隐私计算系统的架构,该系统包括调度器、编程接口、密文引擎、各数据方的明文引擎、所述密文引擎对应的密文缓存,以及每个明文引擎对应的明文缓存。基于该隐私计算系统可以实现隐私计算,进而实现计算任务,且该计算任务的描述与明密文无关。本发明实施例通过隐私计算系统的层层解耦,实现明文计算与密文计算的解耦,使得用户可以使用贴近其习惯的统一编程接口编写计算任务,实现了系统的易用性。此外,最上层的调度器无需感知计算任务是基于密文进行计算还是基于密文进行计算,可以实现系统的可扩展性。再者,编程接口可以将计算任务中的计算指令解析为明文指令和/或密文指令分别发送给明文引擎或者密文引擎独立运行,可以将计算任务分解为明密文混合计算任务,并发执行密文指令和密文指令,可以进一步提高计算效率。
附图说明
23.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
24.图1是本发明的一种隐私计算方法实施例的步骤流程图;图2是本发明的一种隐私计算系统200的结构示意图;图3是基于本发明实施例的隐私计算系统处理计算任务示例的流程示意图。
具体实施方式
25.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.方法实施例参照图1,示出了本发明的一种隐私计算方法实施例的步骤流程图,所述方法应用于隐私计算系统,所述系统包括调度器、编程接口、密文引擎、各数据方的明文引擎、所述密文引擎对应的密文缓存,以及每个明文引擎对应的明文缓存,所述方法具体可以包括如下步骤:步骤101、所述调度器接收计算任务,并将所述计算任务分发至所述编程接口;步骤102、所述编程接口对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,并将所述明文指令发送至相应数据方的明文引擎,以及将所述密文指令发送至密文引擎;步骤103、所述明文引擎基于持有的明文数据和/或从所述明文引擎对应的明文缓存中读取的明文数据,执行接收到的明文指令;步骤104、所述密文引擎基于从所述密文缓存中读取的密文数据,执行接收到的密文指令。
27.本发明提供的隐私计算方法可应用于隐私计算系统。所述隐私计算系统可以包括调度器、编程接口、密文引擎、以及各数据方的明文引擎。可选地,所述隐私计算系统可以包括一个密文引擎和至少一个数据方的明文引擎。在所述隐私计算系统中,所述密文引擎可以对应有密文缓存;每个数据方的明文引擎对应有各自的明文缓存。所述数据方指数据拥有方,可用于为隐私计算提供计算数据。需要说明的是,本发明实施例对数据方的数量不做限制。
28.进一步地,所述隐私计算系统可以是一种多方安全计算系统,如mpc(secure multi
‑
party computation,多方安全计算)系统。在mpc系统中,多个计算参与方可以在不泄漏自身数据的前提下,使用多方安全计算技术进行协同计算得到计算结果,参与计算的数据、中间结果、以及最终结果可以为密文。当然,所述隐私计算系统还可以基于密码学协议,所述密码学协议包括但不限于秘密分享、半同态、不经意传输等。
29.所述隐私计算系统可用于执行计算任务,所述计算任务可以是任意类型的计算,
包括但不限于数据清洗、模型训练、存储、数据库查询、联邦学习、逻辑回归、xgboost、联合统计、隐匿查询、隐私求交等等。
30.参照图2,示出了本发明的一种隐私计算系统200的结构示意图。如图2所示。所述隐私计算系统为四层结构,从上到下依次包括调度器、编程接口、计算引擎、以及缓存层,各层依次调用。
31.调度器201,用于接收来自用户层的计算任务,并对接收的计算任务进行解析,如将接收到的计算任务切分为若干子任务。调度器可以将接收到的计算任务切分为子任务分发至编程接口层,或者,在计算任务无需切分子任务时,调度器可以将计算任务直接转发至编程接口层。
32.调度器接收到的计算任务可以是采用统一封装的通用数据类型描述的,调度器无需感知参与计算的数据是明文数据还是密文数据,也无需感知计算任务是基于明文计算还是基于密文计算,只需对接收到的计算任务进行分发即可。由此,可以实现计算任务的可扩展性。
33.编程接口202,用于接收调度器分发的计算任务,该计算任务可以包括切分的若干个子任务,或者,该计算任务可以是调度器直接转发的计算任务等。所述计算任务的描述符合编程接口定义的规范。编程接口对接收到的计算任务进行解析,将计算任务中的计算指令解析为明文指令或者密文指令,并将所述明文指令发送至相应数据方的明文引擎,以及将所述密文指令发送至密文引擎。
34.在本发明实施例中,统一编程接口描述的计算指令可以解析为明文指令或者密文指令,由下一层明文引擎或者密文引擎分别执行。编程接口可以作为明文任务和密文任务的通用接口,可以实现计算任务的通用性。
35.计算引擎包括密文引擎203和明文引擎204,明文引擎用于接收编程接口发送的明文指令,基于自身持有的明文数据和/或从所述明文引擎对应的明文缓存中读取所述明文指令所需的明文数据,执行所述明文指令。密文引擎用于接收编程接口发送的密文指令,并从所述密文缓存中读取所述密文指令所需的密文数据,执行所述密文指令。
36.需要说明的是,所述明文引擎和/或密文引擎可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(content delivery network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。本发明实施例对所述明文引擎和密文引擎的具体类型不做限制。
37.缓存层包括密文缓存205和明文缓存206。明文引擎负责处理明文计算,且明文引擎仅与明文缓存交换输入与输出。密文引擎负责处理密文计算,且密文引擎仅与密文缓存交换输入与输出。进一步地,每个明文引擎对应有各自的明文缓存,每个明文引擎仅与各自的明文缓存进行交互,以保证各数据方的数据隐私安全。此外,缓存层还可用于实现数据的编解码,如实现明文数据与密文数据之间的转换。缓存层可以将明文数据与密文数据之间的转换对上层屏蔽,上层程序只需调用明文数据或密文数据的读写接口即可,无需关心明文数据和密文数据之间的转换逻辑。
38.图2所示的隐私计算系统架构通过层层解耦,保证了每一层只需关注特定的功能。调度器可以将计算任务切分为多个符合下一层编程接口描述的子任务,而下一层编程接口
可以将计算任务中的计算指令解析为明文指令和密文指令,分别发送给明文引擎或者密文引擎独立运行。统一编程接口描述的计算指令可以解析为明文指令或者密文指令,由于下一层计算引擎已将明文计算与密文计算解耦,同时通过缓存层实现将数据计算与数据通讯解耦,由此可以实现使用统一编程接口描述明密文混合计算,上层无需关心明文数据和密文数据之间的转换以及节点之间的通讯。
39.本发明实施例通过隐私计算系统的层层解耦,实现明文计算与密文计算的解耦,使得用户可以使用贴近其习惯的统一编程接口编写计算任务,实现了系统的易用性。此外,上层的调度器无需感知计算任务是基于明文进行计算还是基于密文进行计算,可以实现系统的可扩展性。再者,编程接口可以将计算任务中的计算指令解析为明文指令和密文指令分别发送给明文引擎或者密文引擎独立运行,可以将计算任务分解为明密文混合计算任务,并发执行明文指令和密文指令,可以进一步提高计算效率。
40.下面结合示例说明本发明的隐私计算方法的具体过程。
41.一个示例中,数据方a持有数据集合data_a,数据方b持有数据集合data_b,计算任务是统计两方数据中,最大的10个数之和。
42.该计算任务的一种算法描述如下:import privpydata_a = privpy.load(“data_a”)top10_a = data_a.partition(
‑
10)[
‑
10:]data_b = privpy.load(“data_b”)top10_b = data_b.partition(
‑
10)[
‑
10:]data = top10_a.append(top10_b)top10 = data.partition(
‑
10)[
‑
10:]result = top10.sum()其中,第一行是引入通用函数库。在本发明实施例中,应用层无需关心计算数据是明文数据还是密文数据,也无需关心计算指令是基于明文数据执行还是基于密文数据执行。使用通用函数库中的通用函数描述计算任务即可,编程接口可以自动解析某条计算指令是明文指令还是密文指令。
[0043]
第二行是读取数据集合data_a;第三行是取出data_a中最大的10个数,并赋值给top10_a;第四行是读取数据集合data_b;第五行是取出data_b中最大的10个数,并赋值给top10_b;第六行是将top10_a和top10_b组合得到data;第七行是取出data中最大的10个数,并赋值给top10;第八行是使用求和函数求出top10的和。
[0044]
编程接口接收到上述计算任务之后,对该计算任务中的计算指令进行解析。由于data_a是数据方a的私有数据,因此第二行读取数据集合data_a的任务可以在数据方a的明文引擎执行。编程接口可以将计算指令privpy.load(“data_a”)解析为明文指令。例如,假设明文引擎采用的是python的numpy函数库,则编程接口可以将该计算指令privpy.load(“data_a”)解析为如下明文指令:numpy.load(“data_a”)。编程接口将该明文指令numpy.load(“data_a”)发送给数据方a的明文引擎,由数据方a的明文引擎执行该明文指令。
[0045]
第三行取出data_a中最大的10个数的任务也可以在数据方a的明文引擎执行。因
此,编程接口可以将计算指令data_a.partition(
‑
10)[
‑
10:]解析为明文指令,发送给数据方a的明文引擎,由数据方a的明文引擎执行该明文指令。
[0046]
同理,编程接口可以将第四行的计算指令privpy.load(“data_b”)解析为明文指令,发送给数据方b的明文引擎,由数据方b的明文引擎执行该明文指令。以及,编程接口将第五行的计算指令data_b.partition(
‑
10)[
‑
10:]解析为明文指令,发送给数据方b的明文引擎,由数据方b的明文引擎执行该明文指令。
[0047]
第六行的计算指令top10_a.append(top10_b)需要将两方数据组合,为避免数据方的数据泄露,该行的计算指令需要解析为密文指令,在密文引擎执行。假设密文引擎采用的是pnumpy密文计算函数库,则编程接口可以将该计算指令top10_a.append(top10_b)解析为如下密文指令:pnumpy.append(top10_a,top10_b)。编程接口将该密文指令pnumpy.append(top10_a,top10_b)发送给密文引擎,由密文引擎执行该密文指令。
[0048]
同理,第七行的计算指令data.partition(
‑
10)[
‑
10:]和第八行的计算指令top10.sum()也需要解析为密文指令,在密文引擎执行。
[0049]
进一步地,所述编程接口可以逐行解析计算指令并进行指令分发,或者,编程接口还可以在对整个计算任务解析完成之后,提取各数据方的明文引擎待执行的明文指令,以及提取所述密文引擎待执行的密文指令,一次性分发至相应的明文引擎以及密文引擎。
[0050]
例如,编程接口可以将第二行和第三行解析得到的明文指令,提取出来一次性发送给数据方a的明文引擎a。将第四行和第五行解析得到的明文指令,提取出来一次性发送给数据方b的明文引擎b。将第六行、第七行、以及第八行解析得到的密文指令,提取出来一次性发送给密文引擎。明文引擎a、明文引擎b、以及密文引擎可以并发执行各自接收到的指令。由此,可以提高计算任务的执行效率。
[0051]
由于密文计算远远比明文计算慢,而且密文计算支持的操作有限,因此编程接口可以在不影响安全性的前提下,将尽可能多的计算指令解析为明文指令,并且一次性提取出来分发给各数据方的明文引擎执行,以对性能进行进一步的优化。比如,求两个数据方的明文数据集的加和的计算任务,可以先在两个数据方的明文引擎分别执行各自明文数据集的加和操作,再把两个数据方各自的加和结果转换为密文数据在密文引擎执行相加操作即可。这样,相对于将两个数据方的明文数据集分别转换为密文数据集,直接在密文引擎上执行两个密文数据集的加和操作,计算效率有很大的提高。
[0052]
在本发明的一种可选实施例中,所述方法还可以包括:所述编程接口向目标数据方的明文引擎发送第一指令,所述第一指令中携带有待编码数据的标识信息;所述目标数据方的明文引擎响应于所述第一指令,将所述待编码数据以及所述第一指令发送至所述目标数据方的明文引擎对应的明文缓存;所述目标数据方的明文引擎对应的明文缓存响应于所述第一指令,将所述待编码数据转换为密文数据后发送至所述密文缓存。
[0053]
在具体实施中,存在需要将明文数据转换为密文数据的情况。例如,编程接口在将计算任务中的某条计算指令解析为密文指令时,如果参与该密文指令的计算数据为明文数据,则需要将该明文数据转换为密文数据。
[0054]
编程接口在将计算任务中的计算指令解析为密文指令之后,可以进一步判断是否
需要进行明密文数据转换。若编程接口确定需要将明文数据转换为密文数据,则向目标数据方的明文引擎发送第一指令,所述第一指令中携带有待编码数据的标识信息。所述待编码数据为待转换为密文数据的明文数据,进一步地,所述待编码数据可以为参与某个密文指令的计算数据。所述待编码数据可以是目标数据方持有的数据,或者还可以是计算任务执行过程中产生的中间结果。所述目标数据方为该待编码数据的持有方。
[0055]
在本发明实施例中,将明文数据转换为密文数据在缓存层进行。
[0056]
以上述示例中第六行的计算指令top10_a.append(top10_b)为例,该计算指令被编程接口解析为密文指令pnumpy.append(top10_a,top10_b),发送至密文引擎。由于top10_a和top10_b分别为数据方a和数据方b的明文数据,因此,编程接口向目标数据方(数据方a)的明文引擎a发送第一指令,该第一指令中携带有待编码数据top10_a的标识信息。示例性地,编程接口向数据方a的明文引擎a发送的第一指令为top10_a.send_cipher()。同样地,编程接口向目标数据方(数据方b)的明文引擎b发送第一指令,该第一指令中携带有待编码数据top10_b的标识信息。示例性地,编程接口向数据方b的明文引擎b发送的第一指令为top10_b.send_cipher()。
[0057]
明文引擎a响应于接收到的第一指令top10_a.send_cipher(),将待编码数据top10_a以及该第一指令top10_a.send_cipher()发送至明文引擎a对应的明文缓存a。明文缓存a响应于接收到的第一指令top10_a.send_cipher(),将待编码数据top10_a转换为密文数据后发送至所述密文缓存。
[0058]
同理,明文引擎b响应于接收到的第一指令top10_b.send_cipher(),将待编码数据top10_b以及该第一指令top10_b.send_cipher()发送至明文引擎b对应的明文缓存b。明文缓存b响应于接收到的第一指令top10_b.send_cipher(),将待编码数据top10_b转换为密文数据后发送至所述密文缓存。
[0059]
这样,在密文引擎执行密文指令pnumpy.append(top10_a,top10_b)时,可以从密文缓存中读取密文的top10_a和密文的top10_b,基于密文执行组合操作。
[0060]
参照图3,示出了基于本发明实施例的隐私计算系统处理上述示例的计算任务的流程示意图。如图3所示的流程示意图,编程接口实现了将计算指令解析为明文指令或者密文指令,并对明文指令和密文指令进行相应的分发,明文引擎只需要执行接收到的明文指令,密文引擎只需要执行接收到的密文指令,就可以完成整个计算任务。本发明实施例的隐私计算系统实现了明文计算与密文计算的解耦。此外,在隐私计算过程中,不管是明文引擎还是密文引擎,都可能需要从缓存层获得计算数据或者将计算数据发送给其他明文引擎或密文引擎的情况。比如,当明文引擎a收到第一指令top10_a.send_cipher()时,明文引擎a将待编码数据发送给明文缓存a,并通知缓存层进行加密后发送给密文引擎。由此可以实现计算与数据交换的解耦。缓存层负责明文数据和密文数据的转换工作,在明文引擎a将第一指令top10_a.send_cipher()发给明文缓存a后,明文缓存a将明文数据top10_a转换为密文数据,发送给密文缓存,这样当密文引擎需要使用密文数据top10_a进行计算时,就可以从密文缓存获得该密文数据top10_a了。密文数据top10_b的获取过程相似,此处不再进行赘述。
[0061]
在本发明的一种可选实施例中,所述第一指令中还携带有编码信息,所述将所述待编码数据转换为密文数据后发送至所述密文缓存,可以包括:
按照所述编码信息对应的目标密码学协议,对所述待编码数据进行编码,得到符合所述目标密码学协议的密文数据并发送至所述密文缓存。
[0062]
在本发明实施例中,所述密文引擎可以支持不同的密码学协议,所述密码学协议包括但不限于秘密分享、半同态、不经意传输等。
[0063]
由于明文数据与密文数据的结构并不相同,因此二者之间需要基于指定的转换协议进行转换。本发明实施例通过缓存层实现数据的编解码,明文数据与密文数据之间的转换以及转换后数据的交互在缓存层实现,上层无需感知。
[0064]
例如,第一指令中可以携带有待编码数据的标识信息和编码信息,明文缓存在接收到该第一指令后,可以按照所述编码信息对应的目标密码学协议,对所述待编码数据进行编码,得到符合所述目标密码学协议的密文数据并发送至所述密文缓存。
[0065]
进一步地,在所述第一指令中未携带编码信息的情况下,可以表示采用预先指定的默认密码学协议作为目标密码学协议。
[0066]
采用本发明的隐私计算系统的架构,可以实现使用一套程序接口即可描述明密文混合计算的计算任务,同时又无需关心明文数据和密文数据的转换以及节点间的通讯,使得系统同时具有易用性和可扩展性。
[0067]
在本发明的一种可选实施例中,所述方法还可以包括:所述编程接口向所述密文引擎发送第二指令,所述第二指令中携带有待解码数据在所述密文缓存中的地址信息;所述密文引擎响应于所述第二指令,将所述第二指令发送至所述密文缓存;所述密文缓存响应于所述第二指令,将所述地址信息中存储的所述待解码数据转换为明文数据后发送至所述第二指令指示的明文缓存。
[0068]
在具体实施中,还存在需要将密文数据转换为明文数据的场景。例如,如果某个计算任务可以拆分为仅包含相同数据方的私有数据之间的子任务,则可以在明文引擎执行该计算任务,以提高计算效率。如果该私有数据为密文数据,则需要将该密文数据先转换为明文数据。又如,在需要将计算结果发送至结果接收方时,如果该计算结果为密文数据,也需要执行将计算结果由密文数据转换为明文数据的操作。所述结果接收方可以为指定的某个数据方,或者,可以为任一数据方。
[0069]
在本发明实施例中,将密文数据转换为明文数据在缓存层进行。
[0070]
具体地,编程接口向密文引擎发送第二指令,所述第二指令中携带有所述待解码数据在所述密文缓存中的地址信息。所述密文引擎响应于所述第二指令,将所述第二指令发送至所述密文缓存;所述密文缓存响应于所述第二指令,将所述地址信息中存储的所述待解码数据进行解码,得到明文数据,并将该明文数据发送至所述第二指令指示的明文缓存。所述第二指令指示的明文缓存为待使用该明文数据的明文引擎对应的明文缓存。这样,在该明文引擎执行明文指令时,可以从其对应的明文缓存中读取相应的明文数据,以执行该明文指令。或者,结果接收方可以从其对应的明文缓存中读取相应的计算结果。其中,所述待解码数据可以是某数据方持有的数据,或者还可以是计算任务执行过程中产生的中间结果。
[0071]
在本发明的一种可选实施例中,所述方法还可以包括:所述明文引擎将执行所述明文指令得到的明文计算结果发送至所述明文引擎对
应的明文缓存;所述密文引擎将执行所述密文指令得到的密文计算结果发送至所述密文缓存。
[0072]
在本发明实施例中,明文引擎执行所述明文指令得到的明文计算结果可以是所述计算任务执行过程中产生的中间结果,也可以是所述计算任务的最终结果。明文引擎在执行所述明文指令之后,可以将计算得到的明文计算结果发送至所述明文引擎对应的明文缓存,以等待编程接口的下一步指令,可能接下来会使用该明文计算结果继续参与计算,或者,等待结果接收方读取该明文计算结果。
[0073]
同样地,密文引擎执行所述密文指令得到的密文计算结果可以是所述计算任务执行过程中产生的中间结果,也可以是所述计算任务的最终结果。密文引擎在执行所述密文指令之后,可以将计算得到的密文计算结果发送至所述密文缓存,以等待编程接口的下一步指令,可能接下来会使用该密文计算结果继续参与计算,或者,将该密文计算结果解密后发送至结果接收方对应的明文缓存。
[0074]
在本发明的一种可选实施例中,所述编程接口对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,可以包括:所述编程接口逐条解析所述计算任务中的计算指令,识别每条计算指令中的数据隐私类型;对于每条计算指令,根据所述计算指令中的数据隐私类型,将所述计算指令解析为明文指令和/或密文指令。
[0075]
编程接口可以根据计算指令中的数据隐私类型确定将该计算指令解析为明文指令还是密文指令。所述数据隐私类型包括但不限于公开数据、私有数据、以及融合数据中的一种。
[0076]
公开数据,指可以向所有数据方公开的数据。私有数据,指某一数据方拥有的私有数据,对于其他数据方是不可见的。融合数据是指由不同数据方的数据计算后融合得到的数据,不属于任何数据方。
[0077]
若某个计算指令中的所有计算数据的数据隐私类型均为公开数据,则该计算指令可以解析为明文指令,且该明文指令可以在任意一个或多个数据方的明文引擎执行。
[0078]
若某个计算指令中的所有计算数据的数据隐私类型均为某个数据方的私有数据,则该计算指令可以解析为明文指令,且该明文指令可以在该数据方的明文引擎执行。
[0079]
若某个计算指令中包含数据隐私类型为融合数据的计算数据,则该计算指令可以解析为密文指令,该密文指令在密文引擎执行。
[0080]
需要说明的是,对于计算任务中的某条计算指令,编程接口可以将该计算指令解析为明文指令,或者,将该计算指令解析为密文指令,或者,还可以将该计算指令解析为包含明文指令和密文指令的混合指令。
[0081]
可以理解,上述数据隐私类型仅作为示例,本发明实施例对数据隐私类型不做限制,对根据数据隐私类型确定明文指令和/或密文指令的方式也不做限制。
[0082]
在本发明的一种可选实施例中,所述编程接口对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,可以包括:所述编程接口根据所述计算指令中的操作类型以及所述密文引擎支持的密码学协议,确定目标密码学协议;
将所述计算指令转换为符合所述目标密码学协议的密文指令。
[0083]
在本发明实施例中,所述密文引擎可以支持不同的密码学协议,不同密码学协议可以对应不同的指令集。编程接口可以根据计算任务中的计算指令选择目标密码学协议,并将计算指令转换成符合目标密码学协议的密文指令进行分发。所述密码学协议包括但不限于秘密分享、同态加密等。
[0084]
进一步地,编程接口可以根据上层调用接口的操作类型和下层密文引擎支持的操作确定目标密码学协议。仍以上述示例为例,编码接口对计算任务中的计算指令进行解析,确定计算指令data.partition(
‑
10)[
‑
10:]应解析为密文指令。该计算指令中的操作类型为partition。编程接口根据上层调用接口的操作类型partition以及下层密文引擎支持的密码学协议(如秘密分享协议),且秘密分享协议可以支持partition操作,因此,编程接口将该计算指令转换成符合秘密分享协议的密文指令。
[0085]
在本发明的一种可选实施例中,所述调度器接收计算任务,并将所述计算任务分发至所述编程接口,可以包括:所述调度器接收计算任务,并确定所述计算任务的操作数据量;若确定所述操作数据量超过单次任务的预设数据量,则按照所述预设数据量将所述计算任务切分为子任务;将包含所述子任务的计算任务分发至所述编程接口。
[0086]
在本发明实施例中,调度器无需感知参与计算的数据是明文数据还是密文数据,也无需感知计算任务是基于明文进行计算还是基于密文进行计算,只需根据计算任务的操作数据量决定是否需要将计算任务进行切分,并对接收到的计算任务进行分发即可。
[0087]
调度器在接收到计算任务之后,确定所述计算任务的操作数据量,如果确定所述操作数据量超过单次任务的预设数据量,则按照所述预设数据量将所述计算任务切分为若干个子任务。
[0088]
以上述示例为例,计算任务中包括操作数data_a和data_b。对于读取data_a的任务,如果调度器识别出操作数data_a的数据量超过单次任务的预设数据量,则调度器可以将读取data_a的任务切分为若干个子任务。需要说明的是,调度器在将计算任务切分为子任务时,切分得到的子任务应符合编程接口定义的规范。一个示例中,调度器将实现读取data_a的任务privpy.load(“data_a”)切分为如下子任务:privpy.load_part(“data_a_part1”)、privpy.load_part(“data_a_part2)、
…
、privpy.load_part(“data_a_partn);其中,data_a_part1、data_a_part2、data_a_partn均不超过预设数据量。在该示例中,调度器将一次读取数据的任务切分为n个读取数据的子任务,每个子任务的描述均符合编程接口定义的规范,且每个子任务的操作数据量不超过单次任务的预设数据量。
[0089]
调度器将包含所述子任务的计算任务分发至所述编程接口。需要说明的是,在将计算任务切分为子任务之后,该计算任务中还可以包含对各子任务进行合并的指令。如,在上述示例中,还可以包括指令privpy.join_part(),用于将读取的data_a_part1、data_a_part2、
…
、data_a_partn组合为data_a。由此,明文引擎a依次读取data_a_part1、data_a_part2、
…
、data_a_partn,最终组合为data_a。同样地,明文引擎b读取data_b的任务也可以切分为若干个子任务。
[0090]
此外,对于取出data_a中最大的10个数的任务data_a.partition(
‑
10)[
‑
10:]也
可以切分成若干个子任务。
[0091]
在具体实施中,调度器可以根据计算任务的操作数据量以及单次任务的预设数据量确定是否需要对计算任务进行切分。在计算任务开始执行之前,调度器完成计算任务的切分,可以实现计算任务对大数据的可拓展性和并发性,可以提高计算任务的执行效率。
[0092]
综上,本发明实施例提出了一种分层的隐私计算系统的架构,该系统包括调度器、编程接口、密文引擎、各数据方的明文引擎、所述密文引擎对应的密文缓存,以及每个明文引擎对应的明文缓存。基于该隐私计算系统可以实现隐私计算,进而实现计算任务,且该计算任务的描述与明密文无关。本发明实施例通过隐私计算系统的层层解耦,实现明文计算与密文计算的解耦,使得用户可以使用贴近其习惯的统一编程接口编写计算任务,实现了系统的易用性。此外,上层的调度器无需感知计算任务是基于明文进行计算还是基于密文进行计算,可以实现系统的可扩展性。再者,编程接口可以将计算任务中的计算指令解析为明文指令和/或密文指令分别发送给明文引擎或者密文引擎独立运行,可以将计算任务分解为明密文混合计算任务,并发执行密文指令和密文指令,可以进一步提高计算效率。
[0093]
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0094]
装置实施例参照图2,示出了本发明的一种隐私计算系统200的结构示意图,所述系统包括调度器201、编程接口202、密文引擎203、各数据方的明文引擎204、所述密文引擎对应的密文缓存205,以及每个明文引擎对应的明文缓存206;其中,所述调度器,用于接收计算任务,并将所述计算任务分发至所述编程接口;所述编程接口,用于对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,并将所述明文指令发送至相应数据方的明文引擎,以及将所述密文指令发送至密文引擎;所述明文引擎,用于在接收到所述明文指令时,基于持有的明文数据和/或从所述明文引擎对应的明文缓存中读取的明文数据,执行所述明文指令;所述密文引擎,用于在接收到所述密文指令时,基于从所述密文缓存中读取的密文数据,执行所述密文指令。
[0095]
所述隐私计算系统为四层结构,从上到下依次包括调度器、编程接口、计算引擎、以及缓存层,各层依次调用。
[0096]
需要说明的是,图2中仅示出了一个明文引擎以及该明文引擎对应的明文缓存。在具体实现中,本发明实施例对所述隐私计算系统中包括的明文引擎的个数不做限制,每个明文引擎对应有各自的明文缓存。
[0097]
可选地,所述编程接口,还用于向目标数据方的明文引擎发送第一指令,所述第一指令中携带有待编码数据的标识信息;所述明文引擎,还用于在其属于所述目标数据方时,响应于所述第一指令,将所述待编码数据以及所述第一指令发送至其对应的明文缓存;
所述目标数据方的明文引擎对应的明文缓存,用于响应于所述第一指令,将所述待编码数据转换为密文数据后发送至所述密文缓存。
[0098]
可选地,所述第一指令中还携带有编码信息;所述目标数据方的明文引擎对应的明文缓存,具体用于按照所述编码信息对应的目标密码学协议,对所述待编码数据进行编码,得到符合所述目标密码学协议的密文数据并发送至所述密文缓存。
[0099]
可选地,所述编程接口,还用于向所述密文引擎发送第二指令,所述第二指令中携带有待解码数据在所述密文缓存中的地址信息;所述密文引擎,还用于响应于所述第二指令,将所述第二指令发送至所述密文缓存;所述密文缓存,用于响应于所述第二指令,将所述地址信息中存储的所述待解码数据转换为明文数据后发送至所述第二指令指示的明文缓存。
[0100]
可选地,所述编程接口,具体用于逐条解析所述计算任务中的计算指令,识别每条计算指令中的数据隐私类型;对于每条计算指令,根据所述计算指令中的数据隐私类型,将所述计算指令解析为明文指令和/或密文指令。
[0101]
可选地,所述编程接口,具体用于根据所述计算指令中的操作类型以及所述密文引擎支持的密码学协议,确定目标密码学协议;将所述计算指令转换为符合所述目标密码学协议的密文指令。
[0102]
可选地,所述调度器,具体用于接收计算任务,并确定所述计算任务的操作数据量;若确定所述操作数据量超过单次任务的预设数据量,则按照所述预设数据量将所述计算任务切分为子任务;将包含所述子任务的计算任务分发至所述编程接口。
[0103]
可选地,所述明文引擎,还用于将执行所述明文指令得到的明文计算结果发送至所述明文引擎对应的明文缓存;所述密文引擎,还用于将执行所述密文指令得到的密文计算结果发送至所述密文缓存。
[0104]
本发明实施例提出了一种分层的隐私计算系统的架构,该系统包括调度器、编程接口、密文引擎、各数据方的明文引擎、所述密文引擎对应的密文缓存,以及每个明文引擎对应的明文缓存。基于该隐私计算系统可以实现隐私计算,进而实现计算任务,且该计算任务的描述与明密文无关。本发明实施例通过隐私计算系统的层层解耦,实现明文计算与密文计算的解耦,使得用户可以使用贴近其习惯的统一编程接口编写计算任务,实现了系统的易用性。此外,上层的调度器无需感知计算任务是基于明文进行计算还是基于密文进行计算,可以实现系统的可扩展性。再者,编程接口可以将计算任务中的计算指令解析为明文指令和/或密文指令分别发送给明文引擎或者密文引擎独立运行,可以将计算任务分解为明密文混合计算任务,并发执行密文指令和密文指令,可以进一步提高计算效率。
[0105]
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0106]
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0107]
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0108]
一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务器或者终端)的处理器执行时,使得装置能够执行图1所示的隐私计算方法。
[0109]
一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务器或者终端)的处理器执行时,使得装置能够执行一种隐私计算方法,所述方法应用于隐私计算系统,所述系统包括调度器、编程接口、密文引擎、各数据方的明文引擎、所述密文引擎对应的密文缓存,以及每个明文引擎对应的明文缓存,所述方法包括:所述调度器接收计算任务,并将所述计算任务分发至所述编程接口;所述编程接口对所述计算任务中的计算指令进行解析,将所述计算指令解析为明文指令和/或密文指令,并将所述明文指令发送至相应数据方的明文引擎,以及将所述密文指令发送至密文引擎;所述明文引擎基于持有的明文数据和/或从所述明文引擎对应的明文缓存中读取的明文数据,执行接收到的明文指令;所述密文引擎基于从所述密文缓存中读取的密文数据,执行接收到的密文指令。
[0110]
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
[0111]
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
[0112]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
[0113]
以上对本发明所提供的一种隐私计算方法和隐私计算系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。