本节摘要:联邦学习把训练下放到数据方,但梯度本身就是泄露源——梯度反演攻击能从共享梯度里重建训练样本。同态加密在联邦架构里承担"加密聚合"角色:参与方加密本地方梯度,聚合服务器在密文上求和,只解密全局梯度。本节讲清攻击动机、加密聚合协议的完整时序、训练与推理两条路线的性能分野,以及与差分隐私的配合边界。
联邦学习的原始卖点是"数据不出域":各参与方本地训练,只上传梯度或参数更新,中心服务器聚合成全局模型。问题出在"只上传梯度"这半句——梯度不是无害的摘要,它携带了损失函数对每个样本的完整响应。二零一九年前后的一系列研究把这件事演示得触目惊心:拿到某一轮的梯度与对应标签信息,攻击者可以通过优化方法重构出训练样本的近似图像,人脸照片的五官轮廓都能恢复出来;后续工作进一步证明,即使只有聚合梯度,配合成员推断仍能判断某条记录是否参与了训练。"数据不出域"保住了原始数据,没保住数据的信息内容——这正是第五章开篇"信任切分"叙事的典型案例:泄露点不在数据搬运处,而在中间产物处。
防御谱系里,同态加密的位置最干脆:让聚合服务器从头到尾只见密文梯度,聚合在密文域完成。它的优势是无损——不往模型里注入噪声,聚合结果与明文聚合完全一致(整数线)或误差可控(近似线);代价是计算与通信开销,以及密钥管理的协议设计。差分隐私则相反:开销小,但以精度换隐私。两条路线并不互斥,后文会给出组合方式。
时序图里有两个协议设计的关键选择。第一是密钥归属:联合公钥可以由委员会门限托管(少数合谋才可能解密),也可以每轮临时协商——前者省事后者更安全,生产系统多取门限方案。第二是解密时机:全局梯度在解密后对所有参与方可见,若担心"从全局梯度反推他人贡献",可以把解密环节也做成门限化、仅在聚合器内使用。这些选择没有标准答案,取决于参与方之间的竞争关系强度。
密文量的账要算清楚,这是可行性判断的第一步。设模型有百万参数(中型网络的量级),近似线打包:维度八千一百九十二的密文有四千零九十六个槽,每槽放一个浮点梯度,百万参数约需两百五十个密文;每个密文约四百五十千字节,单轮上行约一百多兆字节。按百兆带宽规划,传输不是瓶颈;密文加法在服务器侧是线性开销,秒级完成。真正的开销大头在参与方侧的加密与解密(每轮各一次全模型规模的编码运算)与训练本身的同态化(如果连训练都上云)。这引出两条路线的分野。
路线一是"聚合加密"(上图的模式):训练在本地明文进行,只有通信环节加密。这是工业界的主流形态,开销可控,隐私收益明确(服务器与偷听者都看不到任何一方的梯度)。它的边界也明确:参与方本地数据依然是明文训练,不解决"本地环境不可信"的问题。
路线二是"训练全同态化":把前向与反向传播整个搬进密文域,数据方加密原始数据,云上完成全部训练。技术上是近似线方案的深水区——反向传播的乘法深度是前向的两倍,激活函数要低次多项式逼近,中间还需要自举续深度。性能量级:小型逻辑回归在加密数据上训练数小时可收敛(学术界的经典结果把这类任务压进了小时级);中型图像网络的加密训练以天计,尚在研究前沿。当前的现实建议:聚合加密已是成熟工艺,全同态训练留给专用硬件成熟后的下一阶段(第六章的加速路线正瞄准这里)。
推理侧则完全是另一番光景,也是同态机器学习最先规模落地的形态:模型提供方持有明文模型,用户加密输入,服务端在密文上跑前向,返回加密预测。卷积与全连接层在近似线的打包摊销下效率良好,激活层用低次逼近或切到布尔线的可编程自举。性能量级随模型规模跨度很大:小型图像分类的加密推理从早期的分钟级(每批数百毫秒到秒级)已被压到百毫秒级;大型语言模型的加密推理仍在研究攻坚(自注意力里的非线性与超深网络都是硬骨头)。下一节把推理算例完整展开。
加密保聚合过程,差分隐私保发布结果——两者组合的正确姿势是"密文域加噪":把校准好的噪声作为明文系数加到密文聚合上(加法同态让它直接生效),解密后的全局梯度自带隐私预算。这样服务器看不到任何明文梯度,参与方拿到的全局更新又有差分保证,两个信任层面同时闭合。注意噪声校准要在加密前完成参数计算,且预算会计(每轮消耗多少隐私预算、多少轮后需要重置)要在协议层管理——这是联邦系统的工程细节里最容易踩空的缝。
# 加密梯度聚合的骨架(接口形态参考主流库) def federated_round(participants, server, round_no): agg_ct = None for p in participants: grads = p.local_train() # 明文本地训练 ct = p.pack_and_encrypt(grads) # 打包为密文向量 server.collect(ct) agg_ct = server.sum_ciphertexts() # 密文求和,服务器不见明文 if DP_ENABLED: agg_ct = agg_ct + sample_noise(scale) # 差分噪声以明文系数加入密文 shares = server.distribute(agg_ct) # 分发密文聚合 total = threshold_decrypt(shares, t_of_n) # 门限解密全局梯度 for p in participants: p.apply_update(total) # 更新本地模型
骨架里每个函数都对应前文的一个设计点:打包决定密文量、密文求和是服务器的全部视图、噪声以明文系数注入、门限解密关闭单点信任。把这份骨架与第三章选型矩阵、第四章成本表放在一起,一个联邦项目的方案评审材料就齐了。
⚠️ 常见坑:明文梯度先聚合再加密(等于没加密)、密钥由聚合服务器单点持有(合谋即破防)、差分噪声加在解密之后(隐私预算被密文随机性稀释、校准失效)。三个坑都出在协议顺序,评审时按数据流逐环节过一遍即可排除。