第2章 密码学基础:对称加密、非对称加密与哈希函数
搞联邦学习,绕不开密码学。你想想,多方数据要协作,又不愿意把原始数据亮出来,那加密就是核心工具。我自己做联邦项目时,最开始就踩过不少密码学的坑——比如选了不合适的加密算法,导致计算性能崩了。所以这一章,咱们把最基础的三种密码学工具讲清楚:对称加密、非对称加密、哈希函数。
2.1 对称加密
对称加密,说白了就是一把钥匙开一把锁。加密和解密用同一个密钥。我习惯把它想象成「你往我保险箱里放文件,咱们共用同一把钥匙」。效率高,适合大量数据的加密。
典型算法
- DES(Data Encryption Standard):曾经的主流,但密钥太短(56位),现在已经被认为不安全。我在老项目中见过有人还想用DES,直接被我劝住了。
- 3DES:对DES做三次操作,安全性强了些,但慢。
- AES(Advanced Encryption Standard):当下的事实标准。密钥长度128/192/256位,软件和硬件都优化得很好。我建议项目里优先选AES-256。
我经历过一个跨机构联合训练的项目,最开始用RSA加密模型参数,结果一个批次要算几秒钟,根本跑不动。后来换成AES-GCM模式(带认证的对称加密),性能直接提升了两个数量级。嗯,选对算法真的很重要。
常见工作模式
| 模式 | 特点 | 典型场景 |
|---|---|---|
| ECB | 简单并行,但相同明文块会得到相同密文块,有模式暴露风险 | 不推荐,除非数据随机性很强 |
| CBC | 每个密文块依赖前一个块,需要IV | 文件加密,需要保证IV唯一性 |
| GCM | 结合计数器模式和认证标签,支持并行 | 网络传输加密,联邦学习梯度加密首选 |
2.2 非对称加密
非对称加密有一对密钥:公钥和私钥。公钥公开,私钥自己藏着。别人用你的公钥加密数据,只有你能用私钥解密。缺点是速度极慢,不适合加密大批量数据。一般在联邦学习中,我们用非对称加密来交换对称密钥,或者做数字签名。
典型算法
- RSA:基于大整数因数分解难题。密钥长度建议2048位以上。我见过有人用1024位RSA,觉得安全了,但几年前已经被破解证明不安全了。
- ECC(椭圆曲线加密):同样安全强度下,密钥短很多(256位ECC ≈ 3072位RSA)。性能也更好,支持密钥交换(ECDH)和签名(ECDSA)。联邦学习里我几乎只用ECC做密钥协商。
你可能会问:为什么非对称加密这么慢?因为它涉及大数运算。RSA解密需要做模幂运算,而AES只是简单的字节替换和移位。我曾经在树莓派上测试,RSA-2048一次解密花了几十毫秒,而AES-256加密1MB数据才花几毫秒。所以实际系统里,非对称加密只用来混合加密——先用非对称加密传递一个临时对称密钥,后续全用对称加密。
典型应用:数字签名
联邦学习里,客户端和服务器之间要验证身份。比如服务端发来的聚合参数,客户端怎么确认是官方的?签名。客户端用自己的私钥对模型更新签名,服务端用公钥验签。保证数据没被篡改,也确实来自声称的客户端。
2.3 哈希函数
哈希函数把任意长度的输入,变成固定长度的输出(摘要)。它不可逆、抗碰撞。联邦学习里主要用在完整性校验、伪随机数生成、密码学承诺等地方。
典型算法
- MD5:128位摘要,但已经被彻底攻破,不推荐任何安全场景使用。
- SHA-1:160位,也有了已知碰撞攻击,建议停用。
- SHA-2(SHA-256/512):当前标准。SHA-256输出256位,足够安全。联邦学习里的哈希地址、HMAC等都基于它。
- SHA-3:新一代标准,但实际部署较少。
我记得有一次做联邦学习聚合的防作弊机制——客户端提交的梯度,服务端先哈希一下,缓存摘要,防止重复提交。当时用SHA-256,速度很快,没有影响整体流程。
哈希在联邦学习中的两个关键作用
- 数据完整性:客户端和服务端之间传输的加密包,可以附带哈希值。接收方重新算一遍哈希,看是否一致,就知有没有被篡改。
- 承诺(Commitment):在多方密钥协商中,各方先公布自己密钥的哈希值,再公布密钥本身。这样可以防止某方根据别人密钥调整自己密钥(绑定保证)。
2.4 三类密码学工具的关系
我把它们的协作关系总结成一张图。你看着就能明白,联邦学习的安全底座是怎么搭建的:
从图上可以看出,三种密码学工具各司其职:非对称加密负责安全地协商密钥,对称加密负责高效的批量数据加密,哈希函数负责数据完整性校验和承诺绑定。三者结合,才构成联邦学习安全通信的完整拼图。
2.5 小结
这一章我们梳理了对称加密、非对称加密和哈希函数的核心概念和典型算法。我还分享了几个实际踩坑的例子。你记住三个关键点:
- 不要用ECB模式加密联邦学习梯度。
- 不要用短密钥(RSA < 2048,ECC < 256)。
- 哈希只能验完整性,不能保隐私。