背景
在过去几个世纪,石油被认为是最具价值的有形资产之一。而在数字时代, 数据这种新型商品正在崛起以取代石油的地位。数据有自己的独特性。石油总量是固定的, 但数据总量的增长却难以衡量。
每个人、每台智能终端都在不断地产生数据。但数据的真正价值不在于数据量的多少, 而是如何使数据充分发挥作用。世界上的科技巨头无法只靠在数据库中存储数据盈利,流动起来的数据才有价值。
然而,由于数据隐私保护难题的存在,数据的充分流动仍面临重重阻碍。人们不愿分享自己的个人信息给其他各方以供商业使用, 更不用说企业间核心数据的交换了。
那为什么传统的加密手段不足以保护数据隐私呢?
数据的流动涉及多源数据的“计算”, 多源数据“计算”才能使数据利用最大化, 进而实现数据价值。但是传统的加密只着重于数据“传输隐私”, 拿到加密数据后必须在某个地方解密才能进行“计算”。尽管可信执行环境 (TEE) 技术, 可以提供一个保护解密后数据的”黑盒子” 来计算数据,但实际上又带来了另一个风险: 如何保护“黑盒子”。
解决方案
在密码学的观点上, 要彻底解决上述问题,需要使用隐私保护计算领域中一系列算法和协议。其中,两个主要的解决方案是同态加密和安全多方计算(MPC),这也是这个系列文章的主题。
安全多方计算 (MPC) 由姚期智在1982年提出。它主要探讨的是,n个参与方必须各自输入信息去计算一个约定的函数。除了计算的正确性,他们还必须保障每个参与方输入数据的隐私。具体来说,现在有n个参与方,每个参与方i都知晓自己录入的xi, 他们来共同计算一个预先商定的函数 f (x1,…, xn) = y。如此一来,所有的参与方都能获得最终的y值,但无法获知其他参与方输入的具体数据。
如上图所示,这是一个基于MPC协议的端到端隐私保护计算框架。用户可以发布和部署与应用程序相关、涉及到多源数据输入的元智能合约。元智能合约由两个主要部分组成。一部分是应用程序本身, 另一部分则提供了辅助信息, 如MPC协议参数、数据源发现参数等。MPC协议是在链下运行的, 这样可以减少那些计算资源有限节点的负担, 提高了链上进行共识的总体性能。
链上与链下计算之间的“桥梁”被称作为计算通道。计算通道提供了一个激励机制,让拥有合格数据的各个数据源参与计算,并将计算结果安全地上传到链上。
安全多方计算协议是一种分布式协议,允许各参与方在不泄露自身隐私信息的前提下,通过既定逻辑共同计算出一个结果。基于此提出了一个端到端的MPC框架,以实现隐私保护计算。在本文中,我们将详细介绍其工作原理。
在介绍技术细节之前,我们应该先定义安全目标,即密码学中的安全模型。文中主要介绍两种安全挑战敌手模型:半诚实敌手模型和恶意敌手模型。
在半诚实敌手模型中,参与方严格按照协议执行,但对过程中的其他隐私数据仍有些好奇。这适用于一些企业间的业务场景,在这些场景中,企业必须严格遵循协议程序,并且让代码在各参与方都无法接触到的安全环境中运行。
恶意模型则更贴近现实,即参与者会竭尽所能获取其他参与方的隐私信息。安全多方计算协议意味着在两种模型中,所有参与方都无法获得输出结果以外任何的附加信息。注意,这里的“额外信息”并不是指输入的“任何信息”,而是指除去可以直接从输出结果直接推断出的之外的信息。
文中提出了许多具体的技术来构造针对半诚实敌手模型或恶意敌手模型的MPC协议,如加密电路,秘密共享,不经意传输,同态加密及其组合等。在本文中,我们将会着重介绍由姚期智教授发明的针对两方场景的加密电路,这是目前最有效的技术之一。
例如:Alice和Bob都分别拥有各自私有输入信息x和y,他们想通过共同协定的函数f来获得输出结果z= f(x, y),且除了输入结果外不会揭露任何其他额外内容。
首先应该使用电路编译器将函数f转换为由AND和XOR门组成的布尔电路(如图1所示),因为大多数用高级语言编写的程序都包含复杂的数据结构,这在实际的具体应用中其实是一个很复杂的工程任务。
图1
为了便于理解描述,我们假设x,y都是2比特字符串。如上图,x作为左边最开始两根线的输入,y作为最后两根线的输入。
Alice将电路作为输入,并写下每个门的所有真值表。然后它为每个门选择两个均匀分布的随机字符串,称为标签,分别用来代表0或1表示,如图2所示。注意,虽然Alice不知道C,D线的输入,但她仍然在每根线上选择标签来表示0和1。
图2
选择标签后,Alice根据电路的拓扑结构用标签替换真值表。以左上门为例。它有A和B线作为输入,E线作为输出。然后Alice将第一个真值表替换为:
在替换所有真值表后,Alice获得了一个“标签表”,如图3所示。
图3
对于每个门,Alice使用标签对门进行加密。即,对于标签表的每一行,Alice使用输入标签作为双重加密的密钥对输出标签进行加密。更具体地说,对于第一个标签表中的第一行,Alice使用A0和B0作为AES的密钥,并将E0加密为AESA0(AESB0(E0)),所有其他行和门都以类似的方式进行。然后Alice得到一个加密电路,如图4所示。
图4
假设Alice输入了x=10,Bob输入了y=01。然后Alice根据她的输入比特串和输出标签的含义(即关系I0->0; I1->1)将加密电路(所有加密门)与A1和B0一起发送给Bob。请注意,Bob无法从A1和B0获取Alice的任何输入信息,因为它们只是随机字符串,并且电路输出标签的表述关系不会泄漏任何输出值的附加信息。
在Bob解密加密电路之前,他必须根据他的输入信息获得输入标签。由于标签是由Alice选择的,因此他必须与Alice一起运行一个“传输协议”以获取标签而不直接告诉她输入的信息。这种“传输协议”在密码学中称为不经意传输,因为它是一个非常基础的密码学原语,我们不会详细介绍技术细节,而是在下面列出它的性质。
1.Alice将标签X0, X1作为输入,Bob将b=0/1作为输入。在协议结束时,Bob将获得Xb。
2.Alice不知道Bob选择了哪个标签。
3.Bob不知道另一个标签X1-b。
在与Alice运行不经意传输协议之后,Bob根据他的输入获得标签C0, D1,然后他可以开始解密加密电路。对于每个加密门,Bob用输入标签作为AES密钥解密四个密文,注意他只能获得一个有意义的标签,然后迭代地进行解密以获得输出标签I0。由于Bob知道I0的含义,他将获得输出0,并将其发送给Alice。整个求解过程如图5所示。
图5
至此,我们解释了姚期智教授发明的加密电路的基本原理。近40年来,人们也提出了许多优化技术来改进这一基础协议。Free-XOR(不加密异或门),row reduction和half gate(减少每个AND门的数量为2个密文)等技术和硬件加速(使用AES-NI)显着地提高了加密电路的效率。
关于安全多方计算
安全多方计算由图灵奖获得者、中国科学院院士姚期智先生首次于1982年提出。姚先生以著名的百万富翁问题来说明安全多方计算。百万富翁问题的指的是,在没有可信第三方的前提下,两个百万富翁如何不泄露自己的真实财产状况来比较谁更有钱。这个问题看上去不太可能,安全多方计算为多个参与方不泄露输入数据隐私的前提下进行协同计算提供了完整的解决方案。MPC技术在金融领域的跨行业用户征信、风控、用户识别、密钥管理等场景中有巨大的应用价值。