密码学基础:对称加密、非对称加密、哈希函数、数字签名

做联邦学习的时候,你会遇到一堆密码学概念。对称加密、非对称加密、哈希函数、数字签名——这玩意儿听起来像魔术,但其实没那么玄乎。我刚开始接触这一块时,也是被各种术语砸得晕头转向。

说白了,密码学就是给数据上锁、验锁、防篡改的一套工具。联邦学习里,密钥协商全靠它们撑场面。你想想看,不同机构之间要交换参数,谁敢裸着传?不懂这些,后续的密钥协商配置根本看不透。

下面我把这四个基础概念,按我自己的理解捋一遍。每个都带点我在项目里踩过的坑。

对称加密:又快又简单,但钥匙怎么给?

对称加密,顾名思义,加密和解密用的是同一把钥匙。就像你用一把锁锁住箱子,同一个人用另一把完全相同的钥匙才能打开。

  • 常见算法:AES(最流行)、DES(太老别用了)、SM4(国标)
  • 特点:计算快,适合加密大量数据
  • 缺点:密钥分发是个大麻烦——你咋把钥匙安全地传给对方?
我的经验:几年前做企业内部数据传输,同事图省事把AES密钥写死在配置文件里发邮件。结果密钥明文躺在运维的共享文件夹里……后来我强制要求用临时密钥派生机制,至少每个会话换一次。别学那种“一次加密,一辈子不换”的写法。

联邦学习里,对称加密常用于加密中间结果、梯度或模型参数。因为它快,不拖垮计算效率。但密钥怎么共享?这就轮到非对称加密上场了。

非对称加密:两把钥匙,一对“冤家”

非对称加密有公钥和私钥。公钥可以到处发,私钥自己藏着。用公钥加密,只有对应的私钥才能解开;反过来,用私钥签名,公钥可以验证真伪。举个例子:你给朋友寄包裹,用公钥锁上箱子,只有朋友手上的私钥能开。

  • 常见算法:RSA(应用广)、ECC(更省空间)、SM2(国标)
  • 特点:解决了密钥分发问题,但慢——比对称加密慢几百倍
  • 典型用途:身份认证、数字签名、密钥交换

为什么会这么慢?因为非对称加密基于数论运算(大整数分解、椭圆曲线点乘),CPU得使劲算。所以在实际系统中,我们往往混合使用:用非对称加密传输一个对称密钥,之后用对称加密处理大批量数据。这招叫“混合加密”。

避坑:我曾经在一个联邦学习原型里,用RSA-2048逐个加密每个梯度值,结果一个batch跑完要半小时。后来改成先协商AES密钥,再用AES加密梯度,瞬间降到几秒。记住一个原则:非对称只用来“握手”,对称用来“搬砖”。

哈希函数:数据的“指纹”

哈希函数把任意长度的数据映射成固定长度的摘要(比如256比特)。而且它不可逆——你不能从摘要反推出原始数据。同样的输入必定得到同样的输出,输入一丁点变化,输出就面目全非。

  • 常见算法:SHA-256(最常用)、SHA-3、SM3(国标)
  • 特点:计算快、固定长度、碰撞概率极低
  • 用途:完整性校验、密码存储、构建默克尔树

在联邦学习中,哈希函数用得最多的地方是:验证收到的模型参数有没有被篡改。你发送参数前先算个哈希,对方收到后再算一遍,两个哈希一比对就知道有没有人被改过。嗯,注意,哈希不能加密,只能验证完整性。

关键:哈希不是加密!加密可以解密,哈希不行。很多新手把哈希叫“加密哈希”,容易误导。正确的说法是“哈希函数”或“摘要函数”。

还有一个经典用法:认证。比如把密码的哈希值存数据库,登录时比对哈希。但千万别用明文存密码——老掉牙的错误我见太多了。

数字签名:证明“作者”和“未被篡改”

数字签名是哈希函数和非对称加密的结合。签名过程:发送方先对消息算哈希,然后用自己私钥加密这个哈希,得到签名。接收方用发送方公钥解密签名得到哈希A,再重新对消息算哈希B,两个一比较——如果相等,说明消息确实来自声称的发送方,且没被改过。

  • 常用算法:RSA签名、ECDSA(基于ECC)、SM2签名
  • 不可否认性:只有私钥拥有者能生成有效签名,无法抵赖
  • 关键点:私钥签名,公钥验签

在联邦学习密钥协商场景中,数字签名用于确认协商参与方的身份。比如A向B发送请求,必须带上自己对请求内容的签名,B验证后才知道真的是A在说话,而不是伪装者。

踩坑提醒:我曾经在项目里把签名和加密搞混——以为签名的私钥也能用来加密。实际上RSA的签名和加密虽然数学相似,但填充方式不同,混用会导致严重安全问题。所以,签名就用签名接口,加密就用加密接口,别耍小聪明。

四种技术的关系

直观地看,它们像工具包里的不同工具,各司其职:

  • 对称加密:速度快,负责“运货”
  • 非对称加密:解决密钥分发,负责“递钥匙”
  • 哈希函数:防篡改,负责“验货”
  • 数字签名:防抵赖,负责“验人”

下一节我把它们画成一张图,你一看就明白了。

密码学基础四大模块关系图 对称加密 同一把钥匙加密解密 AES / SM4 非对称加密 公钥加密,私钥解密 RSA / ECC / SM2 哈希函数 固定长度指纹,不可逆 SHA-256 / SM3 数字签名 私钥签名,公钥验签 RSA签名 / ECDSA / SM2 非对称加密协商对称密钥 = 混合加密 速度快(对称) + 密钥安全分发(非对称) 签名 = 对哈希值用私钥加密 验证 = 用公钥解密签名,比对哈希 联邦学习中,四者共同保障参数的安全传输与认证
核心原则:对称加密保效率,非对称加密保分发,哈希函数保完整,数字签名保身份。四者缺一不可。在联邦学习密钥协商的配置中,你需要根据场景灵活组合它们——比如先签后加密,或者先加密后哈希签名。顺序也有讲究,具体我们后面章节细聊。

一张表快速对比

技术密钥计算速度主要目的联邦学习典型应用
对称加密单密钥极快数据机密性加密梯度/模型参数
非对称加密公钥+私钥慢密钥分发/身份认证交换对称密钥/证书验证
哈希函数无密钥快完整性校验参数哈希对比
数字签名私钥签名,公钥验签中等不可否认性+完整性节点身份认证/协商消息签名

到这,你应该能分清这四个概念了。它们不是独立存在的,而是互相配合。我自己做项目时,经常把“签名”和“加密”两个动作一起用——先对数据签名,再整体加密。这样既防篡改又防盗听,但注意顺序不要反:签名后再加密,否则收方解密后看到的签名还是有效的;如果先加密再签名,签名对象是密文,公钥持有者看到签名有效但无法验证原文完整性。嗯,细节很重要,后面配置代码时会专门演示。