第二章 密码学基础回顾:对称加密与非对称加密、哈希函数、数字签名与PKI
各位同学,欢迎来到第二章。在正式上手国密签名验签之前,我建议咱们先把密码学的几块“地基”夯实了。你想想看,如果连对称加密和非对称加密的区别都搞混,后面理解SM2签名算法肯定会踩坑。
这一章,我会结合自己这些年踩过的坑,把四个核心概念掰开揉碎了讲清楚。别担心,咱们不搞数学推导,重点放在“这东西是干嘛的”和“为什么需要它”。
2.1 对称加密 vs 非对称加密
先说对称加密。说白了,就是加密和解密用同一把钥匙。你拿钥匙锁门,也拿同一把钥匙开门。典型的算法有AES、SM4(国密标准)。
核心特点:速度快,适合加密大量数据。但密钥分发是个大麻烦——你怎么安全地把钥匙交给对方?
我在项目中遇到过这样一个场景:两个服务器之间要传输日志文件,数据量很大。用SM4对称加密,几秒钟就搞定。但问题来了,SM4的密钥怎么告诉对方?如果直接通过网络发,万一被截获,加密就等于白做了。
非对称加密就是来解决这个问题的。它有一对钥匙:公钥和私钥。公钥可以公开,私钥自己藏好。你用我的公钥加密,只有我能用私钥解密。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1个(共享密钥) | 2个(公钥+私钥) |
| 典型算法 | SM4, AES, DES | SM2, RSA, ECC |
| 运算速度 | 快(硬件加速友好) | 慢(比对称加密慢100-1000倍) |
| 主要用途 | 数据加密 | 密钥交换、数字签名 |
| 密钥分发 | 困难(需要安全通道) | 容易(公钥可公开) |
我的习惯:实际项目中,我通常用非对称加密来交换对称密钥,然后用对称加密来加密业务数据。这叫“混合加密”,既安全又高效。国密体系里,SM2做密钥交换,SM4做数据加密,就是这么搭配的。
2.2 哈希函数的特性
哈希函数,你肯定听过。它能把任意长度的数据,压缩成固定长度的“指纹”。比如SM3算法,输出就是256位(32字节)。
哈希函数有三个核心特性,我一个个说:
- 单向性:从哈希值反推原始数据,理论上不可能。嗯,这里要注意,不是“很难”,是“计算上不可行”。
- 抗碰撞性:找到两个不同的输入,让它们的哈希值相同,几乎不可能。SM3的碰撞概率是2的128次方分之一,比中彩票还难。
- 雪崩效应:输入改一个比特,输出会有一半以上的比特发生变化。这保证了哈希值对输入极其敏感。
我曾经踩过的坑:有一次做文件完整性校验,我直接用MD5(已经被证明不安全)。结果测试环境没问题,但客户的安全审计直接打回。从那以后,国密项目我全部改用SM3。记住:不要用MD5和SHA-1做签名,它们已经不安全了。
哈希函数在数字签名里扮演什么角色?说白了,就是给消息“提纯”。你想想看,如果直接对整份合同做签名,效率太低了。先对合同算一个SM3哈希值,再对这个哈希值签名,效果一样,速度快得多。
2.3 数字签名的工作原理
数字签名,不是把签名图片贴上去。它是一套数学机制,保证三件事:
- 真实性:消息确实是你发的(身份认证)
- 完整性:消息没有被篡改过
- 不可否认性:你不能事后说“我没签过”
具体流程是这样的:
- 发送方用哈希函数(如SM3)对消息计算摘要
- 发送方用自己的私钥对摘要加密,生成签名
- 发送方把消息和签名一起发给接收方
- 接收方用发送方的公钥解密签名,得到摘要A
- 接收方对收到的消息重新计算哈希,得到摘要B
- 如果A == B,签名验证通过
我刚开始学的时候,总觉得“用私钥加密”这个说法有点绕。其实你可以这么理解:私钥是你的电子印章,只有你能盖;公钥是印泥,谁都能拿它来验证这个章是不是你盖的。
关键点:数字签名不是加密消息本身,而是加密消息的哈希值。这样做既保证了效率,又保证了安全性。国密SM2签名算法就是基于这个原理。
2.4 公钥基础设施(PKI)概念
好,现在问题来了。你拿到了对方的公钥,怎么确定这个公钥真的是对方的?万一中间人给你一个假公钥呢?
PKI就是来解决这个信任问题的。它是一套完整的体系,包括:
- CA(证书颁发机构):可信的第三方,负责签发数字证书
- 数字证书:把公钥和身份信息绑定在一起,由CA签名
- 证书链:从根CA到中间CA到最终用户证书的信任链条
- CRL/OCSP:证书吊销机制,防止证书被滥用
我举个例子。你去银行办业务,柜员出示工牌。你凭什么相信这个工牌是真的?因为工牌上有银行的公章。PKI里的CA就相当于那个公章,数字证书就是工牌。
在国密体系里,PKI同样重要。SM2证书的格式遵循GMT 0015标准,跟X.509证书类似,但算法用的是国密套件。
个人经验:在国密项目中,我建议你提前确认CA是否支持SM2证书。有些老旧的CA系统只支持RSA,跟国密不兼容。另外,证书链的长度也需要注意——太长的链会影响验签性能。
2.5 本章小结
好,咱们把这一章的核心点串一下:
- 对称加密快但密钥分发难,非对称加密慢但密钥管理方便,两者互补使用
- 哈希函数(SM3)提供数据完整性校验,是数字签名的基础
- 数字签名用私钥签名、公钥验签,保证真实性、完整性和不可否认性
- PKI通过CA和数字证书解决公钥信任问题,是签名验签的信任基石
这些概念,后面每一章都会用到。尤其是SM2签名算法,它的核心逻辑就是“哈希+非对称加密”。你如果现在把基础打牢了,后面学SM2、SM3、SM4的具体实现会轻松很多。