第2章 密钥协商基础概念与密码学背景
做联邦学习密钥协商,绕不开三个东西:对称密码、公钥密码、密钥交换协议。这几块是地基,地基不稳,上层边界设计就是个纸老虎。今天我从实战角度把这些概念拆开讲,顺便聊聊我在项目中踩过的坑。
2.1 对称密码:快,但怎么安全地分钥匙?
对称密码,说白了就是加密和解密用同一把密钥。你想想看,两个人要秘密通信,先把密钥商量好,然后用它加密消息。接收方拿到密文,用同一把密钥解密还原。
常见的对称算法我列一下:
| 算法 | 密钥长度 | 分组大小 | 典型场景 |
|---|---|---|---|
| AES | 128/192/256 bit | 128 bit | 联邦学习梯度加密 |
| SM4 | 128 bit | 128 bit | 国密合规场景 |
| ChaCha20 | 256 bit | 流式 | 移动端低功耗场景 |
我当年做跨机构联邦学习时,最开始直接用AES-ECB模式加密梯度,结果发现相同梯度块会出现相同密文,差点泄露数据分布。后来改用了AES-GCM,带上随机Nonce,才堵住这个洞。嗯,这里要注意:对称密码的安全不只取决于算法,还取决于工作模式和IV管理。
对称密码最大的痛点是什么?不是它不安全,而是密钥分发。参与方之间必须事先共享同一个密钥,而联邦学习的参与方往往互不信任、网络隔离。这就引出了公钥密码和密钥交换协议。
2.2 公钥密码:不用见面就能锁门
公钥密码的思路很巧妙——每个参与方有一对密钥:公钥公开,私钥自己藏好。别人用你的公钥加密数据,只有你用私钥才能解开。反过来,你用自己的私钥签名,别人用你的公钥验签。
举个例子:假如张三要给李四传一个对称密钥,张三用李四的公钥加密这个对称密钥,然后发给李四。李四用自己的私钥解密,就能拿到对称密钥。之后两人用这个对称密钥做高效通信。
我习惯把公钥密码比喻成「邮箱」:邮箱(公钥)谁都往里塞信,但只有持邮箱钥匙(私钥)的人能打开。现实中密钥协商的初始阶段,公钥密码几乎总被用来「加密传递对称密钥」。
主流公钥算法:
- RSA(基于大整数分解)—— 经典,但密钥长度2048位起步,联邦学习中做签名验证居多。
- ECC(椭圆曲线密码)—— 同等安全强度下密钥更短、计算更快。常用曲线:secp256k1、Curve25519。
- SM2(国密椭圆曲线)—— 国内合规项目必选。
2.3 密钥交换协议:双方一起算出同一个秘密
密钥交换协议,解决的是「在不安全的通道上,双方如何协商出一个共享密钥」的问题。它不需要事先共享密钥,也不直接传输密钥本身,而是通过数学运算让双方各自计算得到同一个值。
最经典的当然是Diffie-Hellman(DH)协议。过程大致是:
- 双方约定两个公开参数:大素数 \( p \) 和生成元 \( g \)。
- 各自生成随机私钥 \( a \) 和 \( b \),计算公钥 \( g^a \mod p \) 和 \( g^b \mod p \),交换。
- 各自计算 \( (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,效果立竿见影。
2.4 三种密码体系在联邦学习中的角色
简单总结一下它们的分工关系。我画了个结构图,方便你建立全局认知。
在联邦学习中,这三种体系不是独立使用的。我总结一个标准流程:
- 身份认证:每个客户端用私钥签名自己的身份信息,服务端用公钥验签,确保参与方是合法的。
- 密钥协商:通过ECDH交换临时公钥,双方各自计算出共享秘密(这个秘密通常作为种子派生后续对称密钥)。
- 数据加密:用派生出的对称密钥(如AES-256-GCM)加密本轮上传的模型梯度或参数。
- 完整性校验:消息附带HMAC或GCM标签,防止中途被篡改。
最后提一个常被忽略的点:密钥生命周期管理。对称密钥一轮训练结束后就应该销毁,下一轮重新协商。我在早期项目中把DH共享秘密存了三个月——结果某台客户端被拖库,过去所有加密梯度全部可解密。教训就是:密钥必须随用随生,用完即焚。