云景小区的 10 栋楼要联合表决“共用快递柜选址”,每栋楼的业主代表手握着两样敏感数据:本楼平均收入、本楼对选址的偏好。谁都不想亮底牌,但又想算出全小区的真实结论。王阿姨提议:每个人把自家数字拆成许多“纸条碎片”分给邻居,谁单独拿到一张纸都拼不出真相,可所有人凑在一起就能算出总账——这就是安全多方计算(MPC)的雏形。 可第一次演练就让人崩溃:一屋子人来回传纸条、反复核对、现场做心算,一下午只算完一栋楼的均值。MPC 能保护隐私,但“跑腿 + 心算”的成本太高。性能优化要做的事情,就是让这场“不交底也联合算账”的仪式变得足够快:少跑腿、少捎带、少心算、提前备表、批量打包、按需选工具。这篇文章就跟着王阿姨的小区故事,把 MPC 性能优化的全局地图铺开给你看。

岗位关联

对 AI 从业者而言,MPC 是打破数据孤岛、满足合规要求的底层能力。读懂性能优化方案,你才能把论文里的协议变成真正能上线的系统,这是从“算法工程师”迈向“隐私计算架构师”的关键一跃。

目录
  1. 可视化演示
  2. 瓶颈分析
  3. 通信优化
  4. 计算优化
  5. 电路优化
  6. 预处理加速
  7. 批处理并行
  8. 混合协议
  9. 工程实践
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示卷积核在图像上滑动计算的过程,逐步演示每个位置的加权求和,理解特征图生成的核心原理。

本节配有交互动效(进入视口后自动加载,约 3KB)。

卷积运算 (0,0) 核位于左上角,计算 3x3 区域的加权求和 output(i,j) = sum(I(i+k,j+l) * K(k,l)) 当前使用拉普拉斯边缘检测核

瓶颈分析

云景小区第一次联合计算,满屋子纸条乱飞。王阿姨盯着表发现:代表们大部分时间不是在算数,而是在等人。有人跑一趟腿,大家就得停下来等消息回来;有人带的纸条太多,楼道口都堵住了;还有几位代表用最笨拙的“密码本”心算,一步要磨蹭半天。她终于明白:慢不是某一个环节,而是三件事叠在一起。

放到 MPC 协议里,这三件事对应三个硬指标:通信轮数(R)、通信量(D)、计算开销(C)。通信轮数是协议中各方交替发消息的往返次数,它决定“干等”多久;通信量是每次交换的数据总量,决定带宽够不够;计算开销是本地密码学操作(尤其是公钥运算)的耗时,决定“心算”多久。

三者中,通信轮数往往最不显眼却最致命。局域网 RTT(往返时延)约 0.1ms,看似毫不起眼,但协议动辄几十上百轮;换到跨地域的广域网,RTT 涨到 50ms 量级,轮数直接决定方案能不能用。通信量在大电路或大批量数据下会成为吞吐量天花板;而公钥操作(如大数模幂)比 AES 对称加密慢 2~3 个数量级,是所有参与方共同的负担。

给王阿姨的总账很简单:先数“往返多少次”,再称“每趟多少斤”,最后算“心算多久”。优化如同下棋,先动哪一环,决定了后面每一步的收益。

T总=R×t轮+D×t带宽+C×t计算\displaystyle T_{\text{总}} = R \times t_{\text{轮}} + D \times t_{\text{带宽}} + C \times t_{\text{计算}}
总耗时 = 轮数 × 每轮往返时间 + 通信量 × 每字节传输时间 + 计算次数 × 单次运算时间,三者叠加构成 MPC 的墙钟时间。
  1. 总耗时构成MPC 完整运行的时间由通信与计算三部分累加,这也是优化的总目标函数。
    T总\displaystyle T_{\text{总}}
  2. 轮数项R 是协议总轮数,乘上每轮网络往返延迟 t_轮,在广域网场景中通常占大头。
    R×t轮\displaystyle R \times t_{\text{轮}}
  3. 通信量项D 是消息总字节数,乘上单位带宽时延 t_带宽,决定带宽是否打满。
    D×t带宽\displaystyle D \times t_{\text{带宽}}
  4. 计算项C 是本地密码学运算次数,t_计算 是单次加密/解密的平均耗时。
    C×t计算\displaystyle C \times t_{\text{计算}}

通信优化

王阿姨的突破口在“跑腿”。她发现每次只传一句话太浪费,于是把话攒起来,一个信封塞五件事;她还发明了“母版 + 复写纸”:先做一张标准问题母版,再用复写纸批量复制,代表们只需填数,不用每次都重新写一遍。跑腿次数从“每事一趟”变成“一趟服务多事”。

这在 MPC 里对应两大方向:减少轮次与压缩消息量。减少轮次靠改动协议结构——GMW 这类秘密分享协议可以将大量独立运算并行到同一轮,使总轮数与电路深度同阶而非与门数量同阶;压缩消息量靠伪随机数生成器(PRG):双方共享一个随机种子,就能在本地重构对方本该传送的随机串,真正要传的只剩“增量信息”。

最亮眼的工具是 OT 扩展(Oblivious Transfer Extension)。不经意传输(OT)是很多 MPC 协议的“跑腿快递”:发送方持有两个消息,接收方只能取走其中一个,且发送方不知道接收方选的是哪一个。做一次真正的 OT 需要公钥操作,非常昂贵;OT 扩展的思想是:先用 κ 个基础 OT(κ 是安全参数,通常 128)建立“母版”,再通过对称哈希批量扩展出 n 个 OT,n 可以是成千上万,而通信成本几乎不再增长。这就是那张神奇的“复写纸”。

复写纸省下的不只是纸张,而是成百上千次“真跑腿”。通信优化的本质,就是把最贵的消息交换换成便宜的本地计算。

OTn=OTκ+n×Hash\displaystyle OT_{n} = OT_{\kappa} + n \times \text{Hash}
扩展后的 n 个不经意传输,代价 ≈ κ 个基础 OT 的通信量,加上 n 次廉价的对称哈希运算。
  1. 批量 OT我们要构造 n 个不经意传输,作为协议各步骤的“快递”。
    OTn\displaystyle OT_{n}
  2. 基础种子只需先做 κ 个昂贵的真实 OT,κ 是安全参数,与最终数量 n 无关。
    OTκ\displaystyle OT_{\kappa}
  3. 扩展开销随后执行 n 次对称哈希,把种子广播开并本地扩展成 n 个 OT,这是廉价操作。
    n×Hash\displaystyle n \times \text{Hash}

计算优化

跑腿问题解决后,王阿姨又发现代表们“心算”太慢。有人提出:别什么东西都用保险柜三重锁,普通汇总用带锁的信盒就够了——反正碎片化传纸条本身已经防偷看,没必要每一步都上最重的密码器械。

MPC 中的对应原则是:能用轻量级原语,就不用重量级原语。公钥加密、大整数模幂这类“保险柜”只在初始化、密钥交换等少数场合使用;协议主体消息的加密、认证、随机化,完全可以用对称加密和哈希完成。

对称加密有多快?在支持 AES-NI 指令集的现代 CPU 上,AES 单次操作为纳秒级;而 RSA 私钥操作是大数模幂,耗时在毫秒级,两者相差千倍以上。伪随机数生成器(PRG)进一步把“传随机数”变成“传种子”:双方共享种子,就能各自生成相同的随机流,通信量直接减到只剩种子本身。再加上 SIMD 向量化指令和批量模约减,一条指令同时处理多个数据单元,把批量运算摊薄到极致。

王阿姨恍然大悟:锁不一定要全用保险柜,合适的地方用普通锁,整场跑下来能省大半天。计算优化的精髓,是让每一份密码学资源都花在真正必要的地方。

t对称≪t公钥\displaystyle t_{\text{对称}} \ll t_{\text{公钥}}
对称加密的耗时远小于公钥加密耗时。在 MPC 中,凡是能把公钥原语替换成对称原语的地方,都能获得数量级收益。
  1. 对称加密耗时AES 等对称算法在硬件指令加持下单次仅需纳秒级时间。
    t对称\displaystyle t_{\text{对称}}
  2. 公钥加密耗时RSA/ECC 的大数模幂运算是毫秒级,两者差距达千倍。
    t公钥\displaystyle t_{\text{公钥}}
  3. 远小于关系MPC 优化中要持续寻找“可替换的公钥点”,将其降级为对称操作。
    ≪\displaystyle \ll

电路优化

统计公式像菜谱,步骤越多,后厨出菜越慢。王阿姨把计算目标摊成一张“步骤图”,发现有些合并动作(比如把两张纸条拼在一起)完全不用跑腿,真正费时的是“乘法”这种需要交叉验证的操作。于是她开始精简菜谱:把要跑腿的步骤减到最少,把步骤链条压到最短。

在 MPC 中,计算要先被编译成电路:布尔电路由 AND/XOR 门组成,适合比较、位运算;算术电路由 ADD/MUL 门组成,适合数值计算。电路深度决定协议至少要来回多少轮,乘法门数量决定总通信量有多大。理解这一点,就抓住了电路优化的牛鼻子。

经典的 Free XOR 技巧让所有 XOR 门的通信量为零:各方在本地对自己的秘密碎片做异或即可,不需要任何消息交换。真正昂贵的是 AND 门和 MUL 门——它们要求参与方交互。于是优化目标变得极其清晰:减少乘法门数量、压低关键路径深度、把可以在本地免费做的操作(XOR/ADD)与必须交互的操作(AND/MUL)区分对待。

省掉跑腿的步骤越多,后厨出菜越快。电路优化就像给菜谱动手术:不是追求“步骤多好看”,而是把最贵的乘法步骤一个个剪掉,同时把链条压短。

CfreeXOR=0\displaystyle C_{\text{freeXOR}} = 0
Free XOR 门在秘密分享结构中不需要任何通信,因为各方只需对自己持有的碎片做本地异或。
  1. XOR 门通信量某一种门在协议中被摊派的交互消息量。
    CfreeXOR\displaystyle C_{\text{freeXOR}}
  2. 零通信Free XOR 技巧中,异或门完全在参与方本地完成,跑腿次数归零。
    0\displaystyle 0

预处理加速

王阿姨发现,现场做“速算表”太耗时,于是改成:提前一周在家把空白表格填好,开会时大家只当众核对几个关键数。MPC 同样把协议拆成两个相位:离线(预处理)阶段和在线阶段。离线阶段做重活,在线阶段轻装上阵。

最经典的预处理产物是 Beaver 三元组:离线随机生成三元组 $(a, b, c)$,满足 $c = a \times b$,并分别以秘密分享的形式存放在参与方手中。这三份随机数与真实业务数据完全无关,只是在线阶段的“速算表空白格子”。

要秘密相乘两个数 x 和 y 时,在线阶段先各自打开掩码差值 $\epsilon = x - a$ 和 $\delta = y - b$。因为 a、b 是随机数,公开差值不会泄露 x、y 的任何信息;随后所有人用本地速算表重组成乘积。整个在线过程只需一轮公开差值,所有重计算都被移到了离线阶段——这就是“提前备表”的秘密。

得到公开差值后,所有参与方在本地按公式重组乘积的秘密分享值:

会议现场从“现场推导九九乘法表”变成“翻开提前备好的速算表填数”,这就是预处理带来的恐怖加速。生产级 MPC 中,离线阶段往往在业务低谷期预热完成,在线阶段只负责“对表”。

ϵ=x−a,δ=y−b\displaystyle \epsilon = x - a, \quad \delta = y - b
重组公式 = 预生成的乘积分享 + 三个修正项。整个过程不需要任何交互式乘法,在线只需一次广播。
  1. 基础项$[c]$ 是离线三元组中已经算好的乘积分享,直接可用。
    [c]\displaystyle [c]
  2. 修正项$\epsilon[b]$ 与 $\delta[a]$ 是乘上公开差值的线性修正,完全本地计算。
    ϵ[b]+δ[a]\displaystyle \epsilon[b] + \delta[a]
  3. 常数项$\epsilon\delta$ 是公开常数,直接叠加到结果上,无任何秘密信息。
    ϵδ\displaystyle \epsilon\delta

批处理并行

王阿姨把 10 栋楼的纸条塞进同一个大信封,一次投递处理完所有楼栋;又安排代表们像食堂流水线一样,第一栋算完立刻传给第二栋,不必等全小区同时开工。于是整场统计从“一人一份慢递”变成“整车发货 + 流水线接力”。

批处理将多条数据打包进一次协议执行:批量 OT、批量三元组生成、批量一致性校验,把“每份都要跑一次”的成本摊薄为“一次跑动服务 n 份”。数据并行更进一步:把 n 个数编码进一个大代数表达式,一次模乘完成 n 次乘法;CPU 的 SIMD 向量化指令在此处同样适用。

流水线(Pipeline)把电路按深浅分层,每一层算完立即进入下一层。此时通信与计算相互重叠——第一层在网络上传输时,第二层已经在本地计算,总耗时不再是“各层时间之和”,而是逼近“最深一层 + 层数 × 单层网络往返”的压缩形态。但并行不是万能的:Amdahl 定律告诉我们,串行部分是加速的天花板。

把“一个一个寄”改成“一包一包寄 + 流水线接力”,王阿姨的统计从半天缩到一炷香。批处理与并行的本质,是让每一轮通信和每一次计算都同时服务尽可能多的数据。

S=1(1−p)+p/N\displaystyle S = \frac{1}{(1-p) + p/N}
加速比 = 1 /(串行占比 + 并行占比 / 并行度)。可并行比例越高、并行度越大,加速越明显,但串行部分永不消失。
  1. 加速比并行化后相对串行的整体提速倍数。
    S\displaystyle S
  2. 串行占比$1-p$ 是只能顺序执行的部分,它决定了加速的上限。
    1−p\displaystyle 1-p
  3. 并行摊薄$p/N$ 表示可并行部分被 N 个处理单元分摊后的耗时。
    pN\displaystyle \frac{p}{N}

混合协议

不同楼栋情况不同:网络条件差的楼希望少跑腿,数据敏感的楼必须上保险箱。王阿姨不再用“一套方案走天下”,而是按需混搭——普通投票用普通信封,敏感预算用保险柜。这叫工程上的“看菜下饭”。

MPC 世界里存在多种协议“交通工具”:秘密分享类协议(如 GMW)计算轻、通信轮数多,适合局域网内的大量数值运算;Yao 混淆电路轮数少但电路规模膨胀,适合高延迟广域网下的两方计算;同态加密计算重但轮数接近常数,适合“一次运算、多次复用”的场景。没有绝对最优,只有对场景最优。

混合协议就是将一个任务拆成多段,分别选择最合身的原语:数值运算走秘密分享,比较逻辑走布尔电路,层与层之间用小小的转换协议衔接。此外,安全级别也可分级:半诚实模型假设各方遵守协议但会偷看中间结果,协议开销低;恶意模型要防主动篡改、证明每一步行为正确,开销陡增数倍到数十倍。实际部署中,机构间有合同约束的场景常选择半诚实 + 事后审计,把性能预算用在该用的地方。

混搭的精髓,就是用便宜的锁锁普通抽屉、用保险柜守最贵重的数字。安全级别不是越高越好,而是恰好够用。

min⁡选型(α⋅C通信+β⋅C计算)\displaystyle \min_{\text{选型}} \left( \alpha \cdot C_{\text{通信}} + \beta \cdot C_{\text{计算}} \right)
协议选型 = 在所有候选方案中寻找通信成本与计算成本的加权和最小值,α 和 β 由实际网络与算力环境决定。
  1. 最小化目标在所有协议候选里挑总成本最小的方案,而不是死守一种协议。
    min⁡\displaystyle \min
  2. 通信成本$C_{\text{通信}}$ 是该方案的通信量,用权重 α 折算成统一成本单位。
    α⋅C通信\displaystyle \alpha \cdot C_{\text{通信}}
  3. 计算成本$C_{\text{计算}}$ 是本地计算开销,权重 β 决定它跟通信如何“比价”。
    β⋅C计算\displaystyle \beta \cdot C_{\text{计算}}

工程实践

故事来到最后一公里:路修得再好,车排班乱了也快不了。王阿姨给跑腿小组配了对讲机、排了双班,把“等跑完才出发”改成“边跑边发下一单”。真正的性能差距,往往就藏在这些排班细节里。

工程实践是让协议在真实网络上跑快的落地技能,包括四个层次:网络适配——为高 RTT 场景压缩交互频率,为高带宽场景优化单轮消息量;并发架构——连接池复用 TCP 连接,双通道收发避免队头阻塞,多线程并行处理多路消息;延迟隐藏——本地计算的同时发起网络请求,让 CPU 与网络互不空等;参数调优——批大小、流水线深度、线程数、重传阈值,都需要按实际网络压测后确定。

生产级框架(如 EMP-Toolkit、SPDZ 等)把这些能力封装成开关,但理解底层原理才懂得怎么拨开关。一个典型的在线阶段,若通信与计算能完全重叠,等待时间就从“两者之和”降为“两者取大”。

方案再漂亮,也要靠这些排班细节落地。王阿姨的快递柜统计终于在一个上午内顺利出数——性能优化的终点,永远是工程系统里的每一毫秒。

T在线=max⁡(T通信,T计算)\displaystyle T_{\text{在线}} = \max(T_{\text{通信}}, T_{\text{计算}})
当通信与计算通过流水线和异步架构重叠时,在线总耗时由较慢的一方决定,而不是两者相加。
  1. 在线总耗时协议真正“干活”阶段的墙钟等待时间。
    T在线\displaystyle T_{\text{在线}}
  2. 通信耗时网络传输与消息往返占用的时间。
    T通信\displaystyle T_{\text{通信}}
  3. 计算耗时本地密码学与协议运算时间;重叠后二者并行执行。
    T计算\displaystyle T_{\text{计算}}

AI 应用场景

场景一:金融反欺诈联合黑名单碰撞

阶段:数据融合与特征工程

解决的问题:多家银行各自持有诈骗账号黑名单,直接合并违反数据隐私与《个人信息保护法》。传统做法是上传给第三方中心机构,既慢又泄露数据。基于 MPC 的安全求交协议,各方在密文分片下完成黑名单交集统计,只输出命中数,不暴露各自名单。

具体案例:某支付机构联合三家发卡行,采用带 OT 扩展的秘密分享协议做黑名单碰撞比对。优化前,逐条加密比对需要 2 小时;使用批量 OT 扩展后将通信轮数压缩近一半,结合离线预处理与批处理并行,任务缩短到 20 分钟,且任何一方都无法推断其他银行的名单内容。

场景二:医疗多中心联合特征统计

阶段:训练数据准备与特征标准化

解决的问题:AI 药企需要多家医院的病理特征做均值、方差、协方差统计,但患者数据不能出医院。传统做法是各医院导出明文再汇总,合规风险高、流程周期长。MPC 的 Beaver 三元组预处理让各中心只需交换掩码差值即可完成统计。

具体案例:某 AI 药企联合三家三甲医院,用带预处理的秘密分享协议计算多中心数据的均值与协方差矩阵。离线阶段在业务低峰期预先批量生成三元组,在线阶段仅需两轮通信完成均值统计,整体耗时从过去数天的“审批 + 汇总”缩短为 3 小时。

场景三:广告跨域人群覆盖统计

阶段:投放后效果归因

解决的问题:广告主想统计“看过 A 平台广告的用户中,有多少也是 B 平台活跃用户”,但两个平台都不能交出用户 ID。利用混合协议,低敏感数据走秘密分享、高敏感匹配走 OT,兼顾性能与隐私。

具体案例:某广告代理商联合两个流量平台,使用混合协议完成人群覆盖去重统计。方案根据网络环境选择了“Yao 混淆电路做 ID 匹配 + 秘密分享做数值聚合”的混合编排,单次统计从原来的小时级降到分钟级,同时通过了第三方隐私审计。

Python 演示

python60 行
# -*- coding: utf-8 -*-"""安全多方计算性能优化演示: Beaver三元组预处理 + 批量乘法对比"""import randomimport time  def secret_share(value, parties=2):    """把一个数字拆成 parties 份随机碎片, 求和还原原值."""    shares = [random.randint(-1000, 1000) for _ in range(parties)]    shares[-1] = value - sum(shares[:-1])    return shares  def reconstruct(shares):    """恢复秘密: 求所有碎片之和."""    return sum(shares)  class BeaverTriple:    """预生成三元组 (a, b, c), 满足 c = a * b."""     def __init__(self):        self.a = random.randint(-1000, 1000)        self.b = random.randint(-1000, 1000)        self.c = self.a * self.b  def mpc_multiply(x, y, triple):    """利用三元组完成秘密分享乘法: 在线只需交换两个掩码差值."""    e = x - triple.a          # 打开掩码差值, 不泄露 x    d = y - triple.b          # 打开掩码差值, 不泄露 y    return triple.c + e * triple.b + d * triple.a + e * d  def run_demo():    n = 20000    xs = [random.randint(1, 100) for _ in range(n)]    ys = [random.randint(1, 100) for _ in range(n)]     # 离线阶段: 批量生产三元组, 重活都在这    t0 = time.perf_counter()    triples = [BeaverTriple() for _ in range(n)]    offline_cost = time.perf_counter() - t0     # 在线阶段: 套用速算表, 只做轻量加减乘    t0 = time.perf_counter()    results = [mpc_multiply(x, y, t) for x, y, t in zip(xs, ys, triples)]    online_cost = time.perf_counter() - t0     plain = [a * b for a, b in zip(xs, ys)]    ok = all(abs(r - p) < 1e-6 for r, p in zip(results, plain))    print("批量乘法个数: %d" % n)    print("离线预处理耗时: %.4f 秒" % offline_cost)    print("在线计算耗时: %.4f 秒" % online_cost)    print("在线/离线耗时比: %.2f" % (online_cost / offline_cost))    print("结果验证通过: %s" % ok)  if __name__ == "__main__":    run_demo()
目的:用随机整数模拟秘密分享下的批量乘法,直观展示 Beaver 三元组预处理把“重计算”移到离线阶段后,在线阶段只需轻量加减乘的加速效果。
  1. shares[-1] = value - sum(shares[:-1])最后一片补齐差值,保证所有碎片相加恰好还原原值,这是秘密分享的“撕纸条”核心。
  2. triples = [BeaverTriple() for _ in range(n)]离线批量生产 n 个“速算表”(三元组),属于预处理阶段的重活。
  3. e = x - triple.a` / `d = y - triple.b在线阶段只打开掩码差值,a 与 b 是随机数,所以不会泄露 x 与 y。
  4. return triple.c + e * triple.b + d * triple.a + e * d本地重组乘积,全程无交互式乘法,这是 Beaver 预处理的加速精髓。
  5. online_cost = time.perf_counter() - t0单独统计在线阶段耗时,对比离线耗时即可看到“重活前置”的效果。

常见误区

误区MPC 的原理是加密计算,那瓶颈肯定在 CPU。我把服务器升级成顶配 CPU,加解密快几倍,整体不就快几倍了吗?

正解MPC 的第一瓶颈往往是通信轮数与通信量,而不是本地 CPU。跨地域环境一次 RTT 约 50ms,协议跑 100 轮就是 5 秒,哪怕本地计算全免费也慢。真实优化顺序是:先压轮次、再压消息量、最后才优化本地计算。

为何常见:因为大家对“加密慢”有直觉,却忽略了 MPC 是分布式系统,网络往返才是隐藏的时间黑洞。

误区预处理不是要先生成一堆三元组吗?那真实数据不就被额外复制了一份吗?环节越多泄露风险越大。

正解Beaver 三元组里的 a、b 是与业务无关的随机数,c 是随机数之间的乘积关系,全程不接触任何真实数据。它只是在线阶段的“速算表空白格子”,哪怕全部公开也推不出任何业务信息。

为何常见:名字里带“预处理”就容易让人误以为它处理的是业务数据,混淆了随机掩码与真实数据。

误区XOR 门不要钱,那我把电路里所有能写的逻辑都改成 XOR 门,通信不就归零了吗?

正解决定 MPC 通信天花板的是乘法门(AND/MUL)数量与电路深度,XOR 只在秘密分享中天然免费。硬把乘法逻辑拆成 XOR 会徒增门数与深度,反而更慢。电路优化是剪乘法门、压深度,而不是堆 XOR。

为何常见:只看到“免费”二字,忽略了真正昂贵的是需要交互的乘法门,优化对象搞错了。

误区恶意安全听起来最保险,新闻里天天说“恶意攻击”,生产部署必须默认开恶意安全模型,否则就是不专业。

正解恶意安全模型的开销是半诚实的数倍到数十倍。机构之间的合作通常有合同、审计与法律约束,半诚实 + 数据校验 + 事后再审计在大量真实场景中已经足够。安全级别应与信任模型、合规要求匹配,而不是无脑堆最高配置。

为何常见:把“安全”简单理解为“模型越强越好”,忽略了安全等级与性能之间的经济学权衡。

面试题

Q1. 安全多方计算(MPC)在实际系统中的第一性能瓶颈通常是?

单选题 · easy

  • A.CPU 主频太低
  • B.内存容量偏小
  • C.通信轮数与通信量← 正确答案
  • D.磁盘读写太慢

答案:C。MPC 是分布式协议,网络往返与消息体积才是主角。CPU、内存、磁盘只是本地资源,轮数和通信量在跨地域场景下动辄产生秒级延迟,因此优化应优先从通信入手。

Q2. OT 扩展(OT Extension)的核心思想是?

单选题 · mid

  • A.使用更多公钥加密
  • B.少量基础OT加对称扩展← 正确答案
  • C.彻底去掉OT协议
  • D.把OT全移到离线端

答案:B。OT 扩展先用 κ 个昂贵的真实 OT 建立“母版”,再用对称哈希批量扩展出 n 个 OT。它改变的是 OT 的生成方式,而不是把 OT 移除或简单搬个位置。

Q3. Beaver 三元组主要用于加速哪个阶段?

单选题 · easy

  • A.输入随机化阶段
  • B.在线乘法阶段← 正确答案
  • C.输出重构阶段
  • D.网络传输阶段

答案:B。Beaver 三元组是离线生成的速算表,在线乘法阶段用它把交互式乘法替换为“公开掩码差值 + 本地重组”,这是预处理加速的核心价值。

Q4. 以下哪些属于 MPC 性能优化的有效方向?

多选题 · mid

  • A.减少通信轮次数← 正确答案
  • B.增大安全参数κ
  • C.离线预处理提速← 正确答案
  • D.批处理并行计算← 正确答案

答案:ACD。减少轮次直接削减网络往返,预处理把重活前置,批处理让一次通信服务多份数据。增大安全参数 κ 只会让协议更慢、更安全,不是性能优化方向。

Q5. Free XOR 门的核心特点是?

单选题 · easy

  • A.加密操作完全免费
  • B.通信开销为零← 正确答案
  • C.无需任何安全假设
  • D.只能用于算术电路

答案:B。Free XOR 技巧让异或门在参与方本地对碎片运算,不需要交换任何消息。计算上仍有开销,但通信量严格为零。

Q6. 关于 Amdahl 定律,下列说法正确的有?

多选题 · hard

  • A.可并行比例提高则加速上限增大← 正确答案
  • B.无限并行时加速比趋于极限← 正确答案
  • C.串行部分不影响加速比
  • D.并行度增加必线性加速

答案:AB。Amdahl 定律指出加速比 = 1 /(串行占比 + 并行占比/并行度),串行部分决定极限,所以 A、B 正确。串行占比越大加速上限越低,C 错误;并行度增加收益递减而非线性,D 错误。

Q7. GMW 协议相比 Yao 混淆电路的主要特点是?

单选题 · mid

  • A.轮数较多但计算轻量← 正确答案
  • B.完全不进行通信
  • C.仅支持两方参与
  • D.不需要秘密分享

答案:A。GMW 基于秘密分享,计算操作轻量但需要多轮交互;Yao 混淆电路轮数少但电路构造与求值开销大。了解两者差异是混合协议选型的基础。

Q8. 恶意安全模型相比半诚实模型,在实际部署中的开销通常是?

单选题 · hard

  • A.与半诚实无明显差异
  • B.完全取决于网络
  • C.通常比半诚实更低
  • D.高数倍至数十倍← 正确答案

答案:D。恶意安全需要防篡改证明、一致性检查等额外机制,通信与计算开销都会陡增。实际部署中需要结合信任模型选择安全级别,而不是默认全开。

Q9. 使用 Beaver 三元组后,在线乘法阶段的主要通信代价是?

单选题 · mid

  • A.公开两个掩码差值← 正确答案
  • B.传输全部密文向量
  • C.不需要任何通信
  • D.执行一轮公钥加密

答案:A。在线阶段双方打开 ε 与 δ 两个差值并广播,由于 a、b 是随机掩码,公开差值不泄露真实数据;后续重组全部在本地完成,无需更多交互。

Q10. 下列属于 MPC 工程实践有效手段的有?

多选题 · easy

  • A.批量打包压缩消息← 正确答案
  • B.单线程串行处理
  • C.通信计算相重叠← 正确答案
  • D.连接池双通道并发← 正确答案

答案:ACD。批量打包降低小包开销,通信与计算重叠隐藏延迟,连接池双通道提升并发吞吐。单线程串行会放大延迟,是典型的反面做法。