大航海时代,老船长凯旋前把藏宝图撕成七片,分给最信任的七名水手。他立下一道规矩:任何三个人把碎片拼在一起,就能复原完整的藏宝图;但如果只有一两片,就算把碎片翻来覆去地看,也猜不出宝藏埋在哪个荒岛。这就是秘密共享最朴素的智慧——把秘密拆成“单独看来毫无意义、合起来却能揭示真相”的碎片。把这份智慧搬进计算机世界,就有了本文的主角:秘密共享协议。它用数学构造代替纸张与剪刀,让数字秘密可以拆成多份分发给不同参与方,任何达到门限数量的参与方合作就能重构秘密,而少于门限的人一无所获。在此基础上,安全多方计算走得更远:不同的数据持有方可以在不透露各自原始数据的前提下,共同完成计算任务。这就像水手们不必亮出自己手里的碎片,也能一起算出宝藏的总价值。

岗位关联

对 AI 从业者而言,秘密共享是隐私计算的核心地基。掌握它,你就能理解安全多方计算、联邦学习安全聚合等前沿工程,在数据合规与模型效果之间架起一座可靠的桥。

目录
  1. 可视化演示
  2. 秘密共享概述
  3. 加法秘密共享
  4. Shamir 门限方案
  5. 安全多方计算
  6. 乘法与电路
  7. 工程实践
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示秘密S拆分为5份分片(3/5门限),以及利用拉格朗日插值从任意3份分片重构原始秘密的过程。

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

秘密拆分(3/5门限) 秘密S通过多项式f(x)生成5份分片,任意3份可重构 f(x) = S + a₁x + a₂x² mod p 少于3份分片无法获得任何秘密信息,信息论安全

秘密共享概述

船长的故事里藏着三个朴素事实:单片碎片看不出宝藏位置;凑够三人就能拼出全图;人数再多也不会让拼图变简单。这三个事实对应秘密共享协议的三个核心概念:碎片、门限、重构。把秘密 S(可以是一个数字、一段密钥、一份模型参数)拆成 n 份碎片分给 n 个参与方,任意 t 份都能还原 S,而任意少于 t 份的碎片即使全部公开,也得不到 S 的任何信息——这就是 (t, n) 门限方案。

“得不到任何信息”不是工程近似,而是信息论意义上的绝对零信息:只拿到 t-1 份碎片时,秘密的每一种取值都有同样可能的碎片组合与之对应,攻击者能做的只有瞎猜。这一性质叫完美安全性,它让秘密共享有别于普通加密:密文靠计算复杂度保护,碎片靠信息论分割保护。门限 t 是安全性与可用性的分界:t 越小容错越强,但小团体合谋风险越高;t 越大保密越好,但对参与方在线率要求越高。

于是船长把“三人成行”写进航海条例;在计算机世界,这条条例被翻译成一段精确的数学公式。门限就是那把尺子,碎片总数则像冗余编制:宁可多备几份,也不让一次海难毁掉整张藏宝图。

(t,n)-门限方案:{∣T∣≥t⇒S 可重构∣T∣<t⇒对 S 零信息(t, n)\text{-门限方案}: \begin{cases} |T| \ge t & \Rightarrow S\ \text{可重构}\\[4pt] |T| < t & \Rightarrow \text{对 } S\ \text{零信息} \end{cases}
这段公式像一张“对赌表”写明了门限方案的全部规矩:碎片数达到 t,秘密就回来了;不到 t,你手里只有一堆与随机数无差别的纸片。
  1. 门限 t系统要求的最少碎片数,是安全与可用性的分界线——就像船长规定“至少三人到场”才能开启宝库。
    t=3t = 3
  2. 碎片总数 n实际分发的碎片数,n ≥ t,多出的份额用于容错,仿佛多拓印几份海图以防被浪花打湿。
    n=7,n≥tn = 7,\quad n \ge t
  3. 重构条件任意收集到不少于 t 份碎片,算法都能唯一还原秘密 S。
    ∣T∣≥t⇒S|T| \ge t \Rightarrow S
  4. 保密条件碎片不足 t 份时,秘密的所有取值概率均衡,攻击者得不到任何区分信息。
    ∣T∣<t⇒零信息|T| < t \Rightarrow \text{零信息}

加法秘密共享

如果宝藏坐标是一串数字,船长还有更轻巧的办法:把数字 15 拆成三个数的和。他告诉大副“记住 3”、二副“记住 5”、三副“记住 7”。三个数字单独看来毫无含义,只有三人把数字相加,15 才会浮现。这就是加法秘密共享:秘密是若干随机碎片在同一模空间上的和。

设模数 p 是大素数,所有运算都在 0 到 p-1 的整数环上进行。分发时先从模空间均匀随机抽取前 n-1 份碎片,最后一份用秘密减去前面所有碎片得到,这样每份碎片都是均匀随机数,单独看与噪声无异。加法秘密共享最迷人的性质是同态加法:甲持有 x 的碎片、乙持有 y 的碎片,那么同一编号的碎片直接相加,得到的就是 x+y 的合法碎片——各方不需要通信,就能在本地“看不见明文地”完成加法。这份性质是后续安全多方计算处理加法门的基础。

三位副手各自记下一个数字,谁也不知道总数;一旦三人在甲板上碰头把数字相加,宝藏总值瞬间见分晓。加法秘密共享把“每人一块拼图”的直觉变成了可严格证明的数学性质,也是所有共享类安全计算方案的第一块砖。

S=S1+S2+⋯+Sn(modp)S = S_1 + S_2 + \cdots + S_n \pmod{p}
重构的秘密等于所有碎片之和再对 p 取模。取模这一下至关重要:它把总和“折叠”回合法的数字区间,并确保碎片单独来看是均匀随机的。
  1. 模数 p一个大素数,它规定了所有数字的活动范围,也保证了减法和除法在环内可逆。
    p∈Pp \in \mathbb{P}
  2. 随机抽取前 n-1 份碎片从模空间均匀随机选取,这是“单片无意义”的来源。
    S1,…,Sn−1←$ZpS_1, \ldots, S_{n-1} \xleftarrow{\$} \mathbb{Z}_p
  3. 末份补齐最后一份由秘密减去所有随机碎片得到,保证全部碎片之和恰好还原秘密。
    Sn=S−∑i=1n−1Si(modp)S_n = S - \sum_{i=1}^{n-1} S_i \pmod{p}
  4. 重构运算收集全部碎片逐一相加并取模,秘密即恢复。
    S=∑i=1nSi(modp)S = \sum_{i=1}^{n} S_i \pmod{p}

Shamir 门限方案

加法方案有个不体面的弱点:必须集齐全部碎片。船长可不想因为三副落海而永远失去宝藏。他换了一种藏法:不再把数字拆成加法碎片,而是把秘密当作一条抛物线的“起点高度”,让每个水手记住抛物线上一个点的坐标。三个人各抛出一个点,就能唯一画出一条抛物线,读出起点处的秘密;只有两个点时,穿过它们的抛物线有无数条——秘密依然深藏不露。

这就是 Shamir 门限方案,由密码学家 Adi Shamir(RSA 中的 S)在 1979 年提出。方案随机选择一条 t-1 次多项式,把秘密作为常数项放入多项式,然后在 x = 1, 2, ……, n 处取点,每个点 (i, f(i)) 就是一份碎片。为什么任意 t 个点足够、t-1 个点不够?因为一条 t-1 次多项式恰好由 t 个点唯一确定:拿到 t 个点,就能通过拉格朗日插值重建多项式、读出常数项;拿到 t-1 个点,会得到无穷多条候选多项式,秘密的每个取值都有可能,于是信息量为零。Shamir 方案因此实现了真正的 (t, n) 门限,且是信息论安全的。

三位水手在甲板上各报一个坐标,很快画出一条抛物线,起点高度就是宝藏埋藏的深度;若只来了两位,他们只能面对无数条可能的抛物线面面相觑。Shamir 用一条曲线把“三人成行”的规矩装进了数学保险箱——这份优雅的构造,至今仍是秘密共享领域应用最广的方案。

f(x)=S+a1x+a2x2+⋯+at−1xt−1(modp)f(x) = S + a_1 x + a_2 x^2 + \cdots + a_{t-1} x^{t-1} \pmod{p}
这就是隐藏路线图:秘密 S 被放在 x=0 处的“起点高度”,随机系数 a₁……a_{t-1} 决定曲线走向。t 个点锁定曲线,也就锁定了 S。
  1. 多项式构造秘密作为常数项,随机选取 t-1 个系数,拼出一条 t-1 次多项式。
    f(x)=S+∑k=1t−1akxkf(x) = S + \sum_{k=1}^{t-1} a_k x^k
  2. 碎片生成把 x = 1, 2, ……, n 分别代入,得到 n 个曲线上的点,每个点是一份碎片。
    (i,f(i)),i=1,2,…,n(i, f(i)),\quad i = 1, 2, \ldots, n
  3. 拉格朗日插值用 t 个点重建多项式,基多项式在目标点取 1、在其余已知点取 0,加权求和即还原整条曲线。
    f(0)=∑i=1tf(i)⋅∏j≠i0−ji−j(modp)f(0) = \sum_{i=1}^{t} f(i) \cdot \prod_{j \neq i} \frac{0 - j}{i - j} \pmod{p}
  4. 门限性质少于 t 个点时,方程解不唯一,候选多项式在 0 处可取得任意值,秘密信息归零。
    ∄ 唯一解⇒零信息\nexists\ \text{唯一解} \Rightarrow \text{零信息}

安全多方计算

新的挑战来了:船长想知道归程所需补给总量,但每个水手都私藏了数量不明的私货,谁也不想当着全船的面报数。更妙的是,他们可以先交换一些“打了马赛克的碎片”,再借助一套协作流程算出总补给量——整个过程没人真正看到别人的数字。这就是安全多方计算(MPC):n 个参与方分别持有私有输入,共同计算一个函数,最终每个人都只得到输出结果,而彼此的输入保持私密。

安全多方计算的鼻祖是姚期智院士的“百万富翁问题”:两个百万富翁想比较谁更有钱,却都不愿透露自己的财富数额。1986 年姚期智提出混淆电路方案:把要计算的函数转化成布尔电路,一个参与方把电路“打乱”成乱码电路,另一个参与方通过不经意传输获得与自己输入对应的钥匙,在不解密的情况下逐步求值,最终只得到比较结果。安全性则用“模拟范式”刻画:协议运行中参与方看到的一切视图,都能由仅知其自身输入和最终输出的模拟器生成——既然模拟器不看别人输入就能造出相同的视图,说明协议没有泄露多余信息。

水手们互递涂黑的信封,最终每个人手里都多了一张补给总清单,却始终不知道邻座的私货。安全多方计算让“不说真话也能一起办事”从江湖把戏升级为一门严谨的工程学问。

Viewiπ(x⃗)≡cSimi(xi,yi)\text{View}_i^{\pi}(\vec{x}) \overset{c}{\equiv} \text{Sim}_i(x_i, y_i)
这行公式是 MPC 的“保密誓言”:第 i 方在协议中看到的一切,和一个只看自己输入与最终输出的模拟器所“脑补”出来的内容无法区分。
  1. 视图第 i 方在协议执行中看到的全部消息,由输入、随机数与收到的通信内容组成。
    Viewiπ(x⃗)=(xi, ri, msg1,…,msgk)\text{View}_i^{\pi}(\vec{x}) = (x_i,\ r_i,\ \text{msg}_1, \ldots, \text{msg}_k)
  2. 模拟器一个理想程序,只被允许读入第 i 方的输入与输出,却要“以假乱真”地造出整个视图。
    Simi(xi,yi)\text{Sim}_i(x_i, y_i)
  3. 不可区分真实视图与模拟输出在计算上不可区分,意味着协议没有比“应得结果”多泄露一点信息。
    Viewiπ≡cSimi\text{View}_i^{\pi} \overset{c}{\equiv} \text{Sim}_i
  4. 模型分层半诚实模型只防“偷看”,恶意模型还需防范伪造输入与偏离协议,工程成本随之大增。
    半诚实⊆恶意\text{半诚实} \subseteq \text{恶意}

乘法与电路

加法共享就像水手们排队报数相加,简单直接;可一旦要算“私货数量乘以补给单价”,麻烦立刻出现——直接乘碎片会混入交叉项,等于把私货信息暴露在运算结果里。船队需要一种“打码称重”的妙招:先准备好一组三人共同持份的随机数三元组,用它给两端各加一个随机扰动,再把扰动后的值亮出来相乘,最后剥掉扰动,得到正确乘积。

这个妙招叫 Beaver 三元组。预处理阶段,可信任的经销商或协作过程随机生成三元组 (a, b, c),满足 c = a × b,并把三份碎片分给参与方。计算乘积 x × y 时,各方先在本地计算掩蔽值 d = x − a、e = y − b,并公开 d、e;随后 x × y = d×e + d×b + e×a + c。由于 d、e 带着随机扰动,公开它们不泄露 x、y。展开上式:x×y = (d+a)(e+b) = de + db + ea + ab,其中 ab = c——一次“秘密乘法”被拆成一次公开乘法和几次局部运算。在布尔电路场景中,XOR 门免费,AND 门每扇消耗一个三元组并引入一轮通信。

打码称重的把戏在水手间传开:先给每袋私货盖上随机重量的“官封”,过秤后揭开官封一折算,总重量分毫不差,私货内容却无人知晓。Beaver 三元组就是那组官封——它让“乘法”这道安全计算里最难啃的骨头,变成了人人可做的加法与公开乘法。

x⋅y=d⋅e+d⋅b+e⋅a+c,d=x−a, e=y−bx \cdot y = d \cdot e + d \cdot b + e \cdot a + c, \qquad d = x - a,\ e = y - b
加扰、公开、去扰三步走:d 和 e 是打了码的 x 和 y,公开它们谁也无法还原原始输入;而最终展开式恰好把 c = a·b 补了回去,乘积分毫不差。
  1. 三元组生成预处理阶段产生满足 c = a·b 的随机三元组,并以共享形式分发给各方。
    c=a⋅bc = a \cdot b
  2. 本地加扰各方用 a、b 掩盖真实输入,生成掩蔽值 d、e,公开后无法反推 x、y。
    d=x−a,e=y−bd = x - a, \quad e = y - b
  3. 乘法展开把加扰后的值代入,利用乘法分配律展开为四项。
    (d+a)(e+b)=de+db+ea+ab(d + a)(e + b) = de + db + ea + ab
  4. 秘密补齐因为 ab 就是三元组中的 c,最终结果恰好等于真实乘积。
    de+db+ea+cde + db + ea + c

工程实践

理论图纸画好,船队终于要启航。真正的远航不比甲板演练:海图要复制几份、通信要靠旗语与信鸽、风暴可能让某只船失联。工程化的秘密共享系统同样要回答三个问题:协议按什么顺序跑、资源花在哪、拿来解决什么业务。这三个问题分别对应协议流程、性能考量与典型应用。

一个典型的共享型 MPC 协议分为离线和在线两阶段。离线阶段(预处理)生成 Beaver 三元组、随机掩码等“耗材”;在线阶段完成输入分发、逐门计算与结果重构。分离的好处是耗材可以提前批量制造,让在线阶段只保留少量交互,显著降低延迟。协议流程概括为:初始化参数 → 分发碎片 → 电路求值 → 门限重构。性能上,乘法门是主要瓶颈:每扇乘法门消耗一个三元组、需要一轮广播,通信量约为乘法门数乘以单份碎片大小。实践中常用批处理、乱序优化与局部通信拓扑来压缩开销;典型应用包括密钥托管、联合统计与联邦学习安全聚合。

当船队真正驶入大洋,船长发现:航速取决于船队中最慢的通信,载货量取决于预先装好的“耗材”,航线图早已由门限与电路深度刻画完毕。秘密共享与 MPC 的工程化,就是把甲板上的默契变成可度量、可优化、可上线的流水线。

Comm=O(G×⋅log⁡p),Rounds=O(D)\text{Comm} = O(G_{\times} \cdot \log p), \qquad \text{Rounds} = O(D)
工程预算表:总通信量约等于乘法门数量 G× 乘以单个碎片位数,轮次则等于电路深度 D——想优化性能,就是压缩乘法门数与电路深度。
  1. 乘法门数量G× 表示电路中的乘法门总数,每扇门都要消耗一个三元组并触发一轮通信。
    G×G_{\times}
  2. 单份碎片大小log p 是模数 p 的比特长度,决定了每轮通信携带的字节数。
    ⌈log⁡2p⌉\lceil \log_2 p \rceil
  3. 电路深度D 是电路最长链路上的乘法门层数,决定协议需要的往返轮次。
    D=max⁡路径#乘法门D = \max_{\text{路径}} \#\text{乘法门}
  4. 优化方向减少乘法门靠算术化化简,压缩深度靠并行化与短路重写。
    min⁡G×∧D\min G_{\times} \wedge D

AI 应用场景

医疗联合统计

阶段:数据获取与合规治理

解决的问题:多家医院希望联合统计疾病发病率与用药相关性,但受数据法规限制,病历不允许出医院。传统做法是把数据脱敏后汇总到中心,脱敏仍可能被重识别攻击。AI 方案:各医院先把本地统计量用秘密共享拆成碎片分发给其他机构,再用 MPC 完成聚合,最终每家只拿到总统计量,单个病历永不离开本院。

具体案例:三家三甲医院联合筛查某区域糖尿病发病率,每院本地计算月度新发病例数,用加法秘密共享拆成三份互相交换,MPC 汇总出区域整体发病率,全程无原始病历外流。

企业密钥托管

阶段:模型与数据安全

解决的问题:AI 模型的签名私钥或数据库主密钥由单人保管,存在离职、丢失、被胁迫等单点风险。传统方案是保险柜加多人监督,物理流程繁琐。AI 方案:用 (2,3) Shamir 门限把密钥拆成三份分给三位高管,任意两人到场即可恢复密钥完成签名,单人拿到碎片也无法使用。

具体案例:某金融科技公司为模型推理服务的 TLS 私钥做门限托管,CTO、安全总监、法务总监各持一片,恢复过程通过 MPC 完成,完整私钥永不落盘。

联邦学习安全聚合

阶段:模型训练与隐私保护

解决的问题:联邦学习中各客户端上传梯度,梯度本身可能泄露训练样本。传统聚合由中心服务器直接求和梯度,恶意服务器可发起成员推断攻击。AI 方案:客户端先将梯度做加法秘密共享,服务器聚合的是碎片和,重构出的只是全局梯度均值,单个客户端梯度不可见。

具体案例:某银行联合 12 家分行训练反欺诈模型,每轮更新时各分行用秘密共享拆分本地梯度,服务器端 MPC 聚合后反传全局参数,分行数据互不可见。

Python 演示

python41 行
import random def modinv(a, p):    # 费马小定理求模逆    return pow(a, p - 2, p) def eval_poly(coeffs, x, p):    # 霍纳法求多项式值    val = 0    for c in reversed(coeffs):        val = (val * x + c) % p    return val def share_secret(secret, t, n, p):    # 秘密放常数项 随机挑 t-1 个系数    coeffs = [secret] + [random.randrange(1, p) for _ in range(t - 1)]    return [(i, eval_poly(coeffs, i, p)) for i in range(1, n + 1)] def reconstruct(shares, p):    # 拉格朗日插值 重构 f(0)    result = 0    for i in range(len(shares)):        xi, yi = shares[i]        num = 1        den = 1        for j in range(len(shares)):            if i == j:                continue            num = num * (-shares[j][0]) % p            den = den * (xi - shares[j][0]) % p        result = (result + yi * num * modinv(den, p)) % p    return result if __name__ == "__main__":    p = 2 ** 127 - 1    s = 20240601    t, n = 3, 5    shares = share_secret(s, t, n, p)    print("shares:", shares)    print("recover with 3:", reconstruct(shares[:3], p))    assert reconstruct(shares[:3], p) == s
目的:完整实现 Shamir (3,5) 门限方案——把数字秘密藏进二次多项式曲线,生成 5 份碎片,任意 3 份即可通过拉格朗日插值还原秘密。
  1. coeffs = [secret] + [random.randrange(1, p) for _ in range(t - 1)]秘密放进常数项,再随机补 t-1 个系数,拼出 t-1 次多项式。
  2. return [(i, eval_poly(coeffs, i, p)) for i in range(1, n + 1)]在 x = 1 到 n 上取点,每个点 (i, f(i)) 就是一块碎片。
  3. return pow(a, p - 2, p)利用费马小定理求模逆:p 是素数时 a 的逆为 a^(p-2)。
  4. num = num * (-shares[j][0]) % p拉格朗日基多项式在 0 点的分子,逐项累乘 (-x_j)。
  5. den = den * (xi - shares[j][0]) % p基多项式分母,保证第 i 个基函数在本点取 1。
  6. result = (result + yi * num * modinv(den, p)) % p每份碎片乘以对应权重后累加,权重就是 num/den 的模逆结果。
  7. p = 2 ** 127 - 1大素数梅森素数,提供足够大的有限域,也便于模逆运算。

常见误区

误区我把秘密分成 100 份,总比分成 3 份更安全吧?碎片越多,攻击者要偷的东西越多,破案难度也越大。

正解安全性由门限 t 决定,而不是碎片总数 n。只要攻击者凑不齐 t 份,即使拿到全部 n-1 份,在数学上也得不到关于秘密的任何一点信息;反过来,一旦凑齐 t 份,多出来的碎片对重构毫无影响。就像船长规定“三人成行”,就算九名水手都围过来,锁也只有那三把钥匙能开。

为何常见:直觉上觉得“东西藏得越分散越难偷”,忽略了门限模型里安全边界是数学定义而非物理分散度。

误区秘密共享和 AES 一样,都是把数据变成别人看不懂的乱码,区别只是换个形式。

正解加密是“可逆变换加密钥”,拿到密钥即可解密;秘密共享是信息论意义上的分割,任何少于 t 份的碎片与随机数不可区分,根本不存在“解密”动作。二者常组合使用:先用加密保护共享份额的传输,再用秘密共享实现分布式信任。密文靠算力保护,碎片靠信息量保护——两者安全模型本质不同。

为何常见:都涉及“把秘密变乱”的外表相似,容易忽视底层安全假设的差异。

误区加法共享里碎片相加等于秘密相加,那碎片相乘应该也等于秘密相乘吧?乘法想必也是免费的。

正解加法共享天然支持加法同态,但乘法会引入交叉项——直接对分享值做乘积,结果的分享形式不再是合法的简单共享,还会泄露输入信息。安全乘法必须借助 Beaver 三元组等机制,付出通信与计算代价。同态性质不是“想要就有”的,每种运算都要单独证明。

为何常见:把“运算对分享的局部性”过度外推,忽略了多项式结构下乘法带来的度增长与交叉项问题。

误区协议文档说这个 MPC 方案是安全的,那部署上线就没问题了,参与方都会老实执行。

正解半诚实(honest-but-curious)模型只保证“按协议执行但偷做推导”的敌手;若参与方可恶意篡改输入、中途退出或不守协议,就必须采用恶意安全模型,引入承诺、可验证秘密共享、零知识证明等机制,开销大得多。部署前必须明确威胁模型,否则就像船长没验证水手是否真的交出了自己的碎片。

为何常见:教程常默认半诚实模型,让人误以为这是 MPC 的通用安全保证,忽略威胁建模这一步。

误区把门限设成 n 不是最保险吗?所有碎片必须集齐才能重构,谁也别想单独搞鬼。

正解t = n 时冗余为零:丢失任何一片碎片秘密就永久丢失,任何一个参与方离线系统便瘫痪。门限的意义在于安全与可用性的平衡:t 越小越可用但越容易被小团体合谋;t 越大越抗合谋但越脆弱。实际部署按威胁模型选择,例如银行常用 t = n/2 + 1,既防单人滥用又容多数在线。

为何常见:只盯着“凑齐更难等于更难被破解”,忽略了门限方案容错与冗余的设计初衷。

面试题

Q1. 在 (3,5) 门限秘密共享中,攻击者拿到 2 份碎片,能获得关于秘密的什么信息?

单选题 · easy

  • A.能完整还原出秘密数值
  • B.能推断秘密的大致范围
  • C.得不到任何有效信息← 正确答案
  • D.能推出秘密的一部分

答案:C。门限 (3,5) 意味着任意少于 3 份的碎片在信息论上与随机数不可区分,攻击者拿 2 份与空手没有本质区别。这正是完美安全性的体现。A 错在必须凑齐 t=3 份;B、D 错在碎片本身不含任何可推断的结构。

Q2. 在 Shamir 门限方案中,秘密 S 藏在多项式的哪个位置?

单选题 · mid

  • A.藏在最高次项的系数中
  • B.藏在常数项即 f(0) 处← 正确答案
  • C.藏在所有系数的和中
  • D.藏在任意一个采样点上

答案:B。Shamir 方案把秘密直接放在常数项 f(0),随机系数 a₁……a_{t-1} 只负责扰动曲线形状。拿到 t 个点后用拉格朗日插值计算 f(0) 即可恢复秘密。放在最高次项、系数之和或采样点上都会破坏门限性质与重构的简洁性。

Q3. 实现 (3,5) 门限 Shamir 方案时,需要构造几次多项式?

单选题 · easy

  • A.需要构造 1 次多项式
  • B.需要构造 2 次多项式← 正确答案
  • C.需要构造 3 次多项式
  • D.需要构造 5 次多项式

答案:B。门限 t=3 意味着多项式次数为 t-1=2,即二次多项式。三个点唯一确定一条二次曲线,而两个点只能确定一条一次曲线,不足以复原二次秘密。次数与门限之间是“少一”的关系。

Q4. 加法秘密共享中,重构秘密的正确方式是?

单选题 · easy

  • A.对所有碎片求最大公约数
  • B.把所有碎片累加后取模← 正确答案
  • C.把所有碎片相乘后取模
  • D.把碎片拼接后做哈希

答案:B。加法秘密共享的重构就是全部碎片累加再对模数 p 取模。求公约数、相乘、哈希都得不到原秘密,也破坏了碎片间的加法结构。取模运算保证结果落在合法的有限域内。

Q5. Beaver 三元组中的三个数满足什么关系?

单选题 · mid

  • A.满足加法关系 a 加 b 等于 c
  • B.满足乘法关系 a 乘 b 等于 c← 正确答案
  • C.满足减法关系 a 减 b 等于 c
  • D.满足异或关系 a 异或 b 等于 c

答案:B。Beaver 三元组要求 c = a·b 且 a、b 为随机数。它把秘密乘法转换成公开乘法与局部运算:d = x−a、e = y−b 公开不泄露信息,最终 x·y = de + db + ea + c。加法、减法或异或关系都无法完成这个掩蔽展开。

Q6. 安全多方计算中常见的安全模型包括哪些?

多选题 · mid

  • A.半诚实模型← 正确答案
  • B.恶意敌手模型← 正确答案
  • C.无通信模型
  • D.单方信任模型

答案:AB。安全模型按敌手能力分为半诚实(honest-but-curious,偷看但不作恶)与恶意(malicious,可篡改输入、偏离协议)。“无通信模型”与“单方信任模型”都不是标准模型:MPC 必然伴随通信,且不依赖单一信任方。

Q7. 恶意安全模型相比半诚实模型,额外防御的是什么?

单选题 · hard

  • A.防御参与方的网络延迟波动
  • B.防御参与方恶意篡改输入行为← 正确答案
  • C.防御服务器磁盘数据损毁
  • D.防御外部流量监听攻击

答案:B。恶意安全模型需要防御参与方主动偏离协议、伪造输入、提前终止等行为,通常借助可验证秘密共享与零知识证明实现。半诚实模型只防御“按协议执行但偷做推导”。网络延迟、磁盘损坏、流量监听属于工程可靠性或传输安全范畴,不是恶意模型的核心防御对象。

Q8. 不经意传输(OT)解决的核心问题是什么?

单选题 · mid

  • A.让接收方只能获得目标数据← 正确答案
  • B.让发送方无法看到任何人
  • C.让数据可以被公开广播
  • D.让通信彻底变为离线进行

答案:A。不经意传输让发送方持有若干值,接收方只能拿到其中一个,且发送方不知道接收方选的是哪个。混淆电路中,求值方靠 OT 获取与自己输入对应的乱码钥匙,而得不到另一方的钥匙。公开广播、离线通信都不符合 OT 的设计目标。

Q9. 哪些因素会显著影响共享型 MPC 的性能?

多选题 · hard

  • A.电路乘法门的数量← 正确答案
  • B.电路的计算深度← 正确答案
  • C.参与方的颜色偏好
  • D.网络通信的带宽← 正确答案

答案:ABD。共享型 MPC 的性能由电路规模(乘法门数决定总通信量)、电路深度(决定协议轮次)与网络带宽共同决定。参与方的颜色偏好与性能毫无关系。离线预处理可缓解延迟,但总通信量仍与乘法门数成正比。

Q10. 下列哪些是秘密共享的典型应用场景?

多选题 · easy

  • A.企业密钥分布式托管← 正确答案
  • B.多方联合隐私统计← 正确答案
  • C.联邦学习梯度安全聚合← 正确答案
  • D.图片文件的无损压缩

答案:ABC。密钥托管(门限分发私钥)、联合隐私统计(多方聚合不露明细)、联邦学习梯度安全聚合都是秘密共享的典型落地场景。图片无损压缩属于编码与信号处理领域,与秘密共享无关。