SMPC-安全多方计算综述
随着物联网、移动计算、大数据、云计算的快速发展,人们的生活方式正在发生巨大变化。这些技术为信息的收集、存储、传播和处理提供了一种新的模式,为整个社会提供了极大的便利。为了共享这些不同技术所提供的资源,不同组织或个人之间的协作计算变得越来越频繁。例如,可以将物联网系统中不同传感器收集的数据进行聚合,以产生目标结果;云和客户端可以合作提供适当的服务。然而,与此同时,私人信息和机密数据的泄露频繁发生。这些安全威胁严重制约了这些数据处理技术的应用和推广。因此,开发多方背景下的隐私保护数据处理方法已成为一项迫切的任务。
密码学作为信息安全领域的核心技术,在保障安全的各个方面发挥着核心作用,为数据的私密性、完整性和认证提供了理论基础和技术支持。在密码学研究中,安全多方计算(SMPC)是一种通用的密码原语,它能以保密的方式进行联合计算。SMPC是密码学领域的一个重要基础研究课题,它解决了安全单元中多个参与者对私有数据进行协同计算的问题。在这个任务中,维护安全只需要每个参与者获得自己的目标输出。在这里,功能是一个通用概念,几乎可以指任何加密任务,如加密、认证、零知识证明、承诺方案、无关传输和其他非加密协议(例如,面向应用程序的任务包括合同签署、电子投票、机器学习、基因组数据处理等)。可以说,SMPC是密码学领域中最普遍、最基础的理论研究课题。任何涉及多方的加密任务都可以视为SMPC任务。对SMPC的深入研究促进了零知识证明、无关转移、秘密共享等基本原语的发展。SMPC为交互式协议的可证明安全性奠定了理论基础,极大地促进了现代密码学的发展。
SMPC涵盖了从理论到实践的广泛研究范围,包括SMPC构建块、通用SMPC协议、云辅助SMPC和面向应用的协议。图2显示了SMPC研究领域的高级概述。
一般的SMPC包括将一个目标计算任务转换为一个算术或布尔电路C,将C分解为一系列算术门或逻辑门的基本组合和随后的设计SMPC协议下的电路具有特定的安全模型。用于此目的的底层密码工具包括秘密共享、同态加密、无关传输和乱码电路。所开发的电路逐层进行计算,最终安全地完成计算任务。近年来,研究人员致力于在各种安全模型下提高此类协议的效率。同时,为了在效率和安全性之间取得平衡,提出了一些安全性较低的新模型。
云辅助SMPC的研究旨在通过利用云服务器上可用的资源来显著减少计算和通信开销,从而提高协议效率。面向应用的SMPC包括私有集操作、隐私保护机器学习、数据挖掘和安全基因组计算等领域的研究。上述协议都涉及到无关传输、秘密共享、抛硬币、同态加密、承诺方案、零知识证明等基本构建模块。这些模块为SMPC的理论和实践奠定了基础。
SMPC考虑不诚实参与者的不诚实行为的可能性。这种攻击的目的可能是发现他人的私人信息或在计算任务中造成错误。在一次SMPC任务中对手可以控制一些参与者的子集,被对手控制的一方被称为腐败的参与者,在执行协议时完全遵循对手的指令。为了正式证明协议是安全的,研究人员提出了许多安全的定义,主要试图保证以下内容
- 隐私:任何一方都不应获取除其自身输出和可从其自身输入和输出获得的信息之外的任何信息。
- 正确性:每个参与者收到的输出应该是正确的。
- 输入的独立性:被错误参与者选择的输入必须独立于诚实参与者的输入。
- 输出保证:腐败的参与者不能阻止诚实的参与者接收自己的输出。换句话说,对手不应该能够通过运行“拒绝服务”攻击来中断计算
- 公平:当且仅当诚实的参与者收到他们自己的输出时,腐败的参与者应该收到他们自己的输出。
安全的定义
目前安全的标准定义如下。考虑一个“理想世界”,其中有一个外部可信方来帮助参与者执行计算。在这种情况下,参与者可以简单地通过一个完全安全的通道将自己的输入发送给可信方,然后可信方计算所选的功能,并将相应的输出单独、秘密地发送给每个参与者。因为参与者执行的唯一操作是将其输入发送给受信任的一方,所以对手唯一的自由就是选择被破坏的一方的输入。因此,在理想情况下,上述所有安全需求都得到了满足。然而,在“现实世界”中,没有一个外部方是所有参与者都可以信任的。相反,参与者在没有任何外部帮助的情况下共同执行协议。如果该协议能够模拟上述理想世界中获得的结果,即,如果参与者执行的真实协议能够保证在理想世界中执行时,对手所造成的伤害不会超过可能的程度,那么该协议就是安全的。这个条件可以表示为:对于任何在现实世界中成功执行攻击的对手,理想世界中的对手必须总是能够成功执行相同的攻击。然而,在理想世界中,攻击是无法成功执行的;因此,现实世界中对协议执行的所有攻击都必须失败。
下面给出了安全的更直观的定义。协议的安全性可以根据两种联合输出分布的比较来评估:一种是由现实世界中的对手和诚实的参与者获得的,另一种是通过在理想世界中执行获得的。为执行任何攻击他的敌人,一个真正的协议,敌人执行相同的理想世界是攻击,和安全标准是满足如果联合输入/输出分布的对手和参与者的理想世界是一样的对应分布在现实世界中。在这种条件下,实际协议的执行“模拟”了理想世界的效果。图3所示的安全定义被称为理想/真实模拟范例。
安全模型
上面的非正式安全定义没有考虑到安全模型。在SMPC的研究中,安全模型定义了对手的能力。协议的安全性只有在特定的安全模型下讨论时才有意义。一个协议只有在相应的安全模型下能够抵抗任何对抗性攻击时才被认为是安全的。根据对手的行为,安全模型可以分为以下不同的类型。
- Semi-honest adversary model: 半诚实模型。即网络中存在一些心怀不轨的节点,但是这些节点有贼心没贼胆,他们会遵循协议进行业务协商和计算,但是它们会留意更多的隐私相关数据,尽一切合法途径可能性去获取和保存隐私数据。恶意参与者必须正确地执行协议。然而,对手可以获得关于每个损坏部件的内部状态的全面信息(包括所有收到的邮件的文本),并将试图使用该信息获取其他应保密的信息。尽管这是一个非常弱的对手模型,但它捕获了许多实际场景。
例如,假设几个组织或公司希望在某些任务上进行协作。如果被发现作弊,他们不会因为声誉损失或负面新闻而做出不诚实的行为;然而,他们希望尽可能多地获取其他参与者的私人信息,以获得优势。 - Malicious adversary model: 在恶意模型中,被破坏的参与者可以根据对手的指令任意偏离协议的规范。针对恶意对手的安全协议可以保证任何对抗性攻击都将失败。当结果不如预期时,它们很可能故意输出错误的结果导致计算失效从而大大降低协作计算效率。为了达到这个级别的安全性,就协议的效率而言,必须付出沉重的代价。这是在竞争对手之间执行联合计算任务的首选模型。参与者可能会做出不诚实的行为,以导致错误,或产生错误的计算结果。
- Covert adversary model: 上面提到的半诚实对手模型太弱了,但是在恶意对手模型下要求安全性会导致协议效率太低。为了克服这些困难,提出了隐蔽对手模型。隐蔽的对手可能会表现出恶意行为,但它有一定的概率被诚实的参与者发现作弊。这一模式代表了许多金融或政治环境,在这些环境中,诚实的行为是无法假定的,但相关公司和机构也承受不起因被发现欺诈而造成的声誉损失
应用:
上图是姚期智提出的最初的SMPC适用于半诚实模型,在Yao的协议中,每个电路门只涉及一定数量的对称密码操作(输入门除外,它也涉及调用无关传输(OT)的非对称操作);因此,该电路非常高效。姚教授提出了一种基于混淆电路和无关传输的通用S2PC恒轮半诚实协议。在这种方法中,目标功能用布尔电路来表示。其中一个参与者(称为Generator,用Gen表示)需要构造一个混乱版本的电路,而另一个参与者(称为Evaluator,用Eval表示)负责对混乱的电路进行无关的计算。因此,双方在保留各自输入的隐私的同时获得正确的输出。具体来说,假设Gen持有一个秘密输入x, Eval持有一个秘密输入y,它们互不信任,想要联合计算目标功能f(x, y)而不暴露各自的秘密信息。图6所示的协议图对这项开创性工作提供了更详细的描述。然而,由于所需的电路可能非常大,以前认为使用基于电路的协议来完成SMPC任务是不切实际的。
姚教授的密码协议的出现引起了密码学学界的广泛关注。与该方法相关的主要研究方向之一是对乱码电路构造方法进行优化,以有效提高计算效率。
姚教授的协议只针对半诚实的对手实现了安全,这在实践中是不够的。为了抵抗恶意对手的攻击,早期的解决方案通常应用通用的零知识证明来约束参与者的行为。
尽管这些技术有助于不断循环的安全协议的设计,但这样的协议并不实用。关于如何避免使用泛型零知识证明的文献也存在,但这些协议的圆复杂度在电路深度上是线性的。
总结了几种流行的技术:(不详细展开讲解,关心的请查询对应key words)
关键词 |
---|
Cut-and-choose paradigm |
LEGO method |
Preprocessing model |
IPS compiler |
SMPC效率问题
Kamara等人首次提出了服务器辅助SMPC(云辅助SMPC的另一个术语)。云服务器的加入有助于提高SMPC协议的运行时效率。然而,它也带来了新的挑战。特别地,它改变了SMPC的计算模型和安全模型。在经典的SMPC中,隐式假设计算是在同构计算环境中执行的,在同构计算环境中,所有参与者扮演相似的角色。在云辅助的SMPC中,协议运行在异构环境中,除了评估功能的各方外,还包含一个不受信任的服务器,该服务器(1)不向正在计算的函数提供输入,(2)不从计算任务接收任何输出,但(3)可以访问大量计算资源。这种设置被称为服务器辅助SMPC或云辅助SMPC,如图7所示。在这样的模型中,评估功能的各方被允许将SMPC的繁重计算任务外包给云服务器。虽然新的计算模型显著提高了协议效率,但云辅助SMPC也面临着新的安全挑战。例如,云服务器可能与各方的一个子集串通,以获取关于其他各方输入的附加信息。此外,恶意或“懒惰”的云服务器可能会向外包方返回伪造的计算结果。因此,需要新的技术来保证云辅助SMPC的安全性。
云计算引入了一种新的资源组织和利用范式。不可避免的是,需要为云设置设计和实现安全协议。作为一种强大的外部资源,云不仅是SMPC的补充服务,而且是加密中安全执行特定计算任务的重要参与者,包括加密方案和数学计算,此外,在云计算时代,一些新的安全问题也被引入或重新出现,如可搜索加密、无关RAM、可验证计算[7]和安全重复数据删除。这些问题也可以抽象为SMPC功能,并可以通过SMPC协议解决。因此,提供全面的实用方案至关重要。
即,SMPC由于其计算的复杂性和特殊性导致效率不高,使用辅助云计算可以有效提升SMPC效率。
区块链应用:智能合约
区块链是目前的热门话题,主要是因为它是加密货币背后的底层技术。它是一种去中心化、分布式和公共的数字总账,用于记录跨多台计算机的交易,以便在不改变所有后续区块和网络勾结的情况下,记录不能被追溯更改。区块链是维护数字货币交易总账的基础技术。区块链技术的核心是对事务的支持。通过区块链的交易,可以创建、转移、更改、终止数字资产等。
在事务处理中,为了支持复杂的操作,引入了脚本语言。概述了现有加密货币中的脚本语言。这类脚本使用一种非常简单的编程语言,使用堆栈从左到右计算。脚本语言旨在保证所有脚本都将在有限的时间内执行。脚本语言是为了保证比特币相关交易的安全性。它具有以下特点:简单、紧凑、易于理解;没有循环结构;支持多种密码操作;有限的时间和存储开销;非图灵完成。脚本语言简单,不能支持复杂的交易,如投票、投标等活动。引入智能合约,以支持更复杂的交易迫在眉睫。
区块链最有前途的应用之一是智能合约领域。智能合约是一种计算机协议,旨在以数字方式促进、验证或强制合约的协商或执行。智能合约不是法律意义上的合约,它将区块链的效用从简单地保存金融交易条目的记录扩展到自动实现多方协议的条款。它们由计算机网络执行,该网络使用共识协议来商定以代码编写的动作顺序。智能合约背后的代码包含特定的条款,当特定的商定事件触发时,这些条款将被执行。
区块链一方面是表达智能合约的载体,另一方面智能合约实现了区块链上数字资产的转移。从严格意义上讲,智能合约是运行在区块链之上的计算机代码,该区块链包含一组条款,根据这些条款,智能合约的两方或多方同意彼此进行交互。智能合约具有执行更复杂操作的能力,被认为是下一代区块链平台。智能合约将区块链与现实世界连接起来。它像传统合同一样容易被操纵,增加了交易的透明度,同时降低了费用,并减少了因不履行合同而发生冲突的可能性。
智能合约的问题
智能合约,又称自动执行合约,是一组协议双方都有致力于自动执行协议义务的指令,智能合约具有不可变和加密安全的特性,为交易提供了更强的安全性,即提供分布式可靠的计算。然而,现有智能合约的安全机制存在两个缺点:1)数据隐私和2)执行安全。
数据隐私方面,智能合约缺乏加密机制来处理加密的敏感数据。举例来说,标底概算储存在合同中,在开标前将保密,以便与标底概算和其他标书进行比较,可作为“明显异常低的投标”的初步指标。在这种设置中,加密敏感数据并进行比较的加密机制对于自执行合约至关重要。
在执行安全方面,需要一种安全机制来保证智能合约执行的正确性。现有的智能合约是通过脚本语言来保证安全的,这不足以支持复杂合约的实现。此外,在这些合同中,没有必要的安全措施保护参与者的隐私。同时,脚本运行也存在安全风险。例如,Mt. Gox是一家位于东京的在线比特币交易所。然而,2014年,该交易所突然关闭,其所有者随后申请破产黑客从交易所偷走了85万枚比特币(当时约合4.6亿美元)。Mt.Gox的失窃并非毫无根据。主要原因是脚本语言本身存在缺陷。
事实上,一些学者已经注意到了这两个弊端,并提出了一些解决办法。例如:
A. Kosba提出了智能合约的“沙箱”机制,通过将金融交易的特殊加密形式存储在区块链上来保护交易隐私。
I. Miers提出了一种名为“Zerocoin”的比特货币加密扩展,它通过引入零知识证明(ZKP)来扩展交易协议,允许完全匿名的货币交易,从而保证了货币的隐私性。
E. B. Sasson采用数据加密的方法,建立了一个基于分类账的具有隐私保护的数字账户。综上所述,上述工作对数字货币的隐私性进行了有益的探索,但还没有实现从根本上解决了智能合约执行的安全问题。
对应文献
A. Kosba, A. Miller, E. Shi, Z. Wen, and C. Papamanthou,
“Hawk: The blockchain model of cryptography and privacypreserving smart contracts,” in Security and Privacy (SP),
2016 IEEE Symposium on. IEEE, 2016, pp. 839–858.
I. Miers, C. Garman, M. Green, and A. D. Rubin, “Zerocoin:
Anonymous distributed e-cash from bitcoin,” in Security and
Privacy (SP), 2013 IEEE Symposium on. IEEE, 2013, pp.
397–411.
E. B. Sasson, A. Chiesa, C. Garman, M. Green, I. Miers,
E. Tromer, and M. Virza, “Zerocash: Decentralized anonymous payments from bitcoin,” in Security and Privacy (SP),2014 IEEE Symposium on. IEEE, 2014, pp. 459–474.
SMPC需求引入
目的是保证智能合约的参与者在合约执行过程中具有输入的隐私性和抵抗敌人攻击的能力。换句话说,我们希望探索一种新的安全机制来解决以下问题:
- 确保输入隐私:考虑到现有的智能合约系统(如以太坊)不支持数据加密机制,我们的目标是实现合约数据和各方输入的隐私保护。这意味着这些受保护的数据可以执行一些非解密相关的加密操作,如同态或完全同态。
- 确保执行安全:我们的目标是保证契约执行结果的正确性和一致性,即使攻击者破坏了几个参与者。也就是说,根据现有的研究,只有在诚实的参与者占多数的情况下,才能保证攻击者不会影响契约的执行
==> SMPC安全多方计算会是一个很好的解决方案
为了保证用户的隐私和数据安全,用户希望在计算任务中进行协作而不被他人获取。提出了一种基于SMPC的智能合约。智能合约执行系统将智能合约的运行环境配置为SMPC的执行环境。基于SMPC的智能合约执行系统的基础架构如图1所示。该平台由协议层、计算层和组通信层三层组成。这三层对应于区块链上的事务层、数据层和共识层。事务层包括运行时环境支持的详细信息。数据层包含存储在区块链上的数据的结构、内容和操作。共识层负责在系统中的节点之间对存储在区块链上的数据达成协议。
•契约层(Contract Layer): 契约层封装了调度算法、编辑器和智能契约。契约层是实现区块链系统灵活编程和操作数据的基础。
•计算层(Computing Layer):计算层封装SMPC算法和SMPC使用的秘密共享算法。在执行智能合约的计算任务时调用SMPC算法。
•组通信层(Group Communication Layer):组通信层封装了P2P协议、MPI和拜占庭协议。P2P协议强调每个节点的等价性,不存在集中化的特殊节点。数据通信协议和共识算法采用MPI协议和拜占庭协议。
智能合约的整个执行过程是基于区块链网络的。当智能合约进行计算时,调用计算层的SMPC功能,在SMPC功能执行过程中使用非阻塞MPI组通信进行通信。
基于SMPC的智能合约
智能合约是一种可计算的执行合约条款的交易协议。它不是一个简单的、可执行的过程。它包含了程序中的财务和法律属性。因此,智能合约的发展需要金融、法律、科技等多个行业的参与。为了保证智能合约执行的安全性,在智能合约执行过程中引入SMPC。
在图2中,我们基于一个转移智能合约的例子来介绍智能合约的框架。智能合约的执行需要经历四个阶段。
-
初始化:
这个阶段是由代码实现的Init函数。在这个阶段,需要验证支付人和收款人的身份,Dealer收集计算节点,初始化执行环境和数据。
这是一个身份标识阶段,是由代码实现Assert()函数。智能合约使用从secp256kl椭圆曲线派生的公钥来创建地址。通过使用相应的私钥和椭圆曲线数字签名算法,生成签名并证明地址所有权,从而验证了Alice和Bob的身份。然后计算节点的集合,该阶段由代码SelectP participant()函数实现。参与者的id存储在公共存储区域的“机器”文件中。
初始化环境和数据。经销商调用中列出的节点连接" machines "文件,打开每个节点的守护进程,并获取计算节点mpj通信的实际数量。之后,经销商计算阈值t = 2num/3。
当以上三个动作完成后,Dealer通知Alice和Bob进入秘密分享阶段。 -
秘密分享:
这个阶段是由代码实现的分享功能。合同各方将计算的秘密信息分发给计算节点(在秘密重新配置时调用SMPC模型中的SP SharingP rotocol()函数)。对于Alice来说,转账动作是需要支付的,Alice的账户余额AliceV al减去转账金额X。
对于Bob来说,转账操作是为了收钱,Bob的账户余额BobV al加上x。Alice和Bob将对计算值进行加密并秘密共享。当Alice和Bob完成秘密分享,Dealer通知所有的参与者到SMPC。 -
SMPC:
这个阶段是由代码实现的RuningSMP C函数。计算节点调用
SMPC算法,它封装在计算层执行,来完成计算,并将结果发送给经销商。如果小于t,计算节点将重新执行SMPC进程 -
秘密重构: 该阶段由代码重构函数实现。经销商接收所有计算节点的这些结果,并将它们重构为最终结果。需要保证至少t个节点的计算结果被成功收集(调用SMPC模型中的SP ReconstructP rotocol()函数进行秘密重配置)。
智能合约需要中立机构参与其执行的监督。这是更公平的时候
SMPC被引入到智能合约的执行中。中立机构不仅发挥监督作用,还可以参与智能合约的执行。双方的计算任务是一致的,不需要任何特殊的中心节点存在,可以保证智能合约的公平性。
SMPC的执行过程基于MPI通信机制。MPI支持无阻塞通信,满足SMPC中阈值的要求。如图3所示,我们提供了SMPC上加减法的流程图。起初,打开MPI通信和各方守护进程,以便初始化MPI环境。其次,根据秘密共享方案,需要利用MPI中的Scatter函数将秘密的共享信息发送给参与计算的各方。然后,当各方通过MPI无阻塞通信接收到共享后,各方对共享进行共同的加减运算,并将结果发送给重构方。最后,如果某一方利用MPI中的gather函数将另一方的计算结果集合起来,并对其进行重构得到最终结果,则实现秘密重构。
辅助:MPI协议-效率提升
非常重要的是要注意SMPC中多个参与者之间的有效沟通问题。采用MPI通信机制来满足SMPC过程中的通信需求。MPI是一种用于并行计算机编程的通信协议。支持点对点和集体通信。MPI”是一个消息传递的应用程序程序员接口,以及协议和语义规范,用于说明其特性在任何实现中必须如何表现。
表1中列出的功能是系统功能。init()初始化MPI执行环境,在多个MPI进程之间建立连接,并为后续通信做准备;finalize函数的作用是终止MPI执行环境。Size函数返回参与者的数量;Rank函数返回参与者的id。
MPI中的通信功能在表2中。MPI功能主要用于SMPC,包括广播、收集、分发和全交换。我们秘密分发任务,调用Scatter()函数,将生成的共享片段分发给参与者。Bcash函数与Scatter函数的区别在于,在Scatter函数中,根过程传递给不同过程的数据可以是不同的;每一方调用Gather()函数来接收秘密共享,Alltoall()函数的作用是:完成双方之间的信息交换。
根据Yan Zhu .et al的建模分析,证明该结构是能够解决SMPC的效率问题且同时为智能合约建立完善的隐私保护体系。
但是该模型适用于基准的智能合约,且对于网络中恶意节点的追责及公平问题仍然难以保证,因此仍然有改良的区间。如使用区块链保证SMPC的溯源能力,并利用智能合约强调执行力。如参与SMPC之前交付保证金,如果SMPC计算失败或者有未能接收到结算结果的计算参与者,则使用区块链进行往复数据追溯并对对应节点进行罚款(扣保证金),增加数据伪造的风险和难度。为此需要有一个足够体系化的模型来增强该环节。
为补全此环节,需要使用区块链强化SMPC执行力、溯源能力、数据访问效率
,了解访问数据存储的方式,该部分内容将在近日更新。