安全多方计算 MPC:在不泄露数据下联合计算
什么是安全多方计算
安全多方计算(Secure Multi-Party Computation,简称MPC)是一类密码学协议,允许多个参与方在不泄露各自私有输入的前提下,共同计算一个约定好的函数,并获得正确的输出。除最终结果外,任何参与方都无法得知其他方的输入信息。
一个直观的经典例子是“百万富翁问题”:两位富翁想知道谁更富有,但都不愿透露自己的实际资产。借助MPC协议,他们可以仅输出比较结果,而各自的资产数自始至终完全保密。
MPC要解决的核心矛盾是:数据需要联合计算才能产生价值,但数据本身又是敏感且不可外泄的资产。
为什么需要MPC
跨机构数据协作
银行之间想联合训练反洗钱模型,但客户交易记录属于高度敏感数据,不能直接共享。MPC让各银行在不暴露原始记录的情况下,共同完成模型训练。
隐私保护的数据查询
医疗研究机构需要查询多家医院的患者数据库,以统计某种疾病的发病率。MPC保证医院只提供聚合后的统计结果,而不泄露任何单个患者的病历。
安全外包计算
企业或个人拥有数据但缺乏算力,需要将数据加密后发送至云计算服务商进行计算。MPC可以在云端不解密数据的情况下完成计算任务,防止云服务商窥探原始内容。
供应链协同
多家供应商希望共同优化生产和库存策略,但都不愿公开自己的成本、产线利用率等敏感商业信息。MPC允许它们在不泄露各自数据的情况下,共同求解优化模型。
MPC的核心安全模型
参与方角色与敌手假设
- 半诚实模型(Semi-honest):参与方会严格遵循协议执行,但可能试图从自己收到的消息中推导额外信息。这是大多数应用的理论基础,相对容易构建高效协议。
- 恶意模型(Malicious):参与方可能任意偏离协议,尝试窃听、篡改或中止计算。需要使用更复杂的密码学工具(如零知识证明)来保证安全性,计算开销更大。
安全定义
在MPC中,安全性通常通过理想世界/现实世界模拟范式来定义:如果任何敌手在真实协议中的行为都能够被一个在理想世界中只知道自身输入和最终输出的模拟器所“完美复制”,则协议是安全的。这确保了协议执行过程不会泄露任何超出输出所能推断的信息。
主要MPC技术路径
1. 秘密共享(Secret Sharing)
秘密共享是将一个秘密值拆分成若干份额,分发给不同参与方。只有凑齐足够数量的份额才能重构秘密,单独一份份额不包含任何信息。
最常见的方案是Shamir秘密共享和加法秘密共享:
- 加法秘密共享:值
x被拆分为随机份额x₁, x₂, …, xₙ,满足x₁ + x₂ + … + xₙ = x。加法可以直接在份额上逐方相加,乘法则需要交互式协议(如Beaver三元组技术)。 - Shamir秘密共享:基于多项式插值,门限为
t时,任意t个份额可恢复秘密,任意少于t个份额则完全随机。支持更灵活的访问结构,便于构建门限式MPC。
基于秘密共享的MPC协议(如SPDZ系列)擅长算术电路计算,适合高精度加法和乘法密集型任务。
2. 混淆电路(Garbled Circuit)
混淆电路由姚期智提出,将待计算的函数表示为一个布尔电路,然后对电路中的每一条逻辑门进行加密“混淆处理”。一方构建混淆电路并发送给另一方,接收方通过不经意传输获得与自己输入对应的加密标签,逐门计算后得到最终输出标签,再解码出结果。
特点:
- 常数轮交互,通信开销与电路大小成正比。
- 极其适合计算条件判断、比较等逻辑操作。
- 现代优化(如Half-Gate技术、固定密钥AES优化)大幅降低了计算和通信成本。
- 多在2PC(两方计算)场景下使用,可通过扩展框架用于多方。
3. 不经意传输(Oblivious Transfer,OT)
不经意传输是MPC最基本的原语之一。在1-out-of-2 OT中,发送方持有两条消息 m₀, m₁,接收方持有一个选择比特 b;协议结束后,接收方只获得 m_b 而不知道 m_{1-b},发送方则完全不知道 b 是什么。
通过OT扩展技术(如IKNP协议),可以将少量基础OT通过对称密钥运算扩展为大量OT实例,极大降低公钥操作次数,使MPC协议变得实用。
OT在混淆电路中用于安全传输输入标签,在秘密共享方案中用于构建安全乘法,是实现通用MPC不可或缺的模块。
4. 同态加密辅助的MPC
有些MPC方案利用部分同态加密(PHE)或全同态加密(FHE)来减少交互轮数。参与方可以将自己的数据加密后直接发送给计算方,由计算方在密文上直接运算,最后各方协作解密结果。此类方法适用于通信受限或非交互式计算场景,但目前FHE本身的性能瓶颈使得其在大规模MPC中仍较少作为主力。
一个简化的两方MPC示例:安全求和
假设两家公司A和B希望计算双方营收总和,但都不愿向对方透露自己的具体数字。
- A生成一个随机数
r,计算A' = revenue_A + r,将A'发送给B。 - B收到
A',计算S = A' + revenue_B = revenue_A + revenue_B + r,同时生成自己的随机掩码r',将S + r'发回给A。 - A用
r消除盲化:S' = (S + r') - r = revenue_A + revenue_B + r',再将S'发回。 - B用
r'消除盲化,得到最终总和revenue_A + revenue_B,并告诉A。
整个过程中,A和B都只看到对方加上了随机数的值,无法反推出真实营收。此例简单演示了MPC的“隐藏输入、共同计算”思想,但请注意它仅抗半诚实且仅适用于加法,通用MPC需更强的密码学保证。
实际部署中的MPC框架
| 框架 | 核心技术 | 特点 | 适用场景 |
|---|---|---|---|
| SPDZ | 秘密共享、MAC检查 | 主动安全(恶意安全),多方支持,离线/在线阶段分离 | 通用算术运算 |
| ABY³ | 算术/布尔/姚混合电路 | 三服务器模型,高效混合协议转换 | 高吞吐数据分析 |
| Obliv-C | C语言扩展、混淆电路 | 面向开发者的类C编程接口 | 2PC应用程序快速开发 |
| MP-SPDZ | 支持30余种协议 | 学术界最完整的MPC基准平台,涵盖多种安全模型 | 研究、原型验证 |
| SecretFlow | 秘密共享+联邦学习 | 工业级隐私计算框架,结合联邦学习与MPC | 数据协作、AI训练 |
这些框架大多提供高级语言接口,将底层密码学细节抽象为常规的加法/乘法/比较操作,降低了MPC的应用门槛。
性能挑战与优化思路
通信开销
大部分MPC协议需要多轮交互,在广域网下延迟显著。优化手段包括:
- 批量处理:将多个独立运算合并为一轮消息。
- 流水线执行:提前发送非依赖性的数据。
- 拓扑优化:尽量使用星型或树形通信结构,减少全连接开销。
计算瓶颈
非线性操作(如乘法、比较、截断)远比加法昂贵。改善方法:
- 利用混合协议:布尔电路做比较,算术电路做加乘,各自扬长避短。
- 预计算随机材料(如Beaver三元组)在离线阶段生成,在线阶段只做轻量运算。
- 使用硬件加速(AES-NI)加速对称密钥操作,降低混淆电路计算时间。
可用性
直接用密码学原语编程极其困难,目前的发展方向是提供对开发者友好的语言与库,使算法工程师可以用类似NumPy或TensorFlow的代码编写MPC程序,而无需理解底层安全实现。
常见误区与局限
- MPC不等于全同态加密:MPC通常需要多方在线交互,FHE可单方直接对密文计算。二者可协同使用。
- MPC不能阻止恶意输入:即使计算过程安全,如果参与方故意提供虚假数据,输出结果仍是“垃圾进,垃圾出”。需结合输入验证或可信执行环境。
- 没有绝对“零泄露”:最终输出本身会泄露部分信息,需通过差分隐私、安全聚合等方法控制输出信道的泄漏。
- 并非所有任务都适合MPC:如果计算逻辑频繁触碰非线性函数或需要极高吞吐,当前MPC可能难以满足时延要求,需做代价评估。
学习路径建议
- 理解密码学基础:对称加密、哈希函数、公钥密码、Diffie-Hellman密钥交换。
- 掌握秘密共享与不经意传输的原理和简单实现。
- 从具体协议入手,配合开源框架(如MP-SPDZ的简单示例)动手实现安全求和、安全比较等小实验。
- 阅读经典论文:Yao的混淆电路、GMW协议、BGW协议,以及Beaver在乘法三元组上的工作。
- 关注现实部署的系统设计,如Google的Private Join and Compute、各大银行的风控协作案例,理解工程权衡。
安全多方计算正从理论研究快速走向产业落地,是隐私增强技术栈中的关键一环。掌握MPC的基本概念与主要协议,将帮助您在数据合规、跨域协作以及可信AI等领域具备更强的技术视野。