【TEE从入门到精通及实战】61 梯度中毒防御:在SGX enclave中实现鲁棒聚合 开篇,我先讲个真实的故事。去年我帮一家金融科技公司做联邦学习系统,六家银行联合训练风控模型。系统上线第三天,聚合结果突然异常——模型准确率从87%暴跌到23%。排查发现,其中一家银行的节点提交的梯度全是随机噪声。更棘手的是,由于我们用了安全聚合(上篇讲的可验证秘密共享),连聚合服务器都看不到明文梯度,根本无法判断哪个节点在“投毒”。这个场景就是典型的梯度中毒攻击(Gradient Poisoning Attack)。攻击者可能是一个被攻破的参与方,也可能是恶意内部人员。他们提交精心构造的恶意梯度,要么让模型收敛到错误方向(定向攻击),要么直接破坏模型性能(随机攻击)。在传统联邦学习中,我们可以用统计方法检测异常梯度,但在安全聚合的“数据不可见”约束下,这个任务变得极其困难。痛点拆解:为什么“盲人摸象”式的防御行不通?很多人的第一反应是:“我在聚合前算一下梯度的范数,把离群值剔除不就行了?”这个思路没错,但在安全聚合场景下,你根本看不到单个梯度。你只能看到聚合后的密文结果。看这个反例代码,它试图在解密前做检测,但注定失败:# 错误示例:试图在密文上检测异常defnaive_defense