密码学基础回顾:对称加密与非对称加密、哈希函数与消息认证码、数字签名与证书

说实话,每次带新人做密钥管理项目,我都要先花半天时间跟他们捋一遍密码学基础。不是他们不懂,而是很多人在实际工程里容易把概念用串了。你想想看,根密钥设计本质上就是在跟这些基础算法打交道——选错了加密算法,或者搞混了签名和认证码的用途,后面整个安全体系都可能塌掉。

这一章咱们就快速过一遍核心概念。我会结合自己踩过的坑来讲,保证都是干货。

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

对称加密,说白了就是加密和解密用同一把钥匙。就像你家里的大门,用钥匙锁上,再用同一把钥匙打开。

常见的算法有 AES、SM4、3DES。现在工业界基本只用 AES,尤其是 AES-256。3DES 我建议你直接忘掉——我在一个遗留系统里见过还在用 3DES 的,性能差不说,安全性也早就不达标了。

核心要点:对称加密的优点是速度快,适合加密大量数据。缺点是密钥分发困难——你怎么把密钥安全地交给对方?

实际项目中,对称密钥通常不会直接传输。我们会用密钥协商协议(比如 ECDH)或者非对称加密来保护它。这个后面会细讲。

算法 密钥长度 安全性 典型场景
AES-256 256 bit 极高 数据加密、根密钥存储
SM4 128 bit 高 国密合规场景
ChaCha20 256 bit 极高 移动端、嵌入式设备

我的习惯:在根密钥存储场景里,我倾向于用 AES-256-GCM 模式。GCM 模式自带认证,能同时保证机密性和完整性,省掉一个额外的 MAC 计算。

非对称加密:公钥随便给,私钥藏好

非对称加密解决了密钥分发的问题。它有一对密钥:公钥公开,私钥保密。你用公钥加密,只有持有私钥的人能解密。

常见的算法有 RSA、ECC(椭圆曲线)、SM2。RSA 现在推荐用 3072 位以上,但性能开销比较大。我个人更偏爱 ECC,尤其是 Curve25519 系列,性能好,密钥也短。

我曾经在一个 IoT 项目里用过 RSA-2048,结果设备每次握手都要卡几百毫秒。后来换成 ECC,延迟直接降到几十毫秒。嗯,选对算法真的很重要。

注意:非对称加密不适合加密大量数据。它很慢。实际做法是用非对称加密传输一个对称密钥(会话密钥),然后用对称密钥加密后续数据。这叫「混合加密」,TLS 就是这么干的。

哈希函数:不可逆的指纹

哈希函数能把任意长度的数据,压缩成一个固定长度的摘要。而且这个过程不可逆——你没法从摘要反推出原始数据。

常见的哈希算法有 SHA-256、SHA-3、SM3。MD5 和 SHA-1 已经不安全了,别再用了。我在代码审查里见过有人还在用 MD5 做文件校验,直接打回去重写。

哈希的用途很广:

  • 数据完整性校验:下载文件后比对哈希值,看文件有没有被篡改
  • 密码存储:存密码的哈希值,而不是明文(但要用加盐的哈希,比如 bcrypt、Argon2)
  • 数字签名的基础:先对消息做哈希,再对哈希值签名

避坑指南:哈希不是加密。哈希是单向的,加密是双向的。我见过有人把「哈希加密」混着说,这在工程文档里会引起严重误解。

消息认证码(MAC):确保消息没被改过

消息认证码(MAC)能保证消息的完整性和真实性。它跟哈希有点像,但多了一个密钥。只有持有密钥的人才能生成和验证 MAC。

常见的实现有 HMAC(基于哈希的 MAC)和 CMAC(基于分组密码的 MAC)。HMAC-SHA256 是最常用的。

举个例子:你给服务器发一条指令「转账 100 元」,附带上一个 HMAC 值。服务器用共享密钥重新计算 HMAC,如果匹配,说明指令没被篡改,而且确实是你发的。

我的经验:在根密钥的备份和恢复流程里,我会对备份数据同时做加密和 HMAC。加密防泄露,HMAC 防篡改。两者缺一不可。

数字签名:比 MAC 更强,还能防抵赖

数字签名跟 MAC 类似,但用的是非对称密钥。你用私钥签名,别人用你的公钥验证。这样有个好处:签名可以公开验证,而且你没法抵赖——因为只有你有私钥。

数字签名的流程:

  1. 对消息做哈希,得到摘要
  2. 用私钥对摘要签名,得到签名值
  3. 把消息和签名一起发给对方
  4. 对方用你的公钥验证签名

常见的签名算法有 RSA-PSS、ECDSA、EdDSA、SM2。我个人推荐 EdDSA(Ed25519),性能好,实现也安全——ECDSA 如果随机数生成有问题,私钥会直接泄露。这个坑我见过不止一次。

数字证书:把公钥和身份绑在一起

光有公钥还不够——你怎么确定这个公钥就是某个人的?数字证书就是干这个的。证书里包含公钥、持有者信息、颁发者信息、有效期,还有颁发者的数字签名。

证书的信任链是这样的:根证书(自签名)→ 中间证书 → 终端证书。你的浏览器里预装了一堆根证书,它们就是信任的起点。

在根密钥设计里,我们经常需要自建 CA(证书颁发机构),用来签发设备证书或代码签名证书。这个后面会有专门的章节来讲。

注意:证书不是永久的。它有有效期。我见过一个系统因为证书过期,导致整个服务中断了一上午。记得做好证书的监控和自动续期。

知识体系总览

下面这张图把本章的核心概念串起来了。你可以看到对称加密、非对称加密、哈希、MAC、签名和证书之间的关系。

密码学基础体系 对称加密 AES / SM4 / ChaCha20 非对称加密 RSA / ECC / SM2 哈希函数 SHA-256 / SM3 混合加密 消息认证码 (MAC) HMAC / CMAC 数字签名 ECDSA / EdDSA / SM2 数字证书 X.509 / PKI 哈希 + 密钥 → MAC 私钥签名 公钥 + 身份 → 证书 核心关系 对称加密加密数据,非对称加密保护对称密钥 哈希保证完整性,MAC 增加认证,签名增加不可抵赖性,证书绑定身份

小结

这一章我们回顾了密码学的六大核心概念。对称加密和非对称加密解决机密性问题,哈希和 MAC 解决完整性问题,数字签名和证书解决身份认证和不可抵赖性问题。

在根密钥设计里,这些算法会组合使用。比如:用非对称加密保护根密钥的分发,用哈希验证根密钥的完整性,用数字签名确保根密钥来源可信。后面的章节会一步步展开这些实战细节。