🤝 多方安全计算 (MPC)

N 方各自持有私有输入,协同计算函数而不泄露输入。
从百万富翁问题到联邦学习——"计算可见,数据不可见"。

🎯 核心思想

多方安全计算(Secure Multi-Party Computation, MPC / SMPC)是密码学的一个子领域,目标是在多方各自持有私有数据的情况下,协同计算一个公共函数的输出,同时确保任何一方都无法获知他人的输入。

🔑 一句话定义:给定 N 个参与者 p₁, p₂, ..., pₙ,各有私有输入 d₁, d₂, ..., dₙ,他们要计算公共函数 F(d₁, d₂, ..., dₙ),但任何一方只能学到输出和自己输入所蕴含的信息——不多不少。

与传统的加密通信不同,传统密码学保护的是"传输中的数据"(防止窃听者),而 MPC 保护的是"计算中的数据"——防止参与者之间互相窥探。

两个核心保证

🔒 输入隐私 (Input Privacy)

协议执行过程中的所有消息,不能推断出任何参与者的私有数据。唯一可推断的信息,是从输出本身就能推出的那些。

密码学保证

✅ 正确性 (Correctness)

任何恶意参与者的子集合谋偏离协议,都不能迫使诚实参与者得到错误结果。要么得到正确输出,要么检测到作弊而终止。

鲁棒或中止

理想世界 vs 现实世界

MPC 安全性基于Real/Ideal 世界范式

🌟 理想世界

存在一个绝对可信的第三方 Tony。每个人把输入私密地交给 Tony,Tony 独立计算 F,再把输出发回。在理想世界里,参与者之间不交换任何消息——隐私天然得到保证。

⚙️ 现实世界

没有可信第三方。参与者只能互相发消息来达成计算。如果现实世界协议中,参与者能学到的信息不超过理想世界中能学到的,那这个协议就是安全的。

这给了我们一个强大的抽象:如果你的应用在理想世界是安全的,那用安全 MPC 替换掉理想第三方后,应用依然安全。

💰 百万富翁问题 (Yao's Millionaires' Problem)

1982 年,姚期智(Andrew Yao)提出了这个经典问题,开启了安全多方计算的整个领域:

问题:两个百万富翁 Alice 和 Bob 想知道谁更富有,但都不想透露自己的净资产。如何在不泄露具体数值的情况下比较大小?

数学上就是安全计算比较函数 F(x, y) = x > y,其中 x 是 Alice 的财富,y 是 Bob 的财富。

简化版方案:用随机掩码实现比较

🎮 交互演示:两方安全比较

输入两方的私有值,协议将只揭示比较结果,不泄露具体数值。

Yao 在 1986 年将此推广到了任意函数的安全两方计算——这就是著名的混淆电路(Garbled Circuit)协议。随后 Goldreich、Micali、Wigderson 将其推广到多方情况(GMW 范式)。

🧩 秘密共享 (Secret Sharing)

秘密共享是大多数 MPC 协议的基石。核心思想:把一个秘密拆成 N 份"碎片",任意 t 份可以重建,少于 t 份则毫无信息。

Shamir 秘密共享

由 Adi Shamir 于 1979 年提出,基于多项式插值。一个 (t, n) 门限方案:

🎮 交互演示:Shamir 秘密共享 (2,3) 门限

输入一个秘密值,生成 3 份份额,验证 2 份可重建、1 份不可。

加法秘密共享 (Additive Secret Sharing)

更简单但在 MPC 中同样广泛使用:

两种方案对比

特性Shamir 秘密共享加法秘密共享
门限灵活 (t, n),t < n/2固定 (n, n),需全部份额
被动安全t < n/2t < n
主动安全t < n/3t < n (配合 MAC)
信息论安全
乘法运算需通信 (BGW 协议)需通信 (Beaver 三元组)
加法运算本地执行 ✅本地执行 ✅
代表协议BGW, Shamir-ATLASSPDZ, MASCOT
扩展性ATLAS 比 plain Shamir 扩展更好Temi/Hemi 比 Semi 扩展更好

⚡ 混淆电路 (Garbled Circuit)

Yao 在 1986 年提出,是安全两方计算 (2PC) 的核心技术。核心思想:把计算函数表示为布尔电路,然后"加密"每个逻辑门,使得求值方只能得到输出而不能推断输入。

工作原理

1️⃣
电路构造方
(Garbler)
2️⃣
为每根线分配
两个随机标签
3️⃣
加密真值表
(Garbled Table)
4️⃣
求值方
(Evaluator)
5️⃣
通过 OT 获取
输入标签
6️⃣
逐门解密
得到输出

AND 门混淆示例

原始真值表:                    混淆后的真值表:
  A  B | Out                    A         B       | Enc(Out)
 ────────────                  ─────────────────────────────────
  0  0 |  0                    lbl_A₀  lbl_B₀   | Enc(lbl_Out₀)
  0  1 |  0                    lbl_A₀  lbl_B₁   | Enc(lbl_Out₀)
  1  0 |  0                    lbl_A₁  lbl_B₀   | Enc(lbl_Out₀)
  1  1 |  1                    lbl_A₁  lbl_B₁   | Enc(lbl_Out₁)

# lbl_X₀ = 随机字符串, 代表线 X 取值 0
# lbl_X₁ = 随机字符串, 代表线 X 取值 1
# Evaluator 只有正确的标签才能解密对应行
# 无法从标签推断对应的是 0 还是 1

不经意传输 (Oblivious Transfer, OT)

混淆电路的关键辅助协议。Sender 有两个值 m₀、m₁,Receiver 选择 b ∈ {0,1}:

OT 被证明是2PC 的完备原语——任何安全两方计算都可以用 OT 来实现。

关键优化技术

🆓 Free XOR

XOR 门的求值完全不需要通信——只需本地异或标签。这使得 XOR 密集型电路(如 AES)极大加速。

0 通信开销

📉 Garbled Row Reduction

将混淆表的行数从 4 减少到 3(再进一步到 2),减少 25%-50% 的通信量。

通信优化

✂️ Cut-and-Choose

对抗恶意敌手:发送多个混淆电路副本,随机打开一半检查一致性,未打开的用于计算。多数投票输出。

恶意安全

🛡️ 安全模型

MPC 协议的安全性取决于敌手模型。不同的敌手能力对应不同级别的安全保证。

敌手行为分类

😇 半诚实 (Semi-Honest / Passive)

腐败方遵守协议,但尝试从接收到的消息推断他人输入。协议防止意外信息泄露。实际场景:合作方之间的隐私保护。

最弱安全最高效率

😈 恶意 (Malicious / Active)

腐败方可以任意偏离协议——发送错误消息、拒绝参与、提前终止。协议必须保证:要么诚实方得到正确输出,要么检测到作弊而终止。

最强安全效率代价

🕵️ 隐蔽 (Covert)

敌手愿意作弊,但不想被抓到。协议提供概率检测(如 75%-90% 的作弊发现概率)。声誉风险让敌手不敢作弊。

中间地带

腐败方数量与安全

腐败模型Shamir 秘密共享加法秘密共享混淆电路
被动,t < n/2✅ 信息论安全
被动,t < n✅ 信息论安全
主动,t < n/3✅ 信息论安全
主动,t < n (不诚实多数)✅ + MAC (SPDZ)✅ + Cut-and-Choose
2PC,t=1 of 2✅ Yao's GC
⚡ 效率 vs 安全权衡:半诚实协议比恶意安全协议快 10-100 倍。实际中,先用半诚实协议验证功能正确性,再升级到恶意安全。Covert 安全是实用折中。

📋 协议家族全景

MPC 协议按底层技术分为三大类,再按安全模型和计算域进一步细分。

三大技术路线

🔢 秘密共享路线

各方持有份额,通过交互协议在份额上做运算。加法本地执行,乘法需通信。

代表:SPDZ, BGW, GMW, Rep3, Shamir-ATLAS

优势:多方场景更高效,可扩展到大量参与方

劣势:通信轮数与计算深度成正比

多方主流

⚡ 混淆电路路线

一方构造混淆布尔电路,另一方求值。轮数恒定(与函数无关)。

代表:Yao's GC, BMR (多方扩展)

优势:通信轮数常量,低延迟

劣势:整数计算昂贵(需转布尔电路),主要适用于 2PC

2PC低轮次

🔐 同态加密路线

利用部分同态加密 (Paillier) 或全同态加密在密文上直接计算。

代表:MASCOT (用 HE 做预处理), SPDZ-HE 变体

优势:通信量少

劣势:需要批量才高效,计算开销大

少通信

MP-SPDZ 框架协议矩阵

MP-SPDZ 是目前最全面的 MPC 基准测试框架,由 Data61 (CSIRO) 的 Marcel Keller 开发,支持以下所有协议变体:

安全模型模素数 / GF(2ⁿ)模 2ᵏ二进制秘密共享混淆电路
恶意,不诚实多数MASCOT / LowGear / HighGearSPDZ2kTiny / TinierBMR
隐蔽,不诚实多数CowGear / ChaiGearN/AN/AN/A
半诚实,不诚实多数Semi / Hemi / Temi / SohoSemi2kSemiBinYao's GC / BMR
恶意,诚实多数Shamir / Rep3 / PS / SY / Rep4Brain / Rep3 / PS / SY / Rep4Rep3 / CCD / PS / Rep4BMR
半诚实,诚实多数Shamir / ATLAS / Rep3Rep3 / Astra / TrioRep3 / CCDBMR
💡 选择建议:3 方诚实多数 → Rep3/SY 最快;2 方恶意安全 → Yao's GC + Cut-and-Choose;N 方恶意 → SPDZ (MASCOT);大量参与方 → ATLAS/Shamir。

Beaver 三元组:乘法的魔法

在秘密共享方案中,加法是"免费的"(本地执行),但乘法需要通信。Beaver 三元组是乘法的预处理技巧:

# 预处理阶段(离线完成,与实际输入无关)
# 生成三元组 (a, b, c) 其中 c = a * b,各方持有份额

# 在线阶段:计算 [x] * [y]
# 1. 各方公开 d = x - a 和 e = y - b
# 2. z = c + d*b + e*a + d*e  (仅用加法和公开值)
# 3. [z] = [x*y]  — 只用了一轮通信!

# 关键:三元组在离线阶段预生成,在线阶段乘法变成一轮通信
# SPDZ 协议的核心:用同态加密在离线阶段高效生成 Beaver 三元组

🤖 MPC 在 AI 中的应用

MPC 不是学术玩具——它在 AI/ML 领域有大量实际应用场景,核心诉求是"计算可见,数据不可见"

四大应用场景

🧠 隐私推理

模型所有者和数据所有者不同。数据方不想暴露原始数据,模型方不想暴露模型权重。MPC 让双方在加密状态下完成推理。

案例:医疗影像诊断——医院数据不出院,AI 公司模型不泄露。

模型隐藏数据隐藏

🎓 隐私训练

多机构协同训练模型,各方的训练数据不离开本地。MPC 保证只共享梯度更新,不泄露原始数据。

案例:多银行联合训练反欺诈模型,各银行客户数据不互通。

联邦学习

📊 隐私数据分析

在不看到原始数据的情况下,对多方数据做聚合统计、机器学习、数据挖掘。

案例:竞争对手联合分析市场趋势,各方销售额不互知。

数据协作

🔑 阈值密钥管理

将密钥拆分给多方持有,必须 N/M 方同意才能使用密钥。防止单点泄露。

案例:MPC 钱包(加密货币)、根证书私钥管理。

密钥安全

MPC 推理神经网络:性能参考

以下数据来自 TF Encrypted 的 ABY3 三方协议基准测试(LAN 40Gbps, RTT 0.02ms;WAN 352Mbps, RTT 40ms):

模型建图 (秒)LAN 推理 (秒)WAN 推理 (秒)
VGG19105.1849.63139.63
ResNet50150.4719.0784.29
DenseNet121344.5533.53151.43

数据来源:tf-encrypted GitHub 仓库基准测试。ResNet50 在 LAN 下 19 秒是已知最快的三方安全推理实现之一。

MPC 训练 MNIST:性能参考

模型架构优化器精度 (5 epochs)LAN 每批 (秒)WAN 每批 (秒)
A (小 MLP)SGD96.5-96.7%0.098-0.1674.5-9.7
B (中 MLP)Adam98.8%0.772-5.73321.1-98.1
C (大 MLP)Adam99.0-99.1%2.825-9.89365.3-195.0
逻辑回归SGD84.8%0.0100.844

数据来源:TF Encrypted vs MP-SPDZ 对比基准测试。模型 C 在 WAN 下每批 65-195 秒,说明 MPC 训练大规模网络仍有显著开销。

🏫 联邦学习中的 MPC

联邦学习 (Federated Learning) 让多方在不共享原始数据的情况下协同训练模型。但标准联邦学习有一个关键弱点:梯度更新可能泄露训练数据信息(梯度反转攻击)。

MPC 如何加固联邦学习

1️⃣
各方本地
计算梯度
2️⃣
秘密共享
梯度更新
3️⃣
MPC 安全
聚合梯度
4️⃣
仅公开
聚合结果
5️⃣
更新全局
模型参数

安全聚合 (Secure Aggregation)

最简单也最实用的 MPC+FL 组合:各方用秘密共享将梯度发给聚合服务器,服务器只能看到聚合结果,看不到任何单方梯度。

# 简化的安全聚合协议
# N 个客户端 C₁, C₂, ..., Cₙ 各有梯度 gᵢ
# 目标:服务器只学到 Σgᵢ,不知道任何 gᵢ

# Step 1: 每个客户端 Cᵢ 生成随机掩码
for each pair (i, j), i < j:
    seed_ij = PRG(seed_ij)  # 预共享的随机种子
    C_i adds +seed_ij to g_i
    C_j adds -seed_ij to g_j
    # 掩码在聚合时相互抵消

# Step 2: 各方发送被掩码的梯度
C_i → Server: g_i + Σ_j mask_ij

# Step 3: 服务器聚合
result = Σᵢ (g_i + masks) = Σᵢ g_i  # 掩码全部抵消!

# 关键:即使服务器与 t < n/2 方合谋,
# 也无法推断诚实方的梯度(被随机掩码保护)

MPC vs 同态加密 vs 差分隐私:联邦学习的三种隐私保护

维度MPC同态加密 (HE)差分隐私 (DP)
隐私保证数学精确(无信息泄露)数学精确统计近似(可控泄露)
计算开销10-100x100-10000x1.1-2x
通信开销高(多轮交互)低(1-2 轮)无额外通信
模型精度影响有(噪声降低精度)
参与方要求需多方在线1 方可独立计算
信任假设诚实多数密钥持有者可信可信聚合方
最佳场景安全聚合、阈值签名云端密文计算统计发布、数据共享
🧪 实际最佳实践:MPC + DP 组合。MPC 保证计算过程无泄露,DP 在输出端加噪声防止从结果反推。两者互补,达到"过程安全+输出安全"。

🤝 多 Agent 协作中的 MPC

随着 AI Agent 系统越来越复杂,多 Agent 协作涉及敏感信息交互。MPC 为 Agent 之间的隐私协作提供了密码学基础。

关键场景

🔐 Agent 间数据协作

Agent A 持有用户行为数据,Agent B 持有风险模型。MPC 让 A 和 B 协作计算风险评分,A 不暴露行为数据,B 不暴露模型。

隐私计算

🗝️ 阈值工具调用

高权限工具(如删除数据库、转账)需要 N/M 个 Agent 共同授权。MPC 实现阈值签名——必须足够多 Agent 同意才能执行。

权限控制

🏛️ 去中心化 Agent 决策

一组 Agent 需要投票决策(如是否执行某操作),但各 Agent 的投票需要保密。MPC 安全投票协议确保仅公布结果。

投票隐私

📊 跨组织 Agent 协作

不同组织的 Agent 协作完成跨域任务(如跨银行反洗钱),MPC 确保各方数据不离开各自安全域。

数据不出域

MPC 在 Agent 架构中的位置

┌─────────────────────────────────────────────────┐
│                 Agent 协作层                      │
│  ┌─────────┐  MPC 安全通道  ┌─────────┐         │
│  │ Agent A │◄──────────────►│ Agent B │         │
│  │ (数据方) │   秘密共享      │ (模型方) │         │
│  └────┬────┘   Beaver 三元组 └────┬────┘         │
│       │                          │               │
│       ▼                          ▼               │
│  ┌─────────────────────────────────────┐        │
│  │         MPC 计算引擎                  │        │
│  │  · 安全推理 (Garbled Circuit / SS)   │        │
│  │  · 安全聚合 (Secret Sharing)          │        │
│  │  · 阈值签名 (t-of-n)                 │        │
│  └─────────────────────────────────────┘        │
│       │                          │               │
│       ▼                          ▼               │
│  ┌─────────┐              ┌─────────┐           │
│  │ 工具调用 │              │ 工具调用 │           │
│  │ (需授权) │              │ (需授权) │           │
│  └─────────┘              └─────────┘           │
└─────────────────────────────────────────────────┘

🛠️ MPC 工具库 & 框架

🔧 MP-SPDZ

最全面的 MPC 基准框架,支持几乎所有主流协议变体。由 Data61 (CSIRO) 开发,2020 年 CCS 论文。

支持:秘密共享 / HE / 混淆电路,恶意/半诚实,诚实/不诚实多数。

语言:C++ + Python(高层编程),GitHub 1.2K+ stars

研究首选协议最全

🐍 MPyC

纯 Python 的 MPC 库,无依赖,基于 Shamir 秘密共享。由 Berry Schoenmakers 开发。

支持:被动安全、诚实多数 (t < m/2)。有丰富的 Jupyter notebook 示例。

GitHubpip install mpyc

入门友好教育

🔥 CrypTen

Meta (Facebook) 的隐私 ML 框架,基于 PyTorch。CrypTensor 用起来就像普通 Tensor。

支持:3PC 诚实多数、算术/二进制秘密共享。支持 GPU 加速。

GitHub 1.3K+ stars

PyTorch 生态ML-first

🔒 TF Encrypted

TensorFlow 的隐私计算框架,Keras API 风格。支持训练和推理。

支持:ABY3 三方协议、HE。ResNet50 LAN 推理 19 秒。

GitHub 1.1K+ stars

TF 生态训练+推理

⚡ SecretFlow

蚂蚁集团开源的隐私计算框架,支持 MPC + HE + TEE 混合。中文文档友好。

支持:SS, OT, HE。生产级别,有完整的数据分析流水线。

GitHub 2.5K+ stars

生产级中文友好

🌐 Rosetta

矩阵源的隐私 AI 框架,在 TensorFlow 上封装 MPC 后端,API 与原生 TF 完全一致。

支持:2PC/3PC/4PC 多种配置。零代码改造(理论上的)。

GitHub 800+ stars

TF 兼容低改造

MPyC 入门示例:百万富翁问题

# pip install mpyc
# 运行: python millionaire.py

from mpyc.runtime import mpc

mpc.run(mpc.start())  # 启动 MPC 运行时

# 各方的秘密输入(只有自己知道)
my_wealth = mpc.input(mpc.SecInt()(42))  # Alice 输入 42

# 安全比较:x > y
result = mpc.run(mpc.output(my_wealth > other_wealth))

print(f"我更富有吗? {result}")
mpc.run(mpc.shutdown())

# 运行方式(模拟 3 方):
# python millionaire.py -M3 -I0 &  # Party 0
# python millionaire.py -M3 -I1 &  # Party 1
# python millionaire.py -M3 -I2    # Party 2

CrypTen 入门示例:加密推理

# pip install crypten
import torch
import crypten

crypten.init()

# 加载预训练模型
model = torch.load("model.pth")
private_model = crypten.load_from_party("model.pth", src=0)

# 加密输入数据
x = torch.tensor([1.0, 2.0, 3.0])
x_enc = crypten.cryptensor(x)  # 加密

# 加密推理——全程不暴露数据和模型
with torch.no_grad():
    output_enc = private_model(x_enc)

# 解密输出(需要各方同意)
output = output_enc.get_plain_text()
print(f"推理结果: {output}")

🌍 真实案例

2008 — 丹麦甜菜拍卖
第一个大规模 MPC 实际应用。丹麦糖 beet 农民和加工商用 MPC 实现电子双重拍卖,确定市场出清价格。1200+ 农民参与,各方报价保密,仅公布成交价。证明 MPC 不仅是理论。
2015 — Boston Women's Workforce Council
波士顿妇女工作委员会用 MPC 分析性别薪酬差距。多家公司提交加密薪资数据,MPC 聚合计算各行业性别薪酬差。任何公司的原始数据不泄露给他人。社会影响驱动的隐私计算。
2018 — Google 联邦学习 + 安全聚合
Google 在 Android Gboard 键盘中部署联邦学习,使用安全聚合技术。数百万设备上传加密梯度更新,服务器只看到聚合结果。是最大规模的 MPC 实际部署之一。
2020 — MPC Alliance 成立
多家 MPC 公司(包括 Partisia、Inpher、Duality 等)成立 MPC Alliance,目标"加速 MPC 技术的认知、接受和采用"。
2022-2023 — MPC 钱包爆发
Fireblocks、ZenGo、Coinbase 等加密货币钱包采用 MPC 阈值签名技术。私钥被拆分到多方,单方泄露不会导致资产丢失。Fireblocks 在 2023 年估值达 80 亿美元。
2025 — Partisia 日本学生 ID 系统
Partisia(联合创始人 Ivan Damgård 是 MPC 领域先驱)与日本 Toppan 和冲绳科学技术研究所合作,使用面部识别 + 去中心化标识符 + MPC 构建符合 eIDAS 2.0 标准的隐私保护学生 ID 系统。MPC 在不解密的情况下匹配生物特征数据。
2024-2025 — 中国隐私计算平台
蚂蚁集团 SecretFlow、华控清交、数牍科技等在中国金融和政务领域部署 MPC 平台。应用包括:银行联合反欺诈、跨机构信用评估、医保数据协作。中国《数据安全法》和《个人信息保护法》推动需求。
🔑 趋势观察:MPC 正在从学术走向生产。三大驱动力:
① 数据合规法规(GDPR、《个人信息保护法》)要求"数据不出域"
② AI 对训练数据的需求 + 数据孤岛现实 → MPC 成为合规数据协作的技术方案
③ 加密货币普及推动 MPC 阈值签名成为标准安全实践

📊 MPC vs 其他隐私计算技术

维度MPC全同态加密 (FHE)可信执行环境 (TEE)差分隐私 (DP)
隐私保证密码学精确保证密码学精确保证硬件保证(SGX漏洞频出)统计近似
计算开销10-100x1000-10000x1.05-1.5x1.1-2x
通信开销高(多轮交互)低(1-2 轮)无额外
参与方要求多方同时在线单方可计算单方可计算
信任假设诚实多数 (t < n/2)密钥持有者可信硬件厂商可信聚合方可信
输出精度精确精确(有噪声编码)精确有噪声
成熟度生产可用(特定场景)研究为主生产可用生产可用
量子安全部分协议信息论安全依赖格密码可量子安全依赖具体实现与量子无关
典型场景安全聚合、阈值签名、联合分析云端密文搜索、ML 推理密钥保护、安全计算统计发布、数据共享
🧪 实际最佳实践:混合架构。
  • MPC + TEE:TEE 做快速计算,MPC 做验证和审计 → 兼顾效率和可验证性
  • MPC + HE:HE 做单方密文计算,MPC 做多方交互运算 → 减少通信轮次
  • MPC + DP:MPC 保证过程安全,DP 保证输出安全 → 纵深防御

何时选择 MPC?

✅ 选 MPC 的场景

  • 多方数据协作,无可信第三方
  • 需要精确计算结果(不加噪声)
  • 参与方可以同时在线交互
  • 阈值签名、密钥管理
  • 安全投票、安全拍卖
  • 合规要求数据"可用不可见"

❌ 不选 MPC 的场景

  • 参与方无法同时在线(→ 用 HE)
  • 通信带宽极度受限(→ 用 HE 或 TEE)
  • 可以接受近似结果(→ 用 DP 更高效)
  • 单方数据计算(→ 用 FHE)
  • 可以信任硬件厂商(→ 用 TEE 更快)
  • 实时性要求极高(→ MPC 延迟可能是瓶颈)

📐 数学直觉

为什么秘密共享是安全的?

信息论安全:少于门限 t 份份额在数学上等价于随机数。对于 Shamir 的 (t, n) 方案:

乘法的通信必要性

加法可以本地执行:[x+y] = [x] + [y](份额相加即可)。
但乘法不行:[x·y] ≠ [x]·[y](份额相乘会泄露交叉项信息)。

# 加法秘密共享下的乘法问题
# x = x₁ + x₂ + x₃  (mod p)
# y = y₁ + y₂ + y₃  (mod p)
#
# x · y = (x₁ + x₂ + x₃)(y₁ + y₂ + y₃)
#       = x₁y₁ + x₁y₂ + x₁y₃ + x₂y₁ + x₂y₂ + x₂y₃ + x₃y₁ + x₃y₂ + x₃y₃
#
# 本地只能算 xᵢyᵢ,交叉项 xᵢyⱼ (i≠j) 需要通信
# Beaver 三元组的魔法:预生成 (a,b,c=a·b) 的共享,
# 将在线乘法降为一轮通信 + 本地加法

SPDZ 的 MAC 检查:抵抗恶意敌手

在加法秘密共享中,恶意敌手可以篡改自己的份额。SPDZ 的解决方案:

🚀 性能优化策略

MPC 的性能瓶颈主要在通信。以下是实际项目中的优化策略:

📦 批量处理 (Batching)

将多个独立计算打包到一次通信轮次中。HE-based 的 SPDZ 预处理需要批量生成 Beaver 三元组才高效。批大小 10000+ 时效率提升 10-100x。

最重要

⚡ 预处理 (Offline/Online 分离)

Beaver 三元组、OT 扩展等可以在不知道输入的情况下预生成。在线阶段只做轻量操作。适合"可以等待但计算时需快速"的场景。

延迟优化

🔧 混合电路 (Arithmetic-Binary 混合)

整数运算用算术电路(模素数/2ᵏ),比较运算用二进制电路。通过 edaBits(转换共享)在两种表示间切换。MP-SPDZ 支持自动混合。

精度-效率平衡

🌐 网络拓扑优化

星形拓扑(通过一个聚合方)减少连接数但增加延迟。全连接拓扑延迟低但通信量 O(n²)。少量参与方 → 全连接;大量参与方 → 星形 + 层次聚合。

通信优化

🎮 GPU 加速

CrypGPU、CrypTen 支持在 GPU 上运行 MPC 运算。AES 电路求值从 2.7 秒降到 0.3 秒(降低安全到 Covert)。GPU 并行化适合矩阵运算密集的 ML 推理。

硬件加速

📐 模型架构优化

为 MPC 定制神经网络:用 ReLU 替代 Sigmoid(比较更便宜)、减少全连接层维度、用量化到低精度(int8 代替 float32)。Crypto-Oriented Neural Architecture。

ML 适配

✅ MPC 实操清单

从零到生产,MPC 项目需要考虑什么?

🟢 选择阶段

🟡 原型阶段

🔴 生产阶段

⚠️ 常见坑:
  • 安全模型降级:生产中用半诚实协议但文档宣称"密码学安全"——半诚实假设在对抗场景下不成立
  • 实现 bug:MPC 协议的代码比普通加密更复杂,实现 bug 可能完全破坏安全性。用经过审计的库
  • 通信瓶颈:WAN 下 MPC 可能比 LAN 慢 10-50 倍。在 LAN 原型验证后务必在 WAN 下测试
  • 预处理瓶颈:Beaver 三元组生成可能是瓶颈。离线阶段的时间可能远超在线阶段

📜 发展历程

1979
Shamir 提出秘密共享方案——MPC 的基础构件之一
1982
姚期智提出百万富翁问题——MPC 的起源。同时提出不经意传输 (OT)
1986
Yao 提出混淆电路 (Garbled Circuit)——安全两方计算的通用方案
1987-1988
Goldreich-Micali-Wigderson (GMW) 将安全计算推广到多方。Ben-Or-Goldwasser-Wigderson 和 Chaum-Crépeau-Damgård 独立证明:任意函数都可以安全计算(信息论安全,诚实多数)
1991
Beaver 提出三元组技术——将 MPC 乘法分为离线/在线阶段
2004
Fairplay 系统——第一个实用的混淆电路编译器和运行时
2008
丹麦甜菜拍卖——MPC 的首次大规模实际应用
2012
SPDZ 协议(Damas et al.)——恶意安全的高效 MPC,成为工业标准
2013-2014
Free XOR、Garbled Row Reduction、Half Gates 等混淆电路优化大幅提升 2PC 效率
2018-2019
CrypTen (Facebook)、TF Encrypted 等隐私 ML 框架发布——MPC 与 ML 深度结合
2020
MP-SPDZ 框架发布 (CCS 2020),统一几乎所有 MPC 协议变体。MPC Alliance 成立。
2022-2025
MPC 钱包 (Fireblocks) 爆发,中国隐私计算平台 (SecretFlow 等) 落地。Partisia 在日本部署 eIDAS 2.0 合规的身份系统。MPC 从研究走向生产。