想象你是一所高中的班长,要组织 40 人的毕业旅行。你选出 4 位组长分别负责订车、订房、买票和路线,但你知道其中可能藏着一个故意使绊子的“捣蛋鬼”:他会私下篡改订车信息、在群里报错价格、甚至假装其他组长说话。怎么保证最后全班还是能坐上同一辆车、住进同一家酒店?这个场景和分布式系统里的“拜占庭将军问题”几乎一模一样。忠诚的组长们需要一套机制:先确认“至少多少人同时说同一句话才可信”,再设计一套互相核对的流程,最后把总发假消息的人隔离出决策群。 在 AI 世界里,这套机制正在保护联邦学习:服务器聚合来自上千家机构的模型更新,一旦有恶意参与者上传“毒梯度”,全局模型就会被带偏。学会拜占庭容错,等于给你的分布式 AI 系统装上免疫系统,让它能在坏人捣乱时依然正常训练。

岗位关联

理解拜占庭容错能帮你设计高可靠的分布式训练系统,在联邦学习、区块链等场景中识别并隔离恶意节点,是分布式系统架构师与算法工程师的核心竞争力之一。

目录
  1. 可视化演示
  2. 问题背景
  3. 核心定理
  4. 协议演进
  5. 联邦学习威胁
  6. 聚合规则设计
  7. 检测与隔离
  8. 性能优化
  9. 应用展望
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示拜占庭容错原理与应用的核心机制,通过概览/流程/对比/趋势四种模式展示关键概念与交互流程。

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

拜占庭容错原理与应用:拜占庭容 拜占庭容错的基本理论与起源 PBFT 协议的核心机制与流程 核心机制可视化 拜占庭容错原理与应用整体架构与关键组件

问题背景

假设你们班计划一场毕业旅行,4 位组长中混入了 1 个捣蛋鬼。班长小明收到两条互相矛盾的消息:A 组长说“大巴已经订好”,B 组长却说“大巴公司说没有订单”。小明知道其中一条必然来自捣蛋鬼,但他无法判断该相信谁。这时需要一套规则,让所有忠诚组长在信息被污染时仍能达成共识,这就是拜占庭将军问题在班级场景中的缩影。

1982 年,Leslie Lamport 等人提出了著名的“拜占庭将军问题”:一群将军各自率领部队包围敌方城市,必须统一进攻或撤退,否则必败;但部分将军可能是叛徒,会发出错误或矛盾的军令。这个问题抽象出了分布式系统的核心难题——节点故障不只会“宕机”,还可能主动撒谎。传统分布式系统常假设节点要么正常、要么崩溃,称为“崩溃故障”;而“拜占庭故障”模型更严苛:节点可以发送任意错误消息、选择性不响应、甚至互相合谋。

在系统模型中,我们需要明确通信网络是同步还是异步、消息是否可被伪造、节点之间能否直接通信。班级旅行中,组长们通过微信群交流,消息不丢失但可能被篡改;在真实分布式系统中,这些假设决定了后续算法的可行性。理解这个背景,就明白“防捣蛋”不是简单多投票,而要在最坏假设下设计机制。

核心定理

班级旅行中,全班要选出几位“最终决策组长”。如果只有 1 个捣蛋鬼,那么至少需要 4 位组长;如果捣蛋鬼增加到 2 个,则需要 7 位。为什么不是“3 个组长、1 个捣蛋鬼”就够了?因为捣蛋鬼不仅会投反对票,还会故意制造“两套事实”:对一半人说进攻、对另一半人说撤退,让忠诚者以为自己拿到了多数。

经典拜占庭容错定理给出了精确答案:在无签名(口头消息)的同步系统中,要容忍 f 个拜占庭节点,系统总节点数 n 必须满足:

这个定理就像班级投票的“安全人数红线”:如果 4 个组长中有 1 个捣蛋鬼,3 个忠诚者刚好满足 \(4 \geq 3 \times 1 + 1\),可以达成共识;但 5 个组长中有 2 个捣蛋鬼时,3 个忠诚者面对 \(5 < 3 \times 2 + 1\),就无法保证正确决策。数字签名可以让某些攻击无法实施,从而把阈值放宽到 \(2f+1\),但口头消息场景下 \(3f+1\) 是铁律。

n≥3f+1\displaystyle n \geq 3f + 1
通俗说明:忠诚节点的数量必须超过叛徒数量的两倍以上,这样即使叛徒撒谎,诚实节点仍能通过“多数确认”压过错误信息。
  1. 符号 n代表系统总节点数,也就是参与共识决策的组长人数。
    nn
  2. 符号 f代表拜占庭故障节点数,也就是捣蛋鬼的人数。
    ff
  3. 系数 3因为每个忠诚节点需要收到 \(2f+1\) 条一致确认,加上 f 个叛徒可能发假消息,最终需要 3 个角色集合:正常消息、假消息、确认消息。
    33
  4. 加 1保证在极端情况下仍存在严格多数,使得诚实节点的决议不会被“平票”卡住。
    +1+1

协议演进

光知道“需要多少忠诚组长”还不行,还得设计一套不会让捣蛋鬼钻空子的会议流程。班级旅行策划会议如果只是举手投票,捣蛋鬼可以反复改票;于是班长规定:先由主持人提出方案(预准备),所有组长把看到的方案转发给大家(准备),最后每个人确认大家都看到了同一份方案(提交)。这就是 PBFT 的三阶段协议。

PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错)由 Castro 和 Liskov 在 1999 年提出,首次把拜占庭共识的复杂度从指数级降到多项式级,让工程落地成为可能。它的核心思想是:即使有少量节点作恶,诚实节点也能通过“两次全互联确认”对消息顺序达成一致。如果主持人不靠谱(比如一直推送矛盾信息),视图切换机制会触发换人,类似于班长发现主持人捣乱后立刻换一位新主持人。

PBFT 的主要代价是通信开销:每轮共识需要节点之间两两交换消息,消息总数随节点数平方增长。其通信复杂度为:

班会流程虽然能防捣蛋,但“每个人给所有人发消息”在 40 人的班级里已经让人手忙脚乱。PBFT 让分布式系统走出了纯理论,但也为后来的性能优化埋下了伏笔。

M=O(n2)\displaystyle M = O(n^2)
通俗说明:每增加一个节点,系统需要付出的沟通成本呈平方级上升,就像班级群里每个人都要给所有人都发一遍消息。
  1. 符号 M表示一轮完整共识过程产生的消息总数。
    MM
  2. 符号 n表示参与共识的节点数量。
    nn
  3. \(O(n^2)\)代表当节点数翻倍时,消息数量约变成原来的 4 倍,这就是平方增长的含义。
    O(n2)O(n^2)

联邦学习威胁

毕业旅行从线下见面改成了线上协作:每个组长在各自城市远程同步信息,通过一个“云文档”聚合最终计划。这时捣蛋鬼更加猖狂:他可以注册多个小号混进群聊,同时用几十个假身份发言,也可以直接篡改共享文档里的预算数字。线上协作虽然高效,却给“假消息”打开了新的大门。

联邦学习正是这样的线上协作范式:大量客户端在本地数据上训练模型,只把梯度或模型更新上传到服务器聚合。服务器如果天真地把所有更新取平均,一个恶意客户端就能上传精心构造的“毒梯度”,让全局模型偏向错误方向。常见攻击包括:标签翻转投毒(把猫的标签改成狗)、后门投毒(在模型中植入特定触发器)、梯度篡改(直接发送反向或极大梯度)以及女巫攻击(一个攻击者伪装成大量客户端)。

这些攻击的本质,是把拜占庭故障从“节点宕机”升级为“节点作恶”。服务器不再能假设上传者都是忠诚的,它必须像班长一样判断:“哪些组长发来的计划可信?哪些应该被忽略?”这个问题,正是拜占庭容错在机器学习时代的新考卷。

聚合规则设计

面对一群可能说谎的组长,班长不能简单地把所有报价取平均——捣蛋鬼报一个“天价酒店”就能把平均价格拉高。聪明的做法是:比较每位组长与其他组长方案的接近程度,选一个最“合群”的方案作为最终标准;或者把最高价和最低价都去掉,再取中间段的平均值。这些策略就是鲁棒聚合规则。

Krum 算法是联邦学习中的经典鲁棒聚合方法:对每个客户端梯度向量,计算它与距离最近的 \(n-f-2\) 个邻居的欧氏距离平方和,得分最低者胜出。因为恶意梯度通常远离诚实梯度簇,它的“合群分数”会很差,从而被自然淘汰。Krum 的数学定义如下:

另一种常用方法是 Trimmed Mean(截断均值):对梯度向量的每一个维度,把所有客户端在该维度的值排序,去掉最大和最小的各 b 个,再对剩余值求平均。这就像给每个报价去掉最高分和最低分,“评委打分”后剩下的才是有效意见。

通过这类“合群筛选”,联邦学习服务器即使混入恶意客户端,仍能像班长保留靠谱方案一样,让模型更新保持干净。

Krum(S)=arg⁡min⁡i∑j∈nearest(i,n−f−2)∥vi−vj∥2\displaystyle \mathrm{Krum}(S) = \arg\min_{i} \sum_{j \in \mathrm{nearest}(i, n-f-2)} \| v_i - v_j \|^2
通俗说明:第 k 个参数维度上,去掉极值后取平均,防止单个极端值改变模型方向。
  1. \(\hat\mu_k\)表示聚合后模型参数第 k 个维度的估计值。
    μ^k\hat\mu_k
  2. \(v_{(i),k}\)表示所有客户端在第 k 个维度排序后的第 i 个值。
    v(i),kv_{(i),k}
  3. b表示每端截断的客户端数量。
    bb
  4. \(\frac{1}{n-2b}\)表示对中间剩余的 \(n-2b\) 个值取平均。
    1n−2b\frac{1}{n-2b}

检测与隔离

防捣蛋不能只靠单轮投票,还要看“历史表现”。班级旅行筹备一个月,如果某位组长连续三次发假报价,大家就会给他贴一个“不靠谱”标签,后续他的发言自动降权。在分布式系统中,这种思路演化为信誉评分与异常检测。

服务器可以记录每个客户端每次上传梯度与全局梯度的方向一致性。如果某个客户端经常与主流方向背道而驰,它的信誉分就会下降;当信誉分低于阈值时,服务器将其标记为恶意节点并隔离,不再采纳它的更新。一种常见的评分方式是历史余弦相似度平均:

信誉机制不是一次性判死刑,而是“动态观察”:如果客户端因为数据分布天然不同而偶尔偏离,服务器不会立刻剔除;只有长期、稳定的偏离才会触发隔离。这就像班长先给“不靠谱”组长一次解释机会,但连续撒谎就不再纳入讨论。

score(ci)=∑t=1Tcos⁡(ui(t),uˉ(t))T\displaystyle \mathrm{score}(c_i) = \frac{\sum_{t=1}^{T} \cos(u_i^{(t)}, \bar u^{(t)})}{T}
通俗说明:把客户端每次更新的“方向偏差”取平均,偏差越大,分数越低,越可能被拉黑。
  1. \(c_i\)表示第 i 个客户端。
    cic_i
  2. \(u_i^{(t)}\)表示客户端 i 在第 t 轮上传的梯度更新向量。
    ui(t)u_i^{(t)}
  3. \(\bar u^{(t)}\)表示第 t 轮所有客户端更新的平均方向。
    uˉ(t)\bar u^{(t)}
  4. \(\cos(u_i^{(t)}, \bar u^{(t)})\)表示两个向量的余弦相似度,取值越接近 1 说明方向越一致。
    cos⁡(ui(t),uˉ(t))\cos(u_i^{(t)}, \bar u^{(t)})
  5. 除以 T表示对所有轮次取平均,得到客户端的长期信誉分。
    ∑t=1T⋅T\frac{\sum_{t=1}^{T} \cdot}{T}

性能优化

班会开得越来越久,每个组长都要给所有人发消息,40 个人的群已经刷屏。于是班长提出优化:改为“小组代表制”,每个房间只派一名代表参与最终确认;或者让各组异步汇报,不必等所有人同时在线。分布式系统同样面临通信瓶颈。

PBFT 的 \(O(n^2)\) 复杂度在几十个节点时尚可接受,但在联邦学习动辄成千上万的客户端面前完全不可行。于是研究者提出了异步共识协议,通过随机化、门限签名或分片机制,把每轮通信开销从平方级降到线性甚至次线性。复杂度对比如下:

除了降低通信次数,工程师还使用梯度压缩、随机采样和分层聚合来减少网络负载。班级旅行最终采用了“先分组、再汇总”的方式;大型联邦学习系统同样用分层架构,把拜占庭容错从理论公式变成了可落地的工业方案。

CPBFT=O(n2),Casync=O(n)\displaystyle C_{\mathrm{PBFT}} = O(n^2), \quad C_{\mathrm{async}} = O(n)
通俗说明:PBFT 像“全员同时开会”,异步共识像“分组讨论后汇报”,沟通成本大幅下降。
  1. \(C_{\mathrm{PBFT}}\)表示传统 PBFT 每轮共识的通信量。
    CPBFTC_{\mathrm{PBFT}}
  2. \(C_{\mathrm{async}}\)表示异步拜占庭共识的通信量。
    CasyncC_{\mathrm{async}}
  3. \(O(n^2)\)表示消息数量随节点数平方增长。
    O(n2)O(n^2)
  4. \(O(n)\)表示消息数量随节点数线性增长,适合大规模系统。
    O(n)O(n)

应用展望

从班级旅行到全年级联合演出,防捣蛋机制的价值越来越大:多个班级共同策划一场活动时,任何一个班级的负责人被“策反”,都可能让整个活动崩盘。去中心化 AI 正是这样一个“跨班级大协作”场景,拜占庭容错成为信任基石。

在真实世界中,金融行业的多家银行联合训练反欺诈模型,参与方可能因利益冲突而投毒;车联网中恶意车辆上传虚假交通流梯度,会让自动驾驶的预测模型失效;医疗数据协作网络中,某个医院节点被攻破后,可能上传错误模型更新。这些场景都需要拜占庭容错技术来兜底。

工程落地方面,开源框架 FATE 已集成多种鲁棒聚合算法,Hyperledger Fabric 的共识模块也吸收了 PBFT 思想;研究趋势则聚焦于可验证聚合、零知识证明和 AI 驱动的攻击检测。未来,拜占庭容错将与隐私计算、可信执行环境深度结合,成为分布式 AI 的“默认安全配置”。就像班级旅行最终教会了大家如何识别捣蛋鬼,这套理论也在教会 AI 系统如何在充满敌意的网络中保持清醒。

AI 应用场景

金融联合风控模型训练

阶段:联邦学习模型聚合与信任管理

解决的问题:多家银行联合训练反欺诈模型时,传统 FedAvg 假设所有参与方可信;一旦某家银行被攻击者控制,上传的毒梯度会让整个风控模型失效。拜占庭容错的鲁棒聚合规则能识别并隔离恶意参与方,保证模型仍能学到有效特征。

具体案例:某联盟链上的 5 家银行联合建模,1 家机构被黑后开始上传反向梯度。平台使用 Krum 聚合并结合历史信誉评分,在第三轮自动将该机构剔除,剩余 4 家机构训练出的模型 AUC 仅下降 1.2%。

车联网交通流预测

阶段:边缘节点模型更新聚合

解决的问题:路侧单元和联网车辆作为分布式节点,恶意车辆可能发送虚假刹车数据影响交通预测。通过截断均值与中位数聚合,系统忽略极端离群更新,保障通行效率模型稳定。

具体案例:某智慧城市项目在 20 个路侧节点中混入 3 个模拟攻击节点,上传异常拥堵梯度;采用 Trimmed Mean 后,预测准确率从崩溃边缘的 61% 恢复到 89%。

区块链上的模型版本共识

阶段:去中心化训练中的模型版本确认

解决的问题:在去中心化 AI 网络中,不同节点训练出多个模型版本,需要一套共识机制决定哪个版本进入全局账本。拜占庭容错共识防止恶意节点回滚或篡改模型历史。

具体案例:某医疗影像协作网络使用 PBFT 变体对模型更新排序,7 个节点中容忍 2 个恶意节点,确保病历数据训练出的模型版本不可被单点篡改。

Python 演示

python45 行
import math  def krum(gradients, f):    """选择一个与大多数梯度最接近的梯度作为全局更新。"""    n = len(gradients)    m = n - f - 2    best_i = 0    best_score = float("inf")    for i, vi in enumerate(gradients):        dists = []        for j, vj in enumerate(gradients):            if i == j:                continue            d = math.dist(vi, vj)            dists.append((d, j))        dists.sort()        score = sum(d for d, _ in dists[:m])        if score < best_score:            best_score = score            best_i = i    return gradients[best_i]  def trimmed_mean(gradients, b):    """按维度去掉最大最小各 b 个值后求平均。"""    n = len(gradients)    result = []    for k in range(len(gradients[0])):        col = sorted(g[k] for g in gradients)        trimmed = col[b:n - b]        result.append(sum(trimmed) / len(trimmed))    return result  if __name__ == "__main__":    # 前三个为诚实客户端梯度,最后一个为恶意离群梯度    grads = [        [0.1, 0.2],        [0.12, 0.19],        [0.11, 0.21],        [5.0, -4.0],    ]    print("krum:", krum(grads, f=1))    print("trimmed:", trimmed_mean(grads, b=1))
目的:用最小实现演示拜占庭鲁棒聚合,Krum 选出“最合群”的梯度,Trimmed Mean 用排序截断剔除极端梯度。
  1. math.dist(vi, vj)计算两个客户端梯度向量的欧氏距离,作为“方案差异度”。
  2. m = n - f - 2计算每个梯度需要比较的最近邻居数量,这是 Krum 算法的核心参数。
  3. dists.sort()按距离从小到大排序,以便累加最接近的 \(m\) 个邻居的距离。
  4. best_score = float("inf")初始化最优分数为正无穷,保证第一个候选者必然成为当前最优。
  5. sum(d for d, _ in dists[:m])对最近 \(m\) 个邻居的距离求和,得分越小代表越合群。
  6. sorted(g[k] for g in gradients)对所有客户端在第 k 个维度的值排序,为截断做准备。
  7. col[b:n - b]去掉两端各 b 个极值,保留中间部分。
  8. sum(trimmed) / len(trimmed)对保留的中间值取平均,得到该维度的鲁棒聚合结果。

常见误区

误区我原来以为只要诚实节点超过一半,系统就能抵抗恶意节点。比如 5 个节点中有 3 个诚实,应该足够了吧?为什么还要 3f+1 这么多?

正解拜占庭节点与崩溃节点不同,它们会故意制造“两套事实”。在无签名消息的经典模型下,要容忍 f 个叛徒,系统至少需要 \(n \geq 3f+1\) 个节点。5 个节点、2 个叛徒时,诚实节点只有 3 个,但 \(5 < 7\),无法形成稳定共识。因为叛徒能同时向不同人传递不同消息,让诚实节点误以为自己是少数派。

为何常见:日常投票经验让人下意识认为“过半数即安全”,忽略了拜占庭节点会制造分裂,而不是单纯投反对票。

误区分布式系统只要节点不宕机、网络不中断,就不会出问题。拜占庭容错不就是多备份几个节点吗?

正解崩溃容错假设节点要么正常工作、要么彻底停止,不会发假消息;拜占庭容错假设节点可能被攻破,主动撒谎、伪造数据、联合攻击。两者对系统设计的要求完全不同:崩溃容错只需要 \(n > f\) 加选举机制,拜占庭容错则需要 \(n \geq 3f+1\) 和密码学背书。

为何常见:大多数初学者先接触 Paxos、Raft 等崩溃容错协议,容易把“故障”等同于“停机”,忽略了更危险的“作恶”场景。

误区PBFT 已经很成熟,直接把它用在千万级客户端的联邦学习里不就行了?

正解PBFT 的通信复杂度是 \(O(n^2)\),节点数到几百时消息量已经爆炸;联邦学习的客户端动辄成千上万。生产系统通常通过异步共识、随机采样、分层聚合或门限签名来降低维度,而不是原样套用 PBFT。

为何常见:看到 PBFT 是“实用”算法,却忽略了“实用”是相对于指数级算法而言,它依然有平方级通信瓶颈。

误区客户端上传的梯度有正有负,互相平均一下,恶意梯度的影响不就被抵消了吗?

正解随机噪声可以靠平均抵消,但拜占庭攻击是定向的。攻击者可以上传一个方向相反的极大梯度,把全局模型直接拉向错误方向;或者上传后门梯度让模型在特定样本上出错。必须使用 Krum、Trimmed Mean、中位数聚合等鲁棒聚合规则,主动剔除离群值。

为何常见:统计学中的均值在独立随机误差下表现良好,但安全威胁是“最坏情况”,不是“平均情况”。

误区只要给消息加上数字签名,叛徒就不能造假,拜占庭问题不就解决了吗?

正解签名能防止伪造和抵赖,但恶意节点仍然可以发送自洽的虚假消息,比如故意把“进攻”签成“撤退”。在签名模型下容错阈值可以放宽到 \(2f+1\),但不能做到无代价安全;签名验证本身也会带来额外通信和计算开销。

为何常见:把密码学当成万能钥匙,忽略了拜占庭问题的核心是恶意节点拥有合法身份时依然可以作恶。

面试题

Q1. 拜占庭将军问题中,口头消息(无签名)下要容忍 f 个叛徒,系统至少需要多少个节点?

单选题 · easy

  • A.n = 2f + 1
  • B.n = 3f + 1← 正确答案
  • C.n = f + 1
  • D.n = 4f

答案:B。经典口头消息模型的容错阈值是 \(n \geq 3f+1\)。叛徒可以制造分裂,所以忠诚节点数量需达 \(2f+1\) 以上,加上 f 个叛徒,总数至少 \(3f+1\)。A 是签名模型下的阈值,C 无法抵抗任何叛徒,D 不是标准结论。

Q2. PBFT 共识过程包含哪三个主要阶段?

单选题 · easy

  • A.准备、确认、提交
  • B.预准备、准备、提交← 正确答案
  • C.提议、投票、计票
  • D.广播、校验、响应

答案:B。PBFT 的三阶段是 pre-prepare(预准备)、prepare(准备)、commit(提交),前两个阶段保证诚实节点对消息顺序一致,第三个阶段保证全局确认。A 缺少“预准备”,C、D 是其他共识协议的常见阶段。

Q3. 联邦学习中恶意客户端上传异常梯度,最直接的危害是什么?

单选题 · easy

  • A.增加通信开销
  • B.使全局模型偏离理想方向← 正确答案
  • C.降低加密强度
  • D.暴露服务器密钥

答案:B。恶意梯度的目的是让模型更新沿错误方向移动,从而破坏模型性能。通信开销和加密强度是工程问题,服务器密钥通常由可信执行环境保护,与客户端上传无关。

Q4. Krum 聚合算法选择全局更新的依据是什么?

单选题 · mid

  • A.与所有梯度的欧氏距离总和最小
  • B.与最近 n-f-2 个梯度的距离平方和最小← 正确答案
  • C.与全局平均梯度夹角最小
  • D.梯度范数最大

答案:B。Krum 对每个梯度计算它到最近的 \(n-f-2\) 个邻居的距离平方和,得分最小的梯度胜出。A 忽略了“最近邻居”范围,C 是余弦打分的思路,D 恰恰是攻击者容易满足的条件。

Q5. 使用 Trimmed Mean 聚合时,n=10 个客户端、b=2,每个维度最后平均几个值?

单选题 · mid

  • A.10
  • B.8
  • C.6← 正确答案
  • D.4

答案:C。\(n-2b=10-4=6\),去掉每端最大最小的 2 个值后,剩余 6 个值参与平均。B 只去掉一端,A 是普通平均,D 错误计算为 \(2b\)。

Q6. 拜占庭容错中,数字签名相比口头消息的主要作用是什么?

单选题 · mid

  • A.减少节点数量需求
  • B.防止消息被伪造和篡改← 正确答案
  • C.提高网络带宽
  • D.消除所有攻击

答案:B。签名让恶意节点无法伪装其他节点发送消息,也能防止抵赖,因此容错阈值可从 \(3f+1\) 放松到 \(2f+1\)。但签名不能阻止节点发送真实签名但内容错误的“合法假话”,也不能消除所有攻击。

Q7. 标准 PBFT 每轮共识的通信复杂度约为多少?

单选题 · hard

  • A.O(n)
  • B.O(n log n)
  • C.O(n²)← 正确答案
  • D.O(1)

答案:C。PBFT 需要所有节点两两交换 prepare 和 commit 消息,每轮消息总数达到 \(O(n^2)\)。这是 PBFT 难以扩展到大规模系统的根本原因,也是异步共识要优化通信量的动机。

Q8. 以下哪些属于联邦学习中常见的拜占庭攻击方式?

多选题 · mid

  • A.标签翻转投毒← 正确答案
  • B.梯度投毒← 正确答案
  • C.女巫攻击← 正确答案
  • D.侧信道攻击

答案:ABC。标签翻转和梯度投毒直接伪造训练数据或模型更新,女巫攻击让单个攻击者伪装成大量客户端。侧信道攻击属于硬件泄露,通常不在联邦学习的拜占庭攻击模型内。

Q9. 关于拜占庭容错阈值 \(n \geq 3f+1\),以下说法正确的有?

多选题 · hard

  • A.3 诚实节点可容忍 1 叛徒← 正确答案
  • B.4 节点可容忍 1 叛徒← 正确答案
  • C.7 节点可容忍 2 叛徒← 正确答案
  • D.5 节点可容忍 2 叛徒

答案:ABC。A 中 3 个诚实节点加 1 个叛徒等于 4 个节点,满足 \(4 \geq 4\);B 同理;C 中 \(7 \geq 7\) 成立;D 中 \(5 < 7\),2 个叛徒时无法达成共识。

Q10. 下列哪些方案可以降低 PBFT 在大型网络中的通信开销?

多选题 · hard

  • A.门限签名聚合验证← 正确答案
  • B.随机采样节点子集← 正确答案
  • C.增加更多副本数
  • D.异步分片并行共识← 正确答案

答案:ABD。门限签名让多个节点共享一个聚合签名,减少消息量;随机采样让每次只有部分节点参与,降低通信基数;异步分片把大网络切成小分片并行共识。增加副本数会放大 \(O(n^2)\) 开销,不是优化。