密码学基础:对称加密、非对称加密、哈希函数、数字签名
做联邦学习的时候,你会遇到一堆密码学概念。对称加密、非对称加密、哈希函数、数字签名——这玩意儿听起来像魔术,但其实没那么玄乎。我刚开始接触这一块时,也是被各种术语砸得晕头转向。
说白了,密码学就是给数据上锁、验锁、防篡改的一套工具。联邦学习里,密钥协商全靠它们撑场面。你想想看,不同机构之间要交换参数,谁敢裸着传?不懂这些,后续的密钥协商配置根本看不透。
下面我把这四个基础概念,按我自己的理解捋一遍。每个都带点我在项目里踩过的坑。
对称加密:又快又简单,但钥匙怎么给?
对称加密,顾名思义,加密和解密用的是同一把钥匙。就像你用一把锁锁住箱子,同一个人用另一把完全相同的钥匙才能打开。
- 常见算法:AES(最流行)、DES(太老别用了)、SM4(国标)
- 特点:计算快,适合加密大量数据
- 缺点:密钥分发是个大麻烦——你咋把钥匙安全地传给对方?
联邦学习里,对称加密常用于加密中间结果、梯度或模型参数。因为它快,不拖垮计算效率。但密钥怎么共享?这就轮到非对称加密上场了。
非对称加密:两把钥匙,一对“冤家”
非对称加密有公钥和私钥。公钥可以到处发,私钥自己藏着。用公钥加密,只有对应的私钥才能解开;反过来,用私钥签名,公钥可以验证真伪。举个例子:你给朋友寄包裹,用公钥锁上箱子,只有朋友手上的私钥能开。
- 常见算法:RSA(应用广)、ECC(更省空间)、SM2(国标)
- 特点:解决了密钥分发问题,但慢——比对称加密慢几百倍
- 典型用途:身份认证、数字签名、密钥交换
为什么会这么慢?因为非对称加密基于数论运算(大整数分解、椭圆曲线点乘),CPU得使劲算。所以在实际系统中,我们往往混合使用:用非对称加密传输一个对称密钥,之后用对称加密处理大批量数据。这招叫“混合加密”。
哈希函数:数据的“指纹”
哈希函数把任意长度的数据映射成固定长度的摘要(比如256比特)。而且它不可逆——你不能从摘要反推出原始数据。同样的输入必定得到同样的输出,输入一丁点变化,输出就面目全非。
- 常见算法:SHA-256(最常用)、SHA-3、SM3(国标)
- 特点:计算快、固定长度、碰撞概率极低
- 用途:完整性校验、密码存储、构建默克尔树
在联邦学习中,哈希函数用得最多的地方是:验证收到的模型参数有没有被篡改。你发送参数前先算个哈希,对方收到后再算一遍,两个哈希一比对就知道有没有人被改过。嗯,注意,哈希不能加密,只能验证完整性。
还有一个经典用法:认证。比如把密码的哈希值存数据库,登录时比对哈希。但千万别用明文存密码——老掉牙的错误我见太多了。
数字签名:证明“作者”和“未被篡改”
数字签名是哈希函数和非对称加密的结合。签名过程:发送方先对消息算哈希,然后用自己私钥加密这个哈希,得到签名。接收方用发送方公钥解密签名得到哈希A,再重新对消息算哈希B,两个一比较——如果相等,说明消息确实来自声称的发送方,且没被改过。
- 常用算法:RSA签名、ECDSA(基于ECC)、SM2签名
- 不可否认性:只有私钥拥有者能生成有效签名,无法抵赖
- 关键点:私钥签名,公钥验签
在联邦学习密钥协商场景中,数字签名用于确认协商参与方的身份。比如A向B发送请求,必须带上自己对请求内容的签名,B验证后才知道真的是A在说话,而不是伪装者。
四种技术的关系
直观地看,它们像工具包里的不同工具,各司其职:
- 对称加密:速度快,负责“运货”
- 非对称加密:解决密钥分发,负责“递钥匙”
- 哈希函数:防篡改,负责“验货”
- 数字签名:防抵赖,负责“验人”
下一节我把它们画成一张图,你一看就明白了。
一张表快速对比
| 技术 | 密钥 | 计算速度 | 主要目的 | 联邦学习典型应用 |
|---|---|---|---|---|
| 对称加密 | 单密钥 | 极快 | 数据机密性 | 加密梯度/模型参数 |
| 非对称加密 | 公钥+私钥 | 慢 | 密钥分发/身份认证 | 交换对称密钥/证书验证 |
| 哈希函数 | 无密钥 | 快 | 完整性校验 | 参数哈希对比 |
| 数字签名 | 私钥签名,公钥验签 | 中等 | 不可否认性+完整性 | 节点身份认证/协商消息签名 |
到这,你应该能分清这四个概念了。它们不是独立存在的,而是互相配合。我自己做项目时,经常把“签名”和“加密”两个动作一起用——先对数据签名,再整体加密。这样既防篡改又防盗听,但注意顺序不要反:签名后再加密,否则收方解密后看到的签名还是有效的;如果先加密再签名,签名对象是密文,公钥持有者看到签名有效但无法验证原文完整性。嗯,细节很重要,后面配置代码时会专门演示。