热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mpc算法使用,mpc算法的优点

本文已取得作者授权,并由链闻和币安中国区块链研究院获得中文地区翻译首发权在本文中,我们将简要介绍一下多方计算和混淆电路的背景知识,解释我们怎样使用MPC(多方计算技术来建立私人支付

本文已取得作者授权,并由链闻和币安中国区块链研究院获得中文地区翻译首发权

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

概述

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

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

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

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

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

茫然传输协议基础知识

茫然传输

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

混淆电路

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

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

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

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

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,感谢他们的校对工作,以及他们关于本文的宝贵反馈。

参考文献


推荐阅读
author-avatar
莫怀嘉805
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有