一、加密基础:对称加密与非对称加密原理、哈希函数与消息认证码、数字签名与证书体系
加密这件事,说穿了就是「把明文变成只有持有钥匙的人才能看懂的东西」。我在早期做DevOps时,总觉得加密是安全团队的事,直到有一次CI/CD流水线泄露了数据库连接串…嗯,从那以后我恨不得给每个配置文件都上锁。今天咱们就把这四大块掰开揉碎,把原理讲透。
1.1 对称加密:一把钥匙开一把锁
对称加密,顾名思义——加密和解密用的是同一把密钥。你想想看,就像你家里的门锁,同一把钥匙既能锁门也能开门。这种方式速度极快,适合加密大量数据。
常见对称加密算法
| 算法 | 密钥长度 | 特点 |
|---|---|---|
| AES | 128/192/256 bits | 目前最常用,硬件加速支持好 |
| DES | 56 bits | 太短了,已被破解 |
| 3DES | 112/168 bits | DES的改进,但效率低 |
| SM4 | 128 bits | 国密标准,国内项目常用 |
我在刚接手一个金融项目时,对方要求必须用国密。当时我还不熟悉SM4,专门啃了一遍文档。说白了,SM4和AES的加密模式差不多,只是算法细节不同。如果你要在国内政企项目里混,国密是绕不开的。
1.2 非对称加密:公钥私钥各司其职
非对称加密就高级一些了——一对密钥:公钥公开,私钥保密。公钥加密的数据只有私钥能解开;反过来,私钥签名,公钥验证。这样我们再也不需要担心密钥传输问题了。
但你也猜得到,它比对称加密慢得多(大概慢100~1000倍)。所以实际应用中,我们通常用非对称加密来协商对称密钥,再交给对称加密去处理大数据——这就是混合加密的思路。
常见非对称算法对比
| 算法 | 安全性基础 | 密钥长度 | 性能 |
|---|---|---|---|
| RSA | 大整数分解 | 2048/4096 bits | 较慢,密钥越长越慢 |
| ECC(椭圆曲线) | 椭圆曲线离散对数 | 256 bits(等效RSA 3072) | 快,密钥短 |
| SM2 | 椭圆曲线(国密) | 256 bits | 同ECC,国内适用 |
我个人更喜欢ECC。RSA 4096 bits的密钥文件动辄几KB,而ECC 256 bits的密钥只有几十字节。特别是在IoT设备或TLS握手场景里,这个差异很明显。我记得有次优化一个微服务间的TLS握手延迟,把RSA换成ECC,握手时间直接从150ms降到了30ms。
1. 客户端生成临时对称密钥(会话密钥)。
2. 用服务器公钥加密这个会话密钥,发送给服务器。
3. 服务器用私钥解密,获得会话密钥。
4. 双方用这个对称密钥进行后续通信。
1.3 哈希函数与消息认证码
哈希函数是个单向的黑盒——输入任意长度的数据,输出固定长度的摘要,而且从摘要推不出原文。它不加密,但用来验证完整性特别顺手。
哈希函数的硬性要求
- 抗原像性:给定哈希值,无法反推出原文。
- 抗第二原像性:给定原文和哈希,找不到另一个原文使哈希相同。
- 抗碰撞性:找不到任意两个不同的原文有相同哈希。
常用哈希算法
| 算法 | 输出长度 | 安全性状态 |
|---|---|---|
| MD5 | 128 bits | 已被碰撞攻击,别用了 |
| SHA-1 | 160 bits | 理论已不安全,弃用 |
| SHA-256 | 256 bits | 目前推荐,足够安全 |
| SHA-3 | 可配置 | 最新标准,但还没全面普及 |
| SM3 | 256 bits | 国密哈希,国内项目必选 |
你可能会问:哈希不是能验证文件有没有被改过吗?那为什么还需要消息认证码(MAC)?
因为哈希只是保证数据没变,但不能验证是谁发的。中间人可以篡改后重新计算哈希值告诉你“文件是完整的”。所以我们需要HMAC(基于哈希的消息认证码)——它把密钥和消息混在一起哈希。只有持有密钥的人才能生成正确的MAC。我做过一个配置下发服务,每个配置文件都附上HMAC,客户端验证通过才加载,这样即使配置被劫持,攻击者也伪造不了。
1.4 数字签名与证书体系
数字签名,说白了就是用私钥对消息的哈希值做非对称加密。接收方用公钥解密,比对哈希值。如果一致,说明消息确实来自私钥持有者,且未被篡改。
- 发送方计算消息的哈希值。
- 用私钥加密哈希值,得到签名。
- 发送方把消息和签名一起发给接收方。
- 接收方用公钥解密签名,得到原始哈希值。
- 接收方自己计算消息的哈希值,比对。
但这里有个大问题:你怎么确保你拿到的公钥真的是对方的?万一中间人替换了公钥呢?
这就引出了证书体系(PKI)。证书本质上是把一个公钥和身份信息绑在一起,然后由一个大家都信任的机构(CA,证书颁发机构)给它签名。你只要信任CA,就可以通过CA的签名来信任证书里的公钥。
证书链长这样
- 根证书:自签名,浏览器/操作系统内置。
- 中间证书:由根证书签名,用于签发最终证书。
- 服务器证书:包含网站域名和公钥,由中间证书签名。
1.5 知识体系总览
下面这张图把本讲的核心知识点串到了一起。你可以把它当个记忆地图,后面学具体流程时随时回来瞄一眼。
以上就是加密基础的四个支点。理解这些概念,后面讲具体协议和工具时,你就会发现它们都离不开这里面的某个原理。嗯,咱们继续。