技术的突破是推动区块链行业前进的引擎,币安中国区块链研究院与链闻 ChainNews 同为密切关注区块链与密码学等领域技术发展前沿的组织,故而联合推出「他山之石」专栏,向中文世界读者介绍全球范围最值得关注的区块链技术进展,以及在金融等产业最新的应用分析与动态,以期为中国的区块链行业「攻玉」提供借鉴和思考。

本文将从技术角度讲解什么是安全多方计算,在 zkChannels 的应用以及如何在软件工程上实现它。

原文标题:《【他山之石】安全多方计算技术(MPC)简介
撰文:J. Ayo Akinyele,Bolt Labs 首席执行官、约翰霍普金斯大学计算机科学博士
本文已取得作者授权链闻和币安中国区块链研究院翻译转载

在本文中,我们将简要介绍一下多方计算和混淆电路的背景知识,解释我们怎样使用 MPC (多方计算)技术来建立私人支付渠道,并讨论我们怎样选择合适的软件框架来实现我们的 MPC 协议。

概述

安全多方计算(MPC)技术能使彼此不信任的多方正确计算任何函数,同时还能保证各方输入和输出信息的私密性。MPC 可被视为一种提供可信任第三方的方式,即使实际上并不需要这一可信任方。理想情况下,可信任的第三方从各方处获得秘密的输入信息,计算函数,然后将结果安全返回各方。而现实中,我们可以使用 MPC 来代替这一可信的第三方。

今天,MPC 技术已广泛用于解决许多方面的问题,例如网络广告、私人联系信息查找(用于发信息)、分布式密钥管理等等。在设定中,我们计算的函数用于检查链下状态方面支付型代币的正确性、计算比特币交易中的 ECDSA (椭圆曲线数字签名算法)签名、发布新支付型代币等。一方的输入信息是该方私密的签名密钥,另一方提出比特币交易,提供支付型代币。

在开始探讨细节前,我们先定义两个对 MPC 下任何联合计算都非常重要的高级属性:私密性和正确性。在私密性方面,任何一方都只知道他们自己的输出结果。而且所有各方从 MPC 获得的输出结果都可以保证是正确的。

在 MPC 协议中,通常会考虑两个基本的对抗模型:半诚实模型和恶意模型。如果半诚实模型中的 MPC 协议是安全的,则只要各参与方遵守协议规范,即可保证私密性和正确性。另一方面,恶意安全模型可确保诚实方的安全(即使参与方中的某些子集试图背离协议规范,以获得更多信息)。

为理解 MPC,我们提供了一些关于建立区块的背景知识:茫然传输(Oblivious Transfer)和姚期智的混淆电路(Garbled Circuits)协议。

他山之石丨技术解读安全多方计算 MPC 支付应用与软件框架

茫然传输协议基础知识

茫然传输

通过茫然传输(OT)协议,发送者 Alice 可发送一个请求的数据项给接收者 Bob,而 Alice 并不确切知道她发送的是什么数据项。在基本情况下,只有两个可能的数据项,即 X0 和 X1。Bob 选择一个位元 a ∈ {0,1}。OT 协议能确保发送者不知道接收者的选择了位元 a,确保接收者只知道 Xa。OT 是一种互动协议,能确保输出结果的正确性,还能保护发送者和接收者的私密信息。这是混淆电路协议中保证计算私密性的关键部分。

混淆电路

混淆电路是 MPC 的一种实现方法。基本的双方协议代表着理想的函数(作为一种布尔电路),使混淆电路能进行大量的逐位运算(例如 SHA256)来高效地计算函数。混淆电路有一个恒定的通信循环数,这对于慢速网络很有用。

他山之石丨技术解读安全多方计算 MPC 支付应用与软件框架

更确切地说,混淆电路协议在双方间执行:一个混淆者和一个评估者,他们联合评估基于他们各自私密输入信息的任意函数 f。本文中我们将处理 f 为单一输出函数时的特殊情况。使用「异或门」和「与门」将函数 f 编码为一个布尔电路。对于电路的每个输入值 i,生成器都将选择一对随机密钥 k0i 和 k1i (有时称为线标签),它们分别代表可能的输入位元 0 和 1。通过这些密钥,混淆者可生成一个电路中所有门可能的输出结果的加密表。如果有对应于实际输入值的密钥,则评估者可获得正确的输出结果。

他山之石丨技术解读安全多方计算 MPC 支付应用与软件框架

双方均知道此电路:Alice (作为混淆者)和 Bob (作为评估者)。Alice 有一个私密输入值 x,Bob 有一个私密输入值 y。他们都想安全地计算 f (x,y)。Alice 给电路加密,发送混淆电路 f′给 Bob,同时还有她加密过的输入值(或称混淆过的 x′)。使用茫然传输协议,Bob (作为接收者)可与 Alice (作为发送者)互动,他知道自己的加密输入值 y′(或混淆后的 y′),Alice 不知道他的私密输入值 y。

Bob 在收到加密的电路和加密的输入值后,他将开始逐门地计算电路,得到输出 f (x,y)。混淆电路的结构能保证 Bob 仅知道 f (x,y),即具体输入值的函数 f,别的什么也不知道。对于更深度的混淆电路处理,我们推荐读者阅读 Vitalik 的初级读本。

MPC 在 zkChannels 中的应用

在 Bolt Labs 公司,我们正在开发一种能在顾客和商家之间保持私密性的支付渠道(见我们关于 zkChannels 协议的博客文章)。这一渠道可使双方锁定款项由第三方托管,然后进行无限制的链下比特币转账 / 支付。随着每一次转账,双方合作更新渠道的余额,确保双方都能在得知新余额后关闭渠道,不会有丢失款项的风险。

我们使用 MPC 技术,以一种能保持私密性的方式实现了这一合作。即,每次支付都是匿名的:商家知道对方已经付款,但他们不知道具体由哪位顾客付的款。MPC 为顾客计算两个输出结果:关于比特币交易的 ECDSA 签名,和支付型代币。如果顾客已准备关闭渠道,他们可使用比特币交易;否则他们可使用支付型代币来用于未来的状态更新(即另一种支付)。MPC 的优点在于这两个输出结果均传送给顾客,而商家无法获得任何信息能了解是哪位顾客参与了协议。

我们采用以下方法做到了这一点:顾客与商家通过指定他们的私密输入值开始交易。顾客的私密输入值包括关于渠道的信息,其中有目前的状态和下一个状态。商家的私密输入值由一个 ECDSA 签名密钥和一个 HMAC (哈希运算消息认证码)密钥组成。

根据 MPC,它们构成一个格式正确的比特币交易摘要(反映出支付额),然后进行哈希运算,使用商家的 ECDSA 签名密钥给摘要签名。它们还计算基于更新状态的 HMAC,以便形成新的支付型代币。此支付型代币能使顾客根据 MPC 证明他们在过去曾与商家有过互动,在渠道中有足够的余额。

总之,MPC 的执行能保证各方都完全不知道其它方的私密输入值:商家不知道顾客的身份或渠道余额信息,顾客也不知道商家的私有密钥。在上述例子中,我们说明了 MPC 功能的几个高级方面;在不久后的学术文章,我们将公布技术详情。

软件框架选择和效能权衡

为执行 MPC 协议,我们使用了一种现有的软件框架来将 MPC 用于一个任意函数。我们选择 Efficient Multi-Party (EMP)计算工具包。此框架有几个优点,使之很适合我们使用:其中特别是它支持半诚实模型和恶意安全模型中的多种协议,以及混淆电路模型中的所有协议。

在我们的实例中,商家扮演混淆者一角,顾客则扮演评估者一角。这是一个自然的选择,因为无疑只有顾客将收到计算结果。此外,混淆方有稍高一些的资源要求,因为混淆电路需要大量的加密操作,以便建立所有(逻辑)门的真值表。在 EMP 工具包中,这算不上是大开销,商家可自定义他们的硬件设置来应对这一负荷。

EMP 工具包执行一个 C 语言库,该库用于描述安全功能。该库或者执行半诚实协议,或者将函数汇编成一个布尔电路。此电路可被传递给几个其它 MPC 协议中的一个,用于实现协议(包括几个能安全应对恶意攻击者的协议)。

我们的应用程序可分为几个主要的函数,包括大量的 SHA256 哈希运算、大量的输入验证,以及 ECDSA 签名。除签名外,所有这些函数基本上都是布尔运算:位移位、相等性检查和异或门掩膜运算。

EMP 工具包将数据表示为加密(混淆)位元,将函数表示为布尔电路。MPC 文献中的其它常见模型将数据表示为有限域内的秘密共享,将功能表示为算术运算电路。这些协议在基于位的运算中效率不高,而基于位的运算占我们应用程序的大部分。

部分现代框架 2 允许将布尔电路和算术运算电路混合起来一起计算,以便基于两种单独方法的优点来进行优化。在未来,我们将研究这些框架,以便优化我们应用程序中的 ECDSA 签名。如果需要更进一步了解其它 MPC 软件框架,可参阅 Hastings 等人更为全面的评估方法 1

在此我们要特别感谢 Colleen Swanson 和 Marcella Hastings,感谢他们的校对工作,以及他们关于本文的宝贵反馈。

参考文献

1. SoK:「多用途安全多方计算框架」:Marcella Hastings 等人

2. EzPC:简易的安全多方计算技术

来源链接:www.binance.cn