安全多方计算是密码学中非常活跃的研究领域,被认为是解决保护隐私的协同计算问题的良药。安全多方计算具有输入隐私性、计算正确性以及去中心化特征,能使数据既保持隐私又能被使用,从而释放隐私数据分享,隐私数据分析,隐私数据挖掘的巨大价值。
在区块链领域也常用到安全多方计算技术,它在隐私智能合约、密钥管理、随机数生成等技术中发挥着独特作用。本文我们将揭开安全多方计算的神秘面纱,带你了解安全多方计算的使用场景,当前的技术应用发展水平,以及在区块链领域中的重要作用。
安全多方计算解决什么样的问题?
安全多方计算是解决在一个互不相信的多用户网络中,两个或多个用户能够在不泄漏各自私有输入信息时,协同合作执行某项计算任务的问题。我们来举个例子。
例子:假设,你、小王和小李想知道三人的平均薪资,但又不想透露自己的具体薪资,那么要用什么方法达到这个目的呢?
解决方法1:传统的,如果有可信第三方的话,问题很容易解决。比如,你、小王和小李有一个共同信任的老板,你们可以各自把自己的工资告诉老板,老板保证不泄漏任何一位的薪资,并计算出三人的平均薪资。最后,将平均薪资告诉大家。
解决方法2:现实中并不是总能找到这样的可信第三方。在这种情况下,就能使用安全多方计算来解决问题了。简而言之,就是用算法代替可信第三方。
我们介绍一种容易理解的基于秘密共享的安全多方计算协议。首先我们需要回顾一下一个简单的数学理论,2点可以确定一条直线,3点确定一条抛物线。协议的过程分3个步骤。
第一步:你、小王和小李,各自选择一条抛物线,抛物线和Y轴的交点是自己的工资数。比如你的工资是100,你选择了一条抛物线y = 2×2 + x + 100. 然后,在这条抛物线上取出3个点(1 , 103), (2, 110), (3, 121), 自己保留一个点(1 , 103),秘密地将另外两个点(2,110),(3, 121)信息分别加密传给小王和小李。同样的,小王和小李也做这样的操作,将x=1的点秘密传给你,x=2的点给小王,x=3的点给小李。
第二步:三人每人拥有了三个密码碎片(不同抛物线上的点), 你拥有(1,103),来自小王的(1, y2),小李的(1, y3)。你可以算出一个点(1, 103+y2+y3)。这个点在一条特殊的抛物线上,这条抛物线与y轴的截距正好是三人的薪资之和。
第三步:三人将各自算出的不同的三个点,一起还原出一条抛物线。得到抛物线的截距。将截距除以3,得到的值就是三个人的薪资之和了。
这种方案下,一方面,三个人的薪资是保密的。因为,每个人只得到了对方抛物线的一个点,无法还原出对方的抛物线,因此无法算出截距,也就是别人的工资。并且,如果小王和小李合谋,他们也是无法算出你的薪资的,因为他们手中关于你薪资的抛物线,只掌握了2个点。2个点仍然无法还原出抛物线,因为,3点确定一条抛物线。另一方面, 能计算出三个人的薪资之和。你,小王和小李,三条抛物线之和得到的抛物线,的截距必定等于三个抛物线的截距之和。
阐述到这里,安全多方计算的一个安全性定义就自然而然浮出水面了。我们将解决方案1的这种使用可信第三方计算的情况称做“理想世界”,解决方案2这种没有可信第三方,通过安全多方计算协议来达到协同计算的情况称做“现实世界”。对于一个安全多方计算协议,如果人在现实世界中,对每一方的隐私数据的了解程度不超过在理想世界的了解程度,那么这个协议就是安全的。简单来说,使用安全多方计算协议比起使用可信第三方,不能泄漏更多的个人数据隐私。
安全多方计算发展水平
用于特定任务特定目的的“安全多方计算协议”可以追溯到1970年代后期。但能够安全地计算任何功能的通用安全多方计算起源于1982年。姚期智提出百万富翁问题,正式引入了一种基于混淆电路的两方安全计算方法,后来又逐步产生了多种基于混淆电路的和基于秘密共享的算法。我们可以把安全多方计算的历史分为3个阶段:
阶段一:从姚期智引入两方安全计算,距今已经有30多年了。其后又出现了各种不同的安全多方计算算法。大多数这些工作只是理论研究,因为他们效率太低了并不实用。
阶段二:为了解决效率问题,密码学家已经为多种用例开发出了高度优化的专用安全多方计算算法。但从头开始为每个应用设计,并不能促进安全多方计算的广泛使用。
阶段三:自从2000年代后期,确切来说从2010年开始,才开发出用于在任意函数上执行安全多方计算的通用编译器。这些项目迅速改进了现有技术,并开始使非专业用户可以使用安全多方计算。安全计算算法的显着改进以及硬件性能的稳定增长使安全多方计算成为解决大量现实问题的可行解决方案。现代安全多方计算协议实现足够快,可以安全地评估中等大数据集上的复杂函数,例如,具有数十到数十万个观测值的安全回归分析的众多实现。
现在有多种开源的安全多方计算框架供开发者使用。在2019年5月23日召开的安全顶级会议Security and Privacy 2019的一个演讲《SoK:安全多方计算通用框架》中,总结并对比了当下流行的安全计算框架:
其中,黑点表示“是”,白点表示“否”,一半白一半黑表示只有少量文档,少量示例或者部分开源。不同的框架所支持的安全多方协议不同,使用者可以根据实际场景需求来选择适用的框架。具体的安全多方计算算法、性能以及应用案例会在我们以后的文章中介绍。
安全多方计算用于区块链
安全多方计算,支持互不信任的个体,在无可信第三方的情况下,进行保护隐私的计算。这和区块链的互不信任的网络,去中心化特性,解决信任问题的目标极其吻合,因此也受到了区块链行业的欢迎。
区块链安全多方计算市场,隐私智能合约。有时,比起获得单个的个人隐私数据,人们更感兴趣于对与这个人相关的数据进行统计分析,获取汇总的答案通常更有意义。区块链安全多方计算市场或隐私智能合约就可以解决这类问题。安全多方计算使得不可信的多方之间,可以进行敏感数据联合计算、敏感数据求交集、敏感数据联合建模等。这个过程与智能合约结合,则可以实现隐私智能合约,自动化支付,并形成一个安全多方计算市场。
这种项目有很多,比如Datum个人信息分享市场, Data Broker DAO的IoT数据分享市场,矩阵元的JUGO,iCube, ARPA等。举一个具体的例子,MIT Engima 在医疗领域的设计就是结合了安全多方计算和区块链。他们计划将区块链用于医疗数据的分享和隐私计算。他们将系统分成3个层次,最底层是区块链网络; 中层是Engima提供的加密设施层,提供秘密分享和安全计算的功能; 上层是数据仓库层,有提供传统医疗数据的数据仓库,也有智能合约等。
Enigma允许智能合约开发人员编写团队称之为“秘密合约”的内容。秘密合同本质上是与私人数据一起运作的智能合约。Enigma的秘密合约将具有这样的代码:部分在公链(例如Enigma区块链)上执行,安全多方计算部分在Enigma的去中心化式链外隐私计算网络上执行。公链将主要用作安全措施,以存储可执行的代码正确执行的可审计证据,这部分证据被称为proof-of-MPC。
基于安全多方计算的密钥管理。在数字货币里拥有账户的私钥就表示拥有了资金的所有权。为了提高资产安全,尤其是大额资产,目前有两种方案:多重签名和秘密共享。
l 多重签名。通常需要有多个私钥N,只有当其中的 M个私钥参与的签名,才可以动用资产。因此,把私钥交给不同人保管,确实可以提高安全性。即使部分私钥被泄漏,只要没有超出容错范围,资产依然安全。
l 秘密共享。秘密共享(Secret Sharing Scheme, SSS)模式,会将密钥分成多个部分并以冗余方式分开保管。发起交易时,将一定数量的密钥重新组装为密钥进行签名。这个方案也可以容忍部分密钥被盗的风险,同时解决了上述多签费用高的缺点。不过SSS 有一个主要缺点:当密钥被重新组装时,会为攻击者提供了获取密钥的可乘之机。
最近,KZen公布了新款的ZenGo钱包,一个不需要助记词和密码的钱包。大大提升了用户体验。KZen的密钥管理采用的是门限签名的方法,门限签名结合多重签名和秘密共享的优点。一方面,多重签名通常是链上进行的,门限签名线下进行,比多重签名费用更低。另一方面,门限签名不需要重构出密钥,比秘密共享的方法更安全。
它基于多方安全计算技术,使用两个独立(部分)秘钥来取代传统的单个私钥模式。其中一个秘钥保存在手机上(用 TouchID/FaceID授权访问),另一个存储在 ZenGo 服务器上,在进行交易的时候,手机和 ZenGo 服务器通信共同完成签名。
基于安全多方计算的随机数生成。去中心化系统中随机数生成是一个难题,有的区块链系统采用安全多方计算的方法来生成公平的不受单个个体操纵的随机数。
例如,在小蚁的共识算法中, 记账人被投票选举出之后, 会随机选出一个人来出块。记账人使用Shamir’s Secret Sharing Scheme,SSSS)来协作生成随机数。SSSS方案通常用于密码共享,通过SSSS方案,可以通过密文S生成N份密文碎片,持有其中的K份,就能还原出密文S。记账人(假设有N +1个)之间通过3步就可以对随机数达成共识。
第一步: 每位记账人自选一个随机数,将此随机数通过SSSS方案生成N份碎片,用其他N个记账人的公钥加密,并广播给其他记账人。
第二步:收到其他N个记账人的广播后,将其中自己可解密的部分解密,并广播。
第三步:收集到至少K份密文碎片后,解出随机数;获得所有记账人的随机数后,合并生成区块随机数。
随机数由各个记账人协同生成,只要有一个诚实的记账人参与其中,哪怕即便其他所有记账人合谋,也无法预测或构造此随机数。
总结
综上,安全多方计算技术框架在不断发展,使得安全多方计算的通用型和性能得到提高。安全多方计算的应用将大量出现。同时,它在区块链系统中的作用也在不断被挖掘,区块链多方计算成为了当下一个受瞩目的技术亮点。尤其是近两年,2018年3月MIT Engima团队规划了“隐私合同”新蓝图;蚂蚁金服建立区块链摩斯安全计算平台;万向区块链实验室和矩阵元共同建立了PlatOn项目,将于2019年Q3发布区块链安全多方计算算法等。
当然,技术的发展需要时间。区块链+安全多方计算项目需要克服两大技术难点。
1. 网络等待时间,传输速率,数据包丢失以及节点的数量会严重影响安全多方计算运行时间、内存分配和传输的数据量。在区块链系统中,尤其是公链系统中,如何克服难题提高效率是难点之一。
2. 链上和链下如何配合,如何验证参与方是否正确地执行了安全多方计算,是另一个难点。
虽然存在技术难点,但我相信安全多方计算技术是一项非常有前景的技术。且经过这些年的发展,已经非常接近落地了。而安全多方计算和区块链技术的组合也是非常适合的,在将来可能和区块链一同成为通用的基础设施,解决信任问题,释放巨大价值。