“两个争强好胜的富翁 Alice 和 Bob 在街头相遇,如何在不暴露各自财富的前提下,比较出谁更富有?”

这是一个经典的百万富翁问题,由华裔计算机科学家、图灵奖获得者姚期智教授在 1982 年提出。由这个问题衍生出来的解决办法,就是安全多方计算(Secure Muti-party Computation, MPC)。

本文就来讲讲,如何在互不信任且不暴露自己的情况下,还能进行比较与合作。

01

MPC 是什么?

MPC,或 SMPC,全称是 Secure Multi-party Computation,一般被称作安全多方计算。

具体的操作方法是:多个持有各自私有数据的参与方,共同执行一个计算逻辑计(如,求最大值计算),并获得计算结果。

过程中,参与的每一方均不会泄漏各自数据,只需要参与运算,并提供处理过的最终数据就可以。这种计算被称之为 MPC 计算,MPC 计算可以通过对协议的设计而不用依赖于可信第三方。

放在百万富翁的情景中,就是 Alice 和 Bob 不需要告诉对方自己的存款有多少,只需要各自将自己的财产数进行同一个计算。两人只公开计算结果,通过各自对比财产数和共同计算结果,就能知道究竟谁更富有一些了。

从功能上来说,MPC 可以用来帮助参与方在互不信任的情况下进行协作计算,得到统一真实的计算结果的同时,不会泄露其它信息。

从意义上来说,MPC 避免了因数据交互而引起了的隐私泄露问题。

举一个我们生活中的例子,Alice、Bob 和 Celine 希望知道三人的平均工资,但又不想泄露自己的真实工资,这时他们的选择有:

第三方验证

找到一个可信的第三方 Donic,在确保 Donic 不会泄露信息的情况下三人将工资信息告诉他,由 Donic 计算出平均工资并公布。

MPC

三人不需要寻找可信第三方,只需要通过特定算法计算出 A1、B1、C1,并将 A1、B1、C1 再次通过计算即可得到平均工资数据。

上述的例子中,一般情况下方案 1 是大多数人的选择,这也是现在存在许多第三方验证机构的原因。

但这种方式有两个明显的缺点:

合适的第三方认证机构并不容易找到;

这种情况下用户仍然是输出了自己的真实信息给其他人,并不能完全避免隐私泄露问题。

例如:

Tickermaster 泄露用户个人信息和银行卡;

Level One Robotics 造成数百家公司商业机密的泄露;

Nuance 泄露了 4.5 万份患者记录。

即使这些机构本身并不会主动泄露数据,但作为一个拥有大型有效数据库的主体,会被黑客作为首选的攻击对象。

02

MPC 与区块链的结合——私钥管理部分

从特性来看,MPC 与区块链技术正好可以达到查漏补缺,优势互补。

MPC 具有隐私性、安全性、去中介化的特点,强调数据的隐私性;区块链具有透明性、安全性、不可篡改的特点,强调数据的可验证性*。

*MPC 必须保证输出的结果是正确的,但是对最后输出结果难以进行验证;区块链在达成共识的过程中,具有一定的容错性,能够保证输出的结果是正确的(被一致认可)。

*区块链在隐私智能合约模块、私钥管理,信息传输等方面可以借助 MPC 来确保的用户的信息隐私。MPC 也可以借由区块链的激励机制让更多的人参与到协同计算的过程中。

了解了区块链与 MPC 的互补性之后,我们就可以说说私钥管理与安全多方计算的结合形式。

现在广泛使用的“门限签名”机制,是将私钥分割成片段交由多人管理。需要使用资产时,管理者们共同输入自己的私钥片段,组成真正的私钥。

这点类似于影视大片中,保险箱 9 位数密码分成三部分,由三个人共同保管,缺一不可。

MPC 应用在私钥管理方面的示意图

安全多方计算则是更安全的“门限签名”。它是将私钥片段通过算法分成多份,并交给多方保管。每当需要用到私钥时,私钥片段保管者们在链下运行 MPC 协议,通过内部算法输出多个签名片段 /Share。

以上图为例,4 个 Share 进行加密计算,生成 share’。4 个 Share’进入加密枢纽进行聚合操作。

最后的(Share1’+ Share2’+ Share3’+ Share4’)’ 是计算结果,具有私钥签名效力。

来源:PlatON 算法科学家 谢翔

目前 HashKey Hub 已经开发出了一套基于 MPC 协议的数字资产托管服务,已在HashKey Hub 最新的去中心化钱包 HashKey Me 上应用。