最后更新:
多方计算 (MPC) 是一种加密方法,允许参与方在不泄露除规定输出以外的任何信息的情况下,对私有输入共同计算一个函数。[1][2]
通过分散计算而不是将秘密集中在一个地方,MPC 可以减少对可能暴露完整输入或完整加密密钥的单一参与方或设备的依赖。[1]
MPC 的理论发展可以追溯到 1982 年,当时通过“百万富翁问题”正式引入了安全两方计算;以及 1986 年,姚期智(Andrew Yao)将该框架扩展到更通用的可行计算。[2] MPC 于 2016 年进入数字资产领域,成为机构钱包基础设施中使用的一种技术。[2]
长期以来,MPC 被认为在理论上功能强大,但对于常规使用而言过于昂贵。协议设计、网络假设、预处理、专用子协议、硬件性能和工程方面的进步使其在更多场景中变得实用。[1] 由于网络轮次、交互模式和昂贵的密码学操作可能主导本地计算,实际系统通常会减少轮次、将工作移至预处理,或针对签名和集合交集等任务使用专门协议。[1] 一些部署通过牺牲鲁棒性来换取更低的延迟,并使用特定任务的协议,而不是通用的安全计算系统。[1]
MPC 的安全性通常使用理想/现实模拟范式进行分析。在理想模型中,一个受信任的功能接收参与者的私有输入,计算请求的函数,并返回规定的输出;当对手在现实执行中的视图并不比其在理想过程中的视图包含更多信息时,交互协议被认为是安全的。[1]
这种保证是有局限性的。MPC 无法防止输出中固有的信息泄露,例如匹配结果或针对小群体计算的平均值,并且它通常无法确定参与者是否提供了真实或格式良好的输入。[1] 需要经过身份验证或范围受限输入的应用程序可以添加签名、承诺、零知识证明或系统级控制等检查。[1] 安全证明也不一定能确保协议完成:参与者可能会停滞或中止,即使结果没有交付给所有人,隐私性和正确性仍然可以成立。[1]
这些保证取决于对手模型。半诚实参与者遵守协议,但试图从其转录本中推断额外信息;恶意参与者可能会偏离协议、发送格式错误的消息或不一致的份额,或者有策略地中止。[1] 防御恶意行为通常需要额外的轮次、证明、检查和通信,而隐蔽安全模型旨在通过提供检测作弊的机会来威慑作弊行为。[1]
在静态腐败模型中,对手在执行前选择要腐败的各方;在自适应模型中,它可以在执行期间腐败各方。[1] 主动系统定期刷新份额,以便攻击者必须在有限的时间窗口内攻破足够多的参与者,而不是无限期地积累攻破成果。[1] 容忍的腐败参与者数量、同步假设和其他阈值会影响隐私性、正确性、公平性和保证输出交付的哪些组合可以实现。[1] 公平性意味着一个参与者不能在阻止其他参与者获得输出的同时自己获得输出。[1]
MPC 计算可以表示为加法、乘法、比较或布尔门等操作组成的电路。参与者逐门评估电路,使用受保护的中间值,而不是暴露底层输入。[1] 原则上,任意多项式时间函数都可以进行安全计算,尽管效率和可实现的保证因设置而异。[1]
秘密共享协议和两方混淆电路是 MPC 的主要方法。[1] 与 Yao 的工作相关的混淆电路允许一名参与者以加密形式对电路进行编码,供另一名参与者评估,而无需了解隐藏的线路值。[1] MPC 协议使用编码的中间状态——包括份额、加密、掩码值和承诺——以及旨在保持隐私和正确性的转换。[1] 组合定理和通用可组合性提供了在协议组合或嵌入大型系统时分析安全性的正式方法。[1]
秘密共享是 MPC 的常用构建模块,但仅分发秘密本身并不能对隐藏输入进行任意计算。[1] 在 Shamir 秘密共享中,秘密是有限域上随机多项式的常数项,每个参与者接收该多项式在不同非零点处的评估值。[1] 足够大的授权集合可以重构多项式并恢复秘密,而在标准模型中,较小的集合则无法了解任何信息。[1]
例如,在 2-of-3 方案中,分发者选择一条随机直线 (q(x)=s+a x),并将该直线在 1、2 和 3 处的值分发给三名参与者。任意两个值都可以确定该直线并恢复 (s=q(0)),而单个份额则与每个可能的秘密都兼容。[1] 各方通常可以在本地相加兼容的份额以获得和的份额;乘法则更为困难,因为它增加了共享的代数复杂度。[1]
可验证秘密共享 (VSS) 允许接收者在不泄露秘密的情况下,检查份额相对于公共承诺是否有效。[1] 分布式密钥生成 (DKG) 允许参与者共同生成共享秘密或私钥,而无需单个分发者知道完整值。[1] 这些技术可以揭示不一致或恶意的设置,但其实际保证取决于实现;在某些 Pedersen DKG 实现中披露的拒绝服务问题就是由于缺少验证造成的。[1]
门限密码学是多方计算(MPC)的一种专门应用,包括门限签名、解密、密钥生成和分片刷新。[1] 在门限签名中,参与者持有签名密钥的分片,并在不将完整私钥重构于一处的情况下共同计算出有效的签名。只要有足够数量的有效贡献,就能生成一个普通的签名,该签名可通过相应的公钥进行验证。[1]
FROST 是一种由密码学论坛研究小组(CFRG)标准化的两轮 Schnorr 门限签名协议;通过预处理,它可以实现单轮签名。[1] 它允许达到门限数量的参与者在保持签名密钥分散状态的同时生成 Schnorr 签名。[1] FROST 的效率相对较高,但除非有外部机制提供排除或重试功能,否则故障参与者可能会导致拒绝服务。[1]
门限 ECDSA 的实现更为困难,因为 ECDSA 的代数结构不如 Schnorr 那样容易适应 MPC。[1] 实际协议包括可以容忍恶意对手(即使在非诚实大多数情况下)的无分发者(dealerless)设计,但这些设计需要额外的机制。[1] 鲁棒的或无分发者的 ECDSA 可能需要四轮或更多轮的预签名以及广泛的检查,这对实现提出了很高的要求。[1] 分布式密钥生成的实现在未能验证参数、证明或承诺结构时,也曾出现过漏洞。[1]
数字资产钱包使用私钥来授权交易,因此对密钥的控制决定了对相关资产的控制。[2] 在基于 MPC 的托管安排中,钱包的私钥作为独立的分片分布在多个端点之间,完整的密钥不会在任何一个地方汇聚。[2] 参与者可以通过分布式计算共同计算钱包的公钥并生成交易签名,而无需任何端点获知完整的私钥。[2]
Fireblocks 将密钥分片描述为在云服务器、本地硬件或移动设备等端点之间生成并随机化。在其描述的签名流程中,至少由三个端点组成的法定人数根据组织策略规则独立验证交易并贡献签名分片;随后通过分布式计算生成完整的签名。[2] Fireblocks 表示,可以在不更改钱包区块链地址的情况下刷新或轮换分片,并且组织可以在不中断链上活动的情况下添加或删除授权设备以及更改法定人数配置。[2]
基于 MPC 的门限签名被桥、钱包和交易所使用,以避免单方面资产控制以及因单一操作员受损而导致的完整签名密钥泄露。[1] Cube Exchange 描述的一个示例使用了 2-of-3 门限签名方案进行去中心化结算:用户、Cube Exchange 和一个独立的守护者网络(Guardian Network)各持有一个密钥分片,授权结算需要其中任何两个分片。[1]
Fireblocks 将其 MPC-CMP 描述为一种旨在提高 GG18 行业标准速度、灵活性和操作安全性的协议。[2] 该公司表示,MPC-CMP 在一轮通信中即可完成签名,而 GG18 需要九轮,Lindell 等人需要八轮,Doerner 等人需要六轮,并声称其速度比标准 MPC 快达八倍。[2] Fireblocks 表示该协议支持热存储、温存储和冷存储,包括至少有一个分片保存在离线隔离设备中的配置;它还表示冷签名可以在没有物理接触或对每笔交易进行人工干预的情况下执行。[2] 该公司表示,MPC-CMP 根据有限的开源许可证发布,定期由独立审计师审查,并已在 Intel SGX 和 AWS Nitro 安全飞地(enclaves)中实现。[2]
Fireblocks 将其更广泛的安全架构描述为将 MPC-CMP 与可信执行环境(TEEs)、策略引擎(Policy Engine)和 Fireblocks 网络相结合。[2] 它表示密钥分片、策略逻辑和 API 凭据在硬件隔离的环境中存储和执行,包括 Intel SGX、AWS Nitro 和 GCP 机密空间(Confidential Spaces),旨在防止即使攻击者获得了服务器的操作系统级访问权限也无法提取飞地内存。[2] 其策略引擎应用涵盖来源、目的地、资产类型和金额阈值的交易规则,并实现职责分离;Fireblocks 表示规则由管理员法定人数签名并在 SGX 内部强制执行。[2] 该公司还表示,其网络可自动进行存款地址身份验证,以减少复制粘贴错误和地址替换攻击。[2]
Fireblocks 表示,它为机构提供托管技术以运营其自身的托管解决方案,客户控制密钥分片,且 Fireblocks 不持有其资产或代表其转移资金。[2] 这与由第三方控制客户私钥的托管钱包不同,尽管托管钱包也可以使用 MPC。[2] Fireblocks 认为,由企业控制密钥的 MPC 钱包符合直接托管模式,因为监管机构关注的是谁控制私钥,而非所使用的加密技术。[2] 该公司还报告称,其参与了一个跨行业联盟,并向美国国家标准与技术研究院(NIST)提交了一份联名信,敦促对基于 MPC 的阈值签名方案进行正式标准化。[2]
MPC 与同态加密在信任和计算的分配方式上有所不同。同态加密允许对密文进行计算,通常由一方持有解密密钥,而 MPC 则将计算和信任分布在多个参与者之间。[1] 这两种方法也可以结合使用:同态加密可以应用于 MPC 内部,而 MPC 可以为同态方案分配解密或密钥管理。[1]
秘密共享是许多 MPC 协议的组成部分;MPC 增加了对受保护输入进行计算、验证协议行为以及重构输出的程序。[1] MPC 钱包也不同于多重签名钱包。多重签名授权是通过多个独立的私钥在链上强制执行的,其支持程度因区块链和具体实现而异。[2] 相比之下,MPC 签名在交易广播之前,由密钥分片持有者在链下完成。[2] Fireblocks 表示,这允许在不更改钱包地址的情况下更改法定人数,避免了链上多重签名的开销,并且可以在使用 ECDSA 或 EdDSA 的不同链上使用统一的实现。[2]
除了数字资产托管,MPC 还支持跨敏感数据集的隐私保护统计和协作数据处理。[1] 在每种情况下,计算都可以在不预先将所有私有输入汇集到一处的情况下产生共同结果。[1]
MPC 减少了向单一参与者暴露完整机密的必要性,但它并不能消除所有的操作或实现风险。参与者可能会中止或停滞协议,即使在签名密钥受到保护的情况下也会导致活性故障(liveness failure);因此,实际安全性取决于协议的假设、实现以及底层数学原理。[1] 一些实际构建依赖于密码学硬度假设,包括用于 Schnorr 和 FROST 的离散对数假设,以及某些 ECDSA 协议中与因子分解或 Paillier 相关的假设。[1]