密码学基础回顾:对称加密与非对称加密、哈希函数与数字签名、密钥与证书的关系
说实话,很多做密钥管理的人,最后栽跟头都是因为密码学基础不牢。你想想看,连加密算法怎么工作的都没搞明白,怎么设计安全的密钥生命周期?
这一节,我用实战视角带你过一遍核心概念。不会堆数学公式,咱们就讲清楚「它是什么、用来干嘛、坑在哪」。
对称加密:快,但密钥怎么分?
对称加密,说白了就是加密和解密用同一把钥匙。就像你家大门,一把钥匙既能锁也能开。
常见的算法有 AES、SM4、3DES。我个人习惯,新项目一律用 AES-256-GCM,既加密又带认证,防篡改。
- 速度快,适合加密大量数据
- 密钥长度短(128/192/256 位)
- 最大痛点:密钥分发困难
我在项目中遇到过最典型的场景:两个微服务之间要加密通信。用对称加密,你得先把密钥安全地送到对方手里。怎么送?走网络怕被截获,刻光盘又太慢。这就是对称加密的「密钥分发问题」。
非对称加密:慢,但解决了分发问题
非对称加密,有一对钥匙:公钥和私钥。公钥可以公开,私钥自己藏好。你用我的公钥加密,只有我能用私钥解密。
这就解决了密钥分发问题——你不需要提前把密钥给我,直接把公钥扔到网上就行。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 个 | 2 个(公钥+私钥) |
| 速度 | 快(MB/s 级别) | 慢(KB/s 级别) |
| 典型算法 | AES, SM4, ChaCha20 | RSA, ECC, SM2 |
| 主要用途 | 数据加密 | 密钥交换、数字签名 |
实际项目中,没人会用非对称加密去加密大文件。太慢了。正确的做法是「混合加密」:用非对称加密传输对称密钥,再用对称密钥加密数据。HTTPS 就是这么干的。
哈希函数:单向的指纹
哈希函数,输入任意长度数据,输出固定长度的摘要。关键特性:不可逆。你没法从摘要反推出原文。
常用算法:SHA-256、SM3、BLAKE2。MD5 和 SHA-1 已经不安全了,别再用。
哈希的典型用途:
- 密码存储: 存哈希值,不存明文密码
- 数据完整性: 下载文件后比对哈希,看有没有被篡改
- 消息认证: 结合密钥做 HMAC
数字签名:证明是你干的
数字签名 = 哈希 + 非对称加密。流程很简单:
- 对消息做哈希,得到摘要
- 用私钥加密摘要,生成签名
- 对方用公钥解密签名,比对哈希值
它能保证三件事:
- 身份认证: 确实是私钥持有者签的
- 完整性: 消息没被篡改
- 不可否认性: 签了就不能赖账
我参与过一个电子合同平台,每份合同都要做数字签名。当时有个细节差点出问题:签名时用的哈希算法必须和证书里的算法一致,否则验签会失败。
密钥与证书的关系
很多人搞不清密钥和证书的区别。我打个比方:
- 密钥: 就是你的身份证号码(私钥)和公开信息(公钥)
- 证书: 就是你的身份证,上面有你的照片、姓名、有效期,还有公安局的盖章(CA 签名)
证书把公钥和身份绑定在一起。CA(证书颁发机构)用自己的私钥给你的公钥签名,别人拿到你的证书,用 CA 的公钥验签,就知道这个公钥确实属于你。
- 根证书(自签名,信任锚点)
- 中间证书(由根 CA 签发)
- 终端证书(你的服务器证书)
嗯,这里要注意:私钥和证书必须分开存储。证书可以公开,私钥必须加密保存。我见过有人把私钥和证书放在同一个文件里,还上传到 GitHub……那画面太美我不敢看。
知识体系总览
下面这张图,把本章的核心关系画清楚了。建议你保存下来,后面学密钥管理时随时回来对照。
这张图把四个核心概念串起来了。对称加密和非对称加密互补使用,哈希函数为数字签名提供基础,密钥对通过证书实现身份绑定。后面讲密钥生命周期时,你会反复用到这些知识。