1. 密码学基础:对称加密与非对称加密、哈希函数、数字签名与数字证书的关系
各位同学,咱们今天聊点实在的。密码学这东西,听起来高大上,其实说白了就是一套「锁和钥匙」的游戏规则。我做了这么多年安全开发,见过太多人把签名和加密搞混,也见过不少项目因为密钥管理不当直接翻车。嗯,咱们先把地基打牢。
1.1 对称加密:一把钥匙开一把锁
对称加密,顾名思义,加密和解密用的是同一把密钥。就像你家的门锁,钥匙只有一把,你用它锁门,也用它开门。
核心特点:速度快、效率高,适合加密大量数据。但密钥分发是个大麻烦——你怎么安全地把钥匙交给对方?
我在项目中遇到过这样一个场景:两个微服务之间需要传输敏感数据,一开始团队图省事,直接用对称加密,密钥硬编码在代码里。结果代码泄露到 GitHub 上……嗯,那场面,大家懂的。
常见的对称加密算法:
| 算法 | 密钥长度 | 特点 |
|---|---|---|
| AES | 128/192/256 位 | 目前最主流,硬件加速支持好 |
| DES | 56 位 | 已过时,暴力破解只需几天 |
| 3DES | 112/168 位 | DES 的升级版,但效率低,逐步淘汰 |
| SM4 | 128 位 | 国密标准,国内项目常用 |
我的建议:新项目直接上 AES-256。别碰 DES,也别自己魔改算法——你以为的「增强」,往往是给黑客送人头。
1.2 非对称加密:公钥私钥,各司其职
非对称加密就聪明多了。它有一对密钥:公钥可以公开,私钥自己藏好。公钥加密的数据,只有私钥能解开;反过来,私钥签名的东西,公钥可以验证。
你想想看,这解决了什么问题?密钥分发!你不需要偷偷摸摸把密钥传给对方,直接把公钥扔到网上就行。私钥永远不出门。
常见的非对称加密算法:
- RSA:最经典,2048 位起步,但性能是硬伤
- ECC(椭圆曲线):同等安全强度下,密钥更短、速度更快
- SM2:国密标准,基于椭圆曲线,国内政企项目必选
注意:非对称加密虽然解决了密钥分发问题,但性能比对称加密慢 1000 倍以上。所以实际应用中,我们通常用非对称加密来传输对称密钥,再用对称加密来加密业务数据——这叫「混合加密」。
1.3 哈希函数:数据的「指纹」
哈希函数,说白了就是把任意长度的数据,压缩成固定长度的「摘要」。这个摘要就像人的指纹——数据变了,指纹一定变;但指纹不能反推出人的长相。
哈希函数有三个核心特性:
- 单向性:从哈希值无法还原原始数据
- 抗碰撞性:很难找到两个不同数据有相同的哈希值
- 雪崩效应:输入改一个比特,输出天翻地覆
我曾经踩过一个坑:项目里用 MD5 做文件完整性校验,结果被攻击者伪造了文件。为什么?因为 MD5 已经被证明可以人为制造碰撞。从那以后,我再也不敢用 MD5 做安全相关的校验了。
| 算法 | 输出长度 | 安全性 |
|---|---|---|
| MD5 | 128 位 | 已破解,仅用于非安全场景 |
| SHA-1 | 160 位 | 已破解,建议弃用 |
| SHA-256 | 256 位 | 目前安全,推荐使用 |
| SM3 | 256 位 | 国密标准,国内合规首选 |
1.4 数字签名:谁说「我」说的,谁说「我」没改过
数字签名解决两个问题:
- 身份认证:证明消息确实是你发的
- 完整性:证明消息没有被篡改
它的工作流程是这样的:
- 发送方对消息做哈希,得到摘要
- 用发送方的私钥对摘要加密,这就是签名
- 接收方用发送方的公钥解密签名,得到摘要 A
- 接收方对收到的消息做哈希,得到摘要 B
- 对比 A 和 B,一致则验证通过
关键点:数字签名用的是私钥签名、公钥验证。这和加密正好相反——加密是公钥加密、私钥解密。千万别搞混了,我见过有人把这两个概念颠倒,结果签名验证永远通不过。
1.5 数字证书:把公钥和身份绑在一起
好,现在问题来了:你怎么确定你拿到的公钥就是对方的?万一中间人把公钥调包了呢?
数字证书就是干这个的。它由权威机构(CA)签发,把公钥和持有者的身份信息绑定在一起。CA 用自己的私钥给证书签名,你只要信任 CA,就信任了证书里的公钥。
证书里包含什么?
- 持有者的公钥
- 持有者的身份信息(域名、公司名等)
- CA 的信息
- 证书有效期
- CA 的数字签名
我的习惯:在项目中,我通常会维护一个 CA 证书白名单,只信任特定的 CA。别把系统里所有根证书都信任,那样等于把安全大门敞开了。
1.6 知识体系总览
下面这张图把今天讲的核心关系串起来了。你仔细看,每个组件都有自己的位置,缺一不可。
1.7 它们之间的关系
讲到这里,你应该能看出来了:这四个东西不是孤立的,而是一条完整的信任链。
- 对称加密负责干活——加密数据,速度快
- 非对称加密负责安全分发——传递对称密钥,顺便做签名
- 哈希函数负责浓缩——把任意数据变成固定长度的摘要
- 数字证书负责信任——确保你拿到的公钥是真的
一句话总结:没有哈希,签名效率太低;没有非对称加密,密钥没法安全分发;没有数字证书,你不敢信任任何人的公钥。这四个东西合在一起,才构成了现代密码体系的基石。
避坑指南:我曾经接手过一个项目,团队自己实现了「签名」逻辑——用对称加密的密钥对数据做 MAC,然后告诉客户这是数字签名。结果客户审计时直接不通过。记住:数字签名必须用非对称密钥对,这是行业标准,也是法律要求。