第二章 密码学基础回顾:对称加密与非对称加密、哈希函数、数字签名与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字节)。

哈希函数有三个核心特性,我一个个说:

  1. 单向性:从哈希值反推原始数据,理论上不可能。嗯,这里要注意,不是“很难”,是“计算上不可行”。
  2. 抗碰撞性:找到两个不同的输入,让它们的哈希值相同,几乎不可能。SM3的碰撞概率是2的128次方分之一,比中彩票还难。
  3. 雪崩效应:输入改一个比特,输出会有一半以上的比特发生变化。这保证了哈希值对输入极其敏感。

我曾经踩过的坑:有一次做文件完整性校验,我直接用MD5(已经被证明不安全)。结果测试环境没问题,但客户的安全审计直接打回。从那以后,国密项目我全部改用SM3。记住:不要用MD5和SHA-1做签名,它们已经不安全了。

哈希函数在数字签名里扮演什么角色?说白了,就是给消息“提纯”。你想想看,如果直接对整份合同做签名,效率太低了。先对合同算一个SM3哈希值,再对这个哈希值签名,效果一样,速度快得多。

2.3 数字签名的工作原理

数字签名,不是把签名图片贴上去。它是一套数学机制,保证三件事:

  • 真实性:消息确实是你发的(身份认证)
  • 完整性:消息没有被篡改过
  • 不可否认性:你不能事后说“我没签过”

具体流程是这样的:

  1. 发送方用哈希函数(如SM3)对消息计算摘要
  2. 发送方用自己的私钥对摘要加密,生成签名
  3. 发送方把消息和签名一起发给接收方
  4. 接收方用发送方的公钥解密签名,得到摘要A
  5. 接收方对收到的消息重新计算哈希,得到摘要B
  6. 如果A == B,签名验证通过

我刚开始学的时候,总觉得“用私钥加密”这个说法有点绕。其实你可以这么理解:私钥是你的电子印章,只有你能盖;公钥是印泥,谁都能拿它来验证这个章是不是你盖的。

关键点:数字签名不是加密消息本身,而是加密消息的哈希值。这样做既保证了效率,又保证了安全性。国密SM2签名算法就是基于这个原理。

2.4 公钥基础设施(PKI)概念

好,现在问题来了。你拿到了对方的公钥,怎么确定这个公钥真的是对方的?万一中间人给你一个假公钥呢?

PKI就是来解决这个信任问题的。它是一套完整的体系,包括:

  • CA(证书颁发机构):可信的第三方,负责签发数字证书
  • 数字证书:把公钥和身份信息绑定在一起,由CA签名
  • 证书链:从根CA到中间CA到最终用户证书的信任链条
  • CRL/OCSP:证书吊销机制,防止证书被滥用

我举个例子。你去银行办业务,柜员出示工牌。你凭什么相信这个工牌是真的?因为工牌上有银行的公章。PKI里的CA就相当于那个公章,数字证书就是工牌。

在国密体系里,PKI同样重要。SM2证书的格式遵循GMT 0015标准,跟X.509证书类似,但算法用的是国密套件。

PKI信任体系架构图 根CA(自签名) 中间CA 用户证书A 用户证书B 用户证书C 信任传递机制: 1. 根CA的证书是自签名的,预置于操作系统或浏览器中 2. 中间CA的证书由根CA签名,证明其合法性 3. 用户证书由中间CA签名,形成完整的信任链 4. 验证时从用户证书逐级回溯到根CA,全部通过才算可信

个人经验:在国密项目中,我建议你提前确认CA是否支持SM2证书。有些老旧的CA系统只支持RSA,跟国密不兼容。另外,证书链的长度也需要注意——太长的链会影响验签性能。

2.5 本章小结

好,咱们把这一章的核心点串一下:

  • 对称加密快但密钥分发难,非对称加密慢但密钥管理方便,两者互补使用
  • 哈希函数(SM3)提供数据完整性校验,是数字签名的基础
  • 数字签名用私钥签名、公钥验签,保证真实性、完整性和不可否认性
  • PKI通过CA和数字证书解决公钥信任问题,是签名验签的信任基石

这些概念,后面每一章都会用到。尤其是SM2签名算法,它的核心逻辑就是“哈希+非对称加密”。你如果现在把基础打牢了,后面学SM2、SM3、SM4的具体实现会轻松很多。