2.3 分享上的运算:Beaver 三元组登场


2.3 分享上的运算:Beaver 三元组登场

本节摘要:乘法是秘密分享算术的坎:两片份额相乘会掉进"二次份额"的世界。Beaver 三元组用一组预先分好的乘法关系 (a, b, c=a·b) 做掩码,把乘法降回线性运算,代价是开放两个被掩码的值。本节推导代换式、算一遍具体数字、算清通信账。

核心概念

回忆加法分享:秘密 x 被拆成 x1 加 x2。现在想算 z = x·y。各方把本地份额相乘得到 x1·y1 加 x2·y2——问题来了,完整乘积展开是 (x1+x2)(y1+y2) = x1y1 + x1y2 + x2y1 + x2y2,本地相乘只拿到自己那两项,x1y2 和 x2y1 这两个交叉项分别散落在对方手里。直接交换份额当然能算,但那等于把秘密明文交出去。乘法难,难在交叉项。

Beaver 1991 年的办法是请一位"隐形助手"。预处理阶段,协议(或可信的预处理服务)生成随机三元组:随机数 a、b,以及 c = a·b,全部以加法分享的形式分发:各方拿到 a_i、b_i、c_i。到了在线阶段要算 x·y 时,各方先在本地算两个掩码差值并开放它们:

e = (x - a) 的公开值 d = (y - b) 的公开值

因为 a、b 是均匀随机数,e 和 d 在统计上与 x、y 无关——开放它们不泄露输入。接着所有人利用公开的 e、d 在份额上做线性运算:

z 的份额 = c_i + e·b_i + d·a_i + e·d·[i == 1]

验证一遍恒等式:重组后右边等于 c + e·b + d·a + e·d = a·b + (x-a)·b + (y-b)·a + (x-a)(y-b) = x·y。代数上是纯粹的恒等变形,安全上靠 a、b 的随机性掩护。乘法从"交互难题"降维成了"开放两个值加一轮本地线性运算"。

图:Beaver 三元组乘法流程

图:Beaver 三元组乘法流程

动手演练

用 Python 把代换式跑一遍,确认与明文乘法一致:

P = 97 def shares(x): from secrets import randbelow s1 = randbelow(P); s2 = (x - s1) % P return s1, s2 x1, x2 = shares(42) y1, y2 = shares(30) a1, a2 = shares(25); b1, b2 = shares(13); c1, c2 = shares((25*13) % P) # 各方开放掩码差值(真实协议里广播给所有人) e = (x1 + x2 - a1 - a2) % P # = x - a = 17 d = (y1 + y2 - b1 - b2) % P # = y - b = 17 # 每方本地拼装 z 的份额 z1 = (c1 + e*b1 + d*a1 + e*d) % P # 第一方承担 e*d 项 z2 = (c2 + e*b2 + d*a2) % P print((z1 + z2) % P) # 输出 96,与 42*30 mod 97 一致

工程实践要点

账怎么算。 半诚实模型下,一次乘法的交互量就是开放 e、d 的通信:环宽 w 比特时每方发 2w 比特。64 位环下即 16 字节;千层网络跑一次百万次乘法,单乘法通信就是吉比特量级——这正是第 6 章说通信是第一瓶颈的根源。预处理的三元组生产越便宜、协议整体越快,SPDZ 系的全部工程史几乎就是"怎么把三元组造得更便宜"(5.1 节)。

安全性边界。 三元组必须:随机生成(不能与 x、y 相关)、只能用一次(复用会把两次的掩码差值关联起来)、数量够用(预处理不足会让在线阶段停摆等货)。恶意模型下还要给三元组加校验,防止预处理阶段就植入错误——那是 5.2 节 MAC 机制的主场。

⚠️ 常见坑:把"开放 e、d"理解成"开放随机数所以随便开多少都行"。开放次数乘上每次的信息量就是泄露预算;一次乘法开 2 个值是设计好的配额,冗余开放(调试时顺手多开了中间量)会累积成可利用的统计信息。

本节要点:交叉项是乘法之坎;三元组以一次性掩码把乘法降为线性;通信量每乘法两个环元素。下一节解决另一类需求——选择权本身也要保密时,请出不经意传输。

三元组的经济学与三条生产线

三元组本质是把"乘法交互"搬进"预处理生产"的记账凭证,它的生产成本决定整个协议族的地板价。三条生产线各有拥趸:同态加密造料通信省、计算贵,适合带宽紧张算力宽裕的场景;多方郑币不引入额外信任但交互轮数多,适合局域网;可信 dealer 模式最快,但引入一个知道所有三元组的角色。注意 dealer 只知道 a、b、c,并不知道各方输入,安全性退化为"dealer 与任何一方不合谋"——不少联邦平台正是这个模型,选型时要把这条假设写进合同附件。

批量代偿也值得了解:e 与 d 的开放可以攒批广播,网络往返从"每乘法两轮"摊薄为"每批两轮",局域网实测能把吞吐再抬数倍——第 6 章的批处理思想在协议内部同样适用。

与恶意安全的一次预演

半诚实假设下,三元组只要随机且一次性就够。但若预处理方作恶,发给你一组 c 不等于 a 乘 b 的假三元组,乘法结果就悄悄偏离真值且无人察觉。第 5 章的 MAC 校验正是为这类场景准备的:预处理材料也要领防伪标签,在线使用前统一验货。读到第 5 章时回看这一段,会看到同一条防伪思想贯穿全书。

三元组思想的三个远方亲戚

Beaver 三元组的价值远超"一次乘法技巧",它的思想在 MPC 全谱系里有三个亲戚,认出它们能帮你把知识连成网。亲戚一:混淆电路的行削减(3.4 节)——让输出标签之间满足固定代数关系,从而省掉一半密文,与三元组"预置代数关系换通信"是同一个思路,一个用在真值表上,一个用在乘法上。亲戚二:SPDZ 的 MAC 标签(第 5 章)——预处理阶段分发"密钥乘值"的三元关系,在线时验证,同样是"预置关系、现场验证"。亲戚三:零知识证明的承诺——证明者预先承诺一个值,后续交互中不能反悔,"预承诺、后揭示"的时间结构如出一辙。

三个亲戚加一个本体,共同印证一条设计哲学:交互式协议里最贵的是现场协商,所以能预置的关系绝不现场谈。这条哲学也是你阅读任何新协议时的万能探针——拿到一篇论文,先问"它预置了什么关系、现场只做什么动作",协议的骨架立刻清晰。

实操层面再留一个观察题:本节手算例子里 e 与 d 恰好都是 17,纯属巧合但引出一个真问题——e 与 d 的实际取值会不会泄露 x、y 的信息?答案是不会(a、b 均匀随机把它们抹平了),但"怎么论证不会"需要 5.3 节的仿真语言。带着这个悬念往下读,是不错的阅读动力。


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