5.1 从布尔到算术:SPDZ 的预处理与在线


5.1 从布尔到算术:SPDZ 的预处理与在线

本节摘要:SPDZ 把数值以加法分享放在模 2 的 k 次方环上(工业常用 k 等于 64 或 128),加法零通信、乘法用 Beaver 三元组;全部贵重材料由离线预处理阶段批量生产,在线阶段只做掩码开放。本节给出两阶段分工、一次乘法的完整账单与定点数表示。

核心概念

布尔路线算 32 位乘法要展开成电路,SPDZ 只需把它当一个环元素处理——这就是算术化的红利。数据表示上,各方输入先定点化(浮点转定点,缩放因子常取 2 的 18 次方量级),再以加法分享散到各方手里,环宽 k 取 64 时一个数就是一份 64 位份额。加法与数乘:零通信,各方本地对自己那份份额运算即可(2.1 节的结论在环上原样成立)。

乘法走 2.3 节的 Beaver 代换式,但 SPDZ 的工程价值在于把它流水线化:预处理阶段批量生产三元组(用同态加密、多方郑币或专用"可信 dealer"模式,各家实现不同),在线阶段每扇"乘法门"消耗一个三元组、开放两个环元素。64 位环下每个开放值 8 字节,每次乘法的在线通信量 16 字节——对比布尔路线每比特都要门的粒度,粗粒度算术的带宽优势就是数量级的。局域网里现代实现每秒能推进百万级乘法,这是 SPDZ 系成为生产主力最硬的理由。

图:SPDZ 预处理与在线两阶段模型

图:SPDZ 预处理与在线两阶段模型

动手演练:两层前向网络的份额推理

K = 1 << 64 # 环宽 64 位 SCALE = 1 << 18 # 定点缩放因子 def share(x): from secrets import randbits s = randbits(64) return s, (x - s) % K def open_sum(sh): # 全体广播份额求和 return sum(sh) % K # 输入 x=3.5 定点化后分享 x = int(3.5 * SCALE) xs = list(share(x)) # 权重 w=2.0 直接以公开常数乘(数乘免费,无需三元组) ws = [(SCALE * s) % K for s in xs] assert open_sum(ws) == (x * SCALE) % K # 乘 x*w 需要三元组:此处用明文模拟 a b c 的角色 a, b = 123456789, 987654321 c = (a * b) % K as_, bs, cs = share(a), share(b), share(c) e = (open_sum(xs) - a) % K d = (open_sum(bs) - b) % K z_shares = [ (cs[0] + e*bs[0] + d*as_[0] + e*d) % K, (cs[1] + e*bs[1] + d*as_[1]) % K ] z = open_sum(z_shares) print(z / SCALE / SCALE == 3.5 * 2.0) # True 7.0

会话输出 True:明文 3.5 乘 2.0 等于 7,全程没有一方见过 3.5 或 2.0 的明文(权重以公开常数参与是简化,私密权重则双方都走分享)。

工程实践要点

环还是域? 模 2 的 k 次方环配机器整数运算零成本,但环上做不了 Shamir 插值与部分校验;素数域功能全但要大数运算。MP-SPDZ 两者都实现,按任务切换——纯加乘统计任务用环,要内积校验或恶意安全的轻量变体常用域。截断(truncation)是定点算术的隐形税:每层乘法后缩放因子翻倍,需要概率截断把小数点拉回来,每次截断又是一轮通信,账要算进总预算。预处理吞吐是部署期最常见的瓶颈:在线每秒百万乘法的引擎,若三元组供给只有每秒十万,实际速率就是十万。

⚠️ 常见坑:把在线"快"当成整体"快"。基准测试只测在线阶段是 SPDZ 生态的老毛病——评估一个方案请让预处理从冷启动跑起,或确认预处理可离线预热且库存充足。

本节要点:算术分享让乘法从电路级降为环元素级;两阶段分工是 SPDZ 的经济学;定点化与截断是算术化的配套成本。下一节处理"有人改消息怎么办"。

预处理三条生产线的选型演算

5.1 节提过造料有三条生产线,这里把选型演算补全。同态加密造料:通信量极小(各方只传密文),但每个三元组的计算要跑同态运算,单条毫秒级——适合带宽窄、CPU 富余的场景,典型如分支机构经专线参与。多方郑币造料:不引入任何额外信任角色,纯交互生成,局域网里每条几十微秒——适合机房内高速互联的三方或多方部署,安全上最干净。可信 dealer 造料:一条微秒级甚至预先生成囤货,但 dealer 知道全部三元组,安全模型变成"dealer 与任何参与方不合谋"——很多商业化联邦平台默认这个模式,好处是部署轻,代价是信任假设要写进合同。

三个参数帮助决策:带宽单价、算力单价、能否接受额外信任方。把这三个数填进成本式,答案通常是唯一确定的。没有绝对最优的生产线,只有与部署环境匹配的生产线——这句话同样适用于后续所有工程选型。

定点数的一课:表示误差也是安全问题

浮点在环上没有直接语义,定点化是标准动作,但它带来一类容易被忽略的泄露:定点数的舍入行为可能泄露数量级信息。例如截断时进位的概率依赖数值的小数部分,统计大量截断行为可以推断数据的分布特征。成熟的实现用概率舍入(按比例随机决定进位)抹平这类信号,代价是每次截断多消耗一枚随机数份额。把"表示层的随机性也算安全预算"这条记下,它属于那种"不踩不知道"的坑。

两阶段思想的普适性

SPDZ 的两阶段结构值得单独表彰,因为它早已溢出 MPC 边界,成为密码工程的通用范式。把它抽象成一句话:把与数据无关的贵重计算挪到离线,把在线压缩成只与数据相关的轻量动作。你在本教程里已经第三次遇到它——混淆电路的"预生成标签与门表"是它(3.2 节),BMR 的"预处理生产混淆材料"是它(4.2 节),这里的三元组流水线还是它。视野再放宽,TLS 证书预签名、支付系统的风控规则预编译,都是同一范式在不同行业的落点。

这个范式的适用判据也值得抄录:任务可离线部分与在线部分解耦(离线材料不依赖具体输入)、离线产物可囤积(三元组、门表)、在线动作可预测(每次消耗量恒定)。三条件齐备的任务,都值得先画一张两阶段图再动手——这条经验适用于你未来的每一个性能优化项目,无论它是否与密码学有关。

回望本章开头的判断:SPDZ 系是当前生产环境的主力协议家族。支撑这个判断的其实不是任何单项技术,正是这套"预处理经济学"——它把 MPC 从"学术演示能跑"改造成了"工程账算得平"。经济学-first 的设计观,是 SPDZ 家族留给整个领域的最大遗产。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U