摘要
安全多方计算协议(MPC)使一组各方能够交互并计算其私人输入的联合函数,同时只显示输出。MPC的潜在应用是巨大的:隐私保护拍卖、私有DNA比较、私有机器学习、阈值加密等等。因此,自从20世纪80年代姚在两党案件(FOCS 1986)和戈德里奇、米卡利和维格德森在多党案件(STOC 1987)中提出MPC以来,MPC一直是学术界的一个密集研究课题。近年来,MPC已经变得足够有效,可以用于实践,并且已经从理论研究的对象过渡到工业上使用的技术。在本文中,我们将回顾什么是MPC,它解决了什么问题,以及目前如何使用它。我们注意到,这篇综述文章中的例子和参考文献远远不够全面,由于篇幅不足,许多高度相关的作品没有被引用。
引言
分布式计算通常处理在机器崩溃和其他意外故障威胁下的计算问题,而安全多方计算则关注某些敌对实体故意恶意行为的可能性(这些在分布式文献中也被认为是拜占庭故障)。
任何安全计算协议的两个重要要求是隐私性和正确性。隐私要求规定,除了绝对必要的内容外,不应学习任何东西;更确切地说,各方应该了解自己的产出,而不是其他。正确性要求规定各方应收到其正确的输出。因此,对手不得导致计算结果偏离双方已设定的计算功能。安全多方计算可用于解决各种各样的问题,从而在不损害隐私的情况下利用数据。
比如隐私性对于DNA保护更加重要,而正确性对于交易更加重要。
MPC的安全性
为了正式声明并证明协议是安全的,需要对多方计算的安全性进行精确定义。已经提出了许多不同的定义,这些定义旨在确保一些重要的安全属性足够通用,以捕获大多数(如果不是全部)多方计算任务。我们现在描述这些属性中最核心的:
属性 | 相关名词解释 |
---|---|
隐私 | 任何一方都不应学习超过其规定输出的内容。 |
正确性 | 各方保证其收到的输出是正确的。 |
输入的独立性 | 攻击方必须独立于诚实方的输入选择其输入。 |
保证输出交付 | 攻击方不应阻止诚实方接收产出。 |
公平 | 当且仅当诚实的当事人也收到他们的输出时,攻击的当事人才应该收到他们的输出。 |
上述列表并不构成安全性的定义,而是任何安全协议都应该具备的一组要求。如果说满足了所有这些需求,协议是安全的。
协议的安全性是通过比较实际协议执行的结果与理想计算的结果来建立的。
我们还需要去定义攻击者具有什么样的权力,这里定义两个参数:
敌对行为:攻击方是被动的收集信息还是主动出击
腐败策略:参与计算的诚实者在什么情况下会手到对手的控制。
接下来需要去了解三种敌对的模式:
半诚实的对手:在半诚实的对手模型中,即是破坏的一方,也正确遵循协议规范。可以简单理解为他们本来是遵循多方安全计算协议的诚实人员,但是突然他们好奇其他人的消息;也可能是因为他们不想进行计算了,然后将自己的输入进行中止,来将这个过程进行中断。(他们是计算的参与方,并不会破坏协议)
恶意对手:他们是完全不遵循协议来进行破坏的攻击者,他们只是想要在计算中获取想要的信息或者利润,来对协议本身进行破坏。恶意对手会可能会采取比秘密对手更大范围的行动,他们并不怕被发现。
隐蔽对手:对手通常会将控制权扩展到修改或破坏商定的协议,其目的通常是要学习更多的知识,而不仅仅是从观察中学习到的知识。
Corruption strategy:
腐败策略涉及参与者何时以及如何腐败的问题。主要有三种模型:
攻击模型 | 说明 |
---|---|
静态腐败模型 | 协议开始之前,对手控制一组的参与者,那么诚实的参与者就是诚实的参与者,攻击者就是攻击者,他们都是明确的。 |
适应性腐败模型 | 适应性对手在计算过程中被赋予腐败方的能力,而不是拥有一组固定的腐败方。选择谁腐败,何时腐败,可以由对手任意决定,并且在这个模型中如果参与方一旦变得腐败,那么就会一直腐败下去。 |
主动安全模型 | 这个模型的对手是在不规则变化的,可能从攻击者变为诚实者,也有可能从诚实者变为攻击者,他们是不规则变化的。发生这种情况是因为当发现漏洞时,系统会被清理,对手会失去对某些机器的控制,从而使双方再次诚实。 |
考虑上述因素时,没有“正确”的模型。相反,使用的具体定义和考虑的对手取决于应用程序和正在处理的威胁。
MPC的可行性
我们如何去定义计算是安全的?那就是在对有对手的情况下,没有对抗成功的情况出现,也就是我们可以同样的认为我们是在有第三方在执行计算一样。那么,人们就像去知道在这种定义下,是否有可能获得安全协议,如果获取了安全协议,那么有那些分布式计算任务是在这种安全协议下去进行的。
现在我们要去说明这些结果中最核心的部分(主要是看忠诚度)。n表示参与方的数量,t表示可能拥有攻击者的数量的上限(但是这些攻击者的身份并不明确,原文是corrupt,我的理解是就是原来的参与者被人贿赂后,发生了腐败,这里我就把这些从原来的诚实者变为腐败者就直接翻译成攻击者):
1、对于t<n/3,这就意味者攻击者的数量并未达到总体数量的1/3,在这种情况下,可以为任何具有计算安全性的功能实现具有公平性和有保证的输出交付的安全多方协议,前提是有同步点对点网络具有经过身份验证的信道【1】,并且假设信道也是私有的,具有信息论安全性【2】。(这个前提,我并不是清楚讲的什么,我附上参考论文,有兴趣的可以去看看)
2、对于t<n/2,这也就是能保证绝大部分的诚实节点,可以为任何具有计算和信息论安全性的功能实现具有公平性和保证输出交付的安全多方协议,前提是各方也可以访问广播信道。【1】
3、对于t>n/2,当破坏方的数量不受限制时,可以实现安全的多方协议(没有公平性或保证的输出交付)
总之,安全多方协议适用于任何分布式计算任务。(具体论证还是需要详细查看给出的两个链接)这一事实提供了它巨大的潜力——任何需要计算的东西都可以安全地计算出来!然而,我们强调,上述可行性结果是理论上的,这意味着它们证明了这在原则上是可能的。他们不考虑实际的效率成本。
技术
在过去的三十年里,人们开发了许多不同的技术来构建具有不同属性和不同设置的MPC协议。甚至提到所有的技术都远远超出了本文的范围,我们强烈建议阅读[3]一篇非常好的、友好的MPC介绍,包括对主要技术的调查。然而,我们将提供几个简单的例子来说明MPC协议是如何构造的,以便说明它是如何工作的。
shamir秘密共享
对于有着大多数诚实者的 MPC协议经常会利用秘密共享作为一个基础的工具。下面就简单描述一下shamir秘密共享方案。
一个秘密共享方案解决了一个领导者想要去在n个参与者之间分发一个秘密s,并且满足超过t+1个以及以上个参与者就可以去回复秘密,然而不足t个的参与者将无法获取秘密。这样子的方案就实现了秘密共享——(t,n)秘密共享方案。
这个流程就是分为密码分发阶段和解密阶段。
秘密分发阶段:
1、创建一个最高项的幂为t+1的多项式,多项式表示为
q
(
x
)
=
∑
i
=
0
t
a
i
⋅
x
i
其
中
a
1
,
a
2
,
…
,
a
t
∈
Z
p
q(x)=\sum_{i=0}^{t} a_{i}\cdot x_{i} 其中a_{1},a_{2},\dots ,a_{t}\in \mathrm{Z}_{p}
q(x)=i=0∑tai⋅xi其中a1,a2,…,at∈Zp
这是保证多项式的系数可以在一定域的范围内,q是一个比参与者n大的数,保证随机选取的Xi可以在域内不会发生重复的情况,之后每个人的二维点标(xi,yi)选取是根据xi从域中随机选取但是保证xi≠xj,然后将xi代入到上面的多项式中,得到相应的yi,之后分给参与者。而其中的秘密就是系数a0。
秘密恢复阶段:
我们只要有t+1个人的二维数点,我们就可以将这些点进行拉格朗日插值法将多项式还原出来。然后将x=0带入即可解出想要的秘密。
秘密共享下多数诚实者的MPC(Honest-Majority MPC with Secret Sharing)
大多数通用MPC协议(即可用于计算任何函数的协议)的第一步是将要计算的函数表示为布尔或算术电路。在基于秘密共享的诚实多数MPC的情况下,算术电路(由乘法和加法门组成)位于p>n的有限域Zp上,如上所述。我们注意到算术电路是图灵完备的,所以任何函数都可以用这种形式表示。参与MPC协议的各方都由该电路提供,我们假设他们都可以安全地相互通信。针对半诚实对手的协议(关于恶意对手的情况,请参见下文)包括以下阶段:
- 输入分享:在这个阶段,各方使用shamir的秘密共享与其他各方共享其输入。对于每条输入线,其输入与该线关联的一方在shamir的秘密共享中扮演经销商,以向各方共享价值。简单来说,就是各个参与者都是在输入自己的秘密输入的时候,从而给其他输入者创造自己的价值。这个时候t=[(n-1)/2]。这个数值设置给少数的腐败放造成获取任何价值的门槛。
- 电路评估:这个阶段是每个参与者持有两个输入线路和一个输出线路。
计算加法门:用a(x)和b(x)代表多项式同时也代表两个输入的值,当x取不同的值时候代表不同的参与者,而这个加法门就是简单c(x)=a(x)+b(x),其中c(x)就是输出线路的输出,很简单的理解。
计算乘法门:同理乘法门也可以得到c(x)=a(x)*b(x),但是这有个问题,就是我们式多项式相乘,会将多项式的最高次幂提升至2t,导致(t,n)门限变为(2t+1,n)门限,所以我们接下来需要进行降幂运算。
这里我们的输入有两个秘密输入,我们在这个基础上再加上一个随机数r。然后第一个秘密通过多项式R2t(x)(最高次幂为2t),第二秘密输入通过Rt(x)(最高次幂为t)。这里R2t(0)=Rt(0)=r。接着每个参与者在本地计算一个最高次幂为2t的多项式d(x)=C(x)-R2t(x).接下来就是每个参与方计算d(0),将计算出的d(0)结果发送给其他人。最后第i个参与者得到的输出线路上的公式就是c‘(i)=Rt(i)+d(0).最后我们就得到c‘(0)=a(0)·b(0),中间的r就被消除了。具体过程参考[4] - 输出重构:一旦双方在输出线上获得了share,他们就可以通过简单地相互发送share并通过插值重构输出来获得输出。注意,如果需要,不同的方也可能获得不同的输出。在这种情况下,双方仅将用于重建的share发送给相关方,相关方应在给定的电线上获得输出。
上述协议对于半诚实的对手是安全的,只要有不到n/2方被破坏。这是因为双方在计算过程中看到的唯一值是秘密共享(不会透露隐藏的值),以及开放的d(0)值,由于每次使用的独立随机共享,不会透露导线上的实际值。请注意,为了在可能偏离协议规范的恶意对手面前实现安全,有必要使用不同的方法来防止作弊。参见[4,10,16]了解如何在恶意对手面前有效实现安全的几个示例。
Private Set Intersection
在这个私有交集协议中主要的作用就是保证我们每个人的输入值交给其他人计算的时候,保证我们的个人的输入不会被其他人获取。具体的过程我们就举例两个人之间的交互计算:
不过在介绍流程之前我们先引入一个函数的概念,函数F具有的功能就是伪随机函数F是一个键控函数,其性质是函数在已知输入上的输出看起来完全随机。 什么叫键控呢,简单理解就是这个函数具体的形式是什么样是由键值k来决定的,就相当于函数中额外多出来的一个参数,与自变量没有关系的参数。
流程如下:
- 首先第一个参与者选定键值函数的键值k。
- 然后双方进行n次不经意的伪随机函数评估: 在第i次执行中,第一个参与者输入k和第二个参与者的输入yi。结果就是,第二个参与者知道了Fk(y1), . . . , Fk(yn),然而第一个参与者无法获取y1, . . . , yn
- 第一个参与者当地计算Fk(x1), . . . , Fk(xn),并且把这个列表发送给第二方。因为第一方知道k,所以他本人可以计算
- 第二方计算列表Fk(y1), . . . , Fk(yn)和Fk(x1), . . . , Fk(xn),并输出Fk(yj)在交点处的所有值yj。
门限密码
门限加密的目的是:使得没有任何单一的一方持有密钥,而是需要一些列的人持有密钥的一部分才能将密钥进行组合而得来。
这样做得好处是攻击者需要获取一定数量得密钥碎片才能组合成一个完成的密钥,加大了攻击者获取密钥的难度。
本文演示了RSA公钥方面的门限加密方案。
不诚实者占多数的MPC
这里文章并未介绍太多只是列举一些比较具有可行性的协议,列表如下:
高效使用的MPC
MPC研究的前二十年主要集中在可行性上:如何定义和证明多个对抗和网络模型的安全性,在什么样的密码和设置假设下实现MPC,等等。接下来的十年里,围绕着让MPC变得越来越高效,进行了大量研究。这个过程的第一步纯粹是算法,重点是减少加密原语的开销。在此之后,还考虑了其他具有重大影响的问题:内存和通信、AES-NI等硬件指令的利用等。此外,由于大多数通用协议需要计算函数的电路表示,并且电路很难手动构造,因此还构造了从代码到电路的专用MPC编译器。这些编译器被定制为对MPC的特殊属性敏感。
MPC使用案例
应用场景:医疗、DNA比较、收集统计数据而不透露任何信息、汇总结果等等。目前被用于多个真实世界的用例中。下面就介绍已经部署的按案例:
1、Boston wage gap (工资差距)
2017年,波士顿妇女劳动力委员会使用MPC计算了114家公司166705名员工的薪酬统计数据,这些公司约占大波士顿地区劳动力的16%。MPC的使用至关重要,因为出于隐私考虑,公司不会提供原始数据。结果显示,波士顿地区的性别差距甚至比美国劳工统计局之前估计的还要大。这是一个有力的例子,表明MPC可以用于社会公益。
2、Advertising conversion(从广告到实际购买的准确转化率)
为了计算从广告到实际购买的准确转化率,谷歌计算了显示广告的人员列表与实际购买广告商品的人员列表之间的交集大小。如果商品不是在线购买的,因此无法跟踪与所显示广告的购买连接,谷歌和支付广告的公司必须共享各自的列表,以便计算交叉点的大小。为了在不透露交叉口大小的情况下进行计算,谷歌使用了一种保护隐私的集合交叉口协议。
3、MPC for cryptographic key protection(用于加密密钥保护的MPC )
门限加密技术提供了执行加密操作(如解密和签名)的能力,而无需将私钥保存在任何一个地方。许多公司正在使用阈值加密作为传统硬件的替代方案来保护加密密钥。在此应用程序中,MPC不会在持有私人信息的不同方之间运行。相反,单个组织使用MPC生成密钥并计算加密操作,而不会将密钥放在一个可能被盗的地方。通过在不同的环境中放置密钥共享,对手很难窃取所有共享并获得密钥。在这种情况下,MPC的另一个用途是保护用于保护加密货币和其他数字资产的签名密钥。在这里,定义通用配额的能力使严格的金融交易批准政策得以加密实施,或在托管提供商和客户之间共享密钥。
4、Government collaboration(政府间合作)
不同的政府部门掌握着有关公民的信息,通过关联这些信息可以获得重大利益。然而,汇集私人信息所涉及的隐私风险可能会阻止政府这样做。例如,在2000年,加拿大取消了一个收集公民信息的项目,因为有人批评他们正在建立一个“老大哥数据库”。爱沙尼亚利用MPC收集了加密的所得税记录和高等教育记录,以分析在学位期间工作的学生是否比只专注于学业的学生更容易失败。通过使用MPC,政府可以保证遵守所有数据保护和税务保密法规,而不会失去数据效用。
5、Privacy-preserving analytics(隐私保护分析)
机器学习在许多领域的应用正在迅速增加。MPC可以用于在数据上运行机器学习模型,而无需向数据所有者披露模型(其中包含宝贵的知识产权),也无需向模型所有者披露数据。此外,为了反洗钱、风险评分计算等目的,可以在组织之间进行统计分析。
讨论
在MPC研究的前20年里,没有任何应用,MPC是否会被使用也值得怀疑。在过去的十年里,MPC可用性的状态发生了根本性的转变。在这段时间里,MPC不仅变得足够快,可以在实践中使用,而且它已经得到了业界的认可,并已经向一种在实践中部署的技术过渡。MPC仍然需要大量的专业知识来部署,而且还需要更多的研究突破,需要使安全计算在大型数据集和复杂问题上实用,并使其易于非专家使用。过去几年的进展,以及目前正在进行的大量应用研究,为MPC在实践中描绘了一个积极的未来。除此之外,MPC的深入理论工作仍在继续,确保应用的MPC解决方案建立在坚实的科学基础上。
参考论文:
1、O. Goldreich, S. Micali and A. Wigderson. How to Play any Mental Game – A Completeness Theorem
for Protocols with Honest Majority. In the 19th STOC, pages 218–229, 1987. Details in Foundations of
Cryptography: Volume 2 – Basic Applications (Cambridge University Press 2004), by Oded Goldreich.
2、D. Chaum, C. Crépeau and I. Damgård. Multi-party Unconditionally Secure Protocols. In the 20th
STOC, pages 11–19, 1988.
3、D. Evans, V. Kolesnikov and M. Rosulek. A Pragmatic Introduction to Secure Multi-Party Computa-
tion. NOW Publishers, 2018.
4、I. Damgård and J. Nielsen. Scalable and Unconditionally Secure Multiparty Computation. In CRYPTO
2007, Springer (LNCS 4622), pages 572–590, 2007.