第2章 密钥协商基础概念与密码学背景

做联邦学习密钥协商,绕不开三个东西:对称密码、公钥密码、密钥交换协议。这几块是地基,地基不稳,上层边界设计就是个纸老虎。今天我从实战角度把这些概念拆开讲,顺便聊聊我在项目中踩过的坑。

2.1 对称密码:快,但怎么安全地分钥匙?

对称密码,说白了就是加密和解密用同一把密钥。你想想看,两个人要秘密通信,先把密钥商量好,然后用它加密消息。接收方拿到密文,用同一把密钥解密还原。

核心特征: 加解密速度极快,适合大量数据加密。联邦学习中的模型梯度、参数更新,用对称密码处理是主流选择。

常见的对称算法我列一下:

算法密钥长度分组大小典型场景
AES128/192/256 bit128 bit联邦学习梯度加密
SM4128 bit128 bit国密合规场景
ChaCha20256 bit流式移动端低功耗场景

我当年做跨机构联邦学习时,最开始直接用AES-ECB模式加密梯度,结果发现相同梯度块会出现相同密文,差点泄露数据分布。后来改用了AES-GCM,带上随机Nonce,才堵住这个洞。嗯,这里要注意:对称密码的安全不只取决于算法,还取决于工作模式和IV管理。

对称密码最大的痛点是什么?不是它不安全,而是密钥分发。参与方之间必须事先共享同一个密钥,而联邦学习的参与方往往互不信任、网络隔离。这就引出了公钥密码和密钥交换协议。

2.2 公钥密码:不用见面就能锁门

公钥密码的思路很巧妙——每个参与方有一对密钥:公钥公开,私钥自己藏好。别人用你的公钥加密数据,只有你用私钥才能解开。反过来,你用自己的私钥签名,别人用你的公钥验签。

举个例子:假如张三要给李四传一个对称密钥,张三用李四的公钥加密这个对称密钥,然后发给李四。李四用自己的私钥解密,就能拿到对称密钥。之后两人用这个对称密钥做高效通信。

我习惯把公钥密码比喻成「邮箱」:邮箱(公钥)谁都往里塞信,但只有持邮箱钥匙(私钥)的人能打开。现实中密钥协商的初始阶段,公钥密码几乎总被用来「加密传递对称密钥」。

性能警告: 公钥密码的计算开销比对称密码高好几个数量级。千万别用它直接加密大块模型参数。我在某个项目中曾见过有人用RSA逐轮加密梯度,结果一轮训练跑了一个小时——这不是不能用,是性价比太低。

主流公钥算法:

  • RSA(基于大整数分解)—— 经典,但密钥长度2048位起步,联邦学习中做签名验证居多。
  • ECC(椭圆曲线密码)—— 同等安全强度下密钥更短、计算更快。常用曲线:secp256k1、Curve25519。
  • SM2(国密椭圆曲线)—— 国内合规项目必选。

2.3 密钥交换协议:双方一起算出同一个秘密

密钥交换协议,解决的是「在不安全的通道上,双方如何协商出一个共享密钥」的问题。它不需要事先共享密钥,也不直接传输密钥本身,而是通过数学运算让双方各自计算得到同一个值。

最经典的当然是Diffie-Hellman(DH)协议。过程大致是:

  1. 双方约定两个公开参数:大素数 \( p \) 和生成元 \( g \)。
  2. 各自生成随机私钥 \( a \) 和 \( b \),计算公钥 \( g^a \mod p \) 和 \( g^b \mod p \),交换。
  3. 各自计算 \( (g^b)^a = g^{ab} \) 和 \( (g^a)^b = g^{ab} \),得到共享密钥。

你看,双方交换的是公开值,但只有持有私钥的人才能计算出相同的结果。窃听者拿到 \( g^a \) 和 \( g^b \),想算出 \( g^{ab} \) 在计算上是困难的——这个困难性叫做计算Diffie-Hellman假设。

在实际联邦学习中,我们通常用ECDH(椭圆曲线Diffie-Hellman),因为密钥短、性能好。我有一次帮金融机构搭联合建模平台,客户端是ARM架构的内嵌设备,跑RSA-DH太慢,换成ECDH Curve25519后,握手延迟从200ms降到15ms,效果立竿见影。

避坑指南: 我曾经在跨区域联邦学习里直接用静态DH(固定密钥对),结果公钥被替换导致中间人攻击。后来一律加上了签名认证——先验证公钥是否来自合法参与方,再执行DH交换。这个步骤叫「认证密钥交换」,后面章节会详细讲。

2.4 三种密码体系在联邦学习中的角色

简单总结一下它们的分工关系。我画了个结构图,方便你建立全局认知。

联邦学习密钥协商中的密码体系 对称密码 加密模型梯度 / 参数 高速加解密 代表:AES-GCM、SM4 密钥分发需保护 公钥密码 加密传递对称密钥 数字签名 / 身份认证 代表:RSA、ECC、SM2 性能开销大 密钥交换协议 在公开信道协商共享密钥 无需预共享密钥 代表:DH、ECDH、SM2密钥交换 需防中间人攻击 协同工作流: ① 密钥交换协议建立临时共享秘密 → ② 对称密码加密实际数据 联邦学习典型组合: ECDH 建立对称密钥 + AES-GCM 加密梯度传输 + ECDSA 签名验证身份

在联邦学习中,这三种体系不是独立使用的。我总结一个标准流程:

  1. 身份认证:每个客户端用私钥签名自己的身份信息,服务端用公钥验签,确保参与方是合法的。
  2. 密钥协商:通过ECDH交换临时公钥,双方各自计算出共享秘密(这个秘密通常作为种子派生后续对称密钥)。
  3. 数据加密:用派生出的对称密钥(如AES-256-GCM)加密本轮上传的模型梯度或参数。
  4. 完整性校验:消息附带HMAC或GCM标签,防止中途被篡改。
我的经验: 很多人觉得密钥交换协议这一步可以直接用公钥加密对称密钥替代。但后者会暴露「谁在和谁通信」的元数据——公钥加密后的密文固定长度,攻击者可以关联流量。而DH交换的临时公钥每次不同,且不直接传递密钥材料,更适合隐私保护的联邦学习环境。

最后提一个常被忽略的点:密钥生命周期管理。对称密钥一轮训练结束后就应该销毁,下一轮重新协商。我在早期项目中把DH共享秘密存了三个月——结果某台客户端被拖库,过去所有加密梯度全部可解密。教训就是:密钥必须随用随生,用完即焚。

思考题: 如果联邦学习的参与方达到1000个,每个都要两两做ECDH,计算量和通信量会爆炸。那么,有没有办法在一对多场景下批量协商密钥?嗯,这就是后面章节要讲的内容——我们将引入密钥协商边界的概念来约束参与方数量和层次。