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 哈希函数:数据的「指纹」

哈希函数,说白了就是把任意长度的数据,压缩成固定长度的「摘要」。这个摘要就像人的指纹——数据变了,指纹一定变;但指纹不能反推出人的长相。

哈希函数有三个核心特性:

  1. 单向性:从哈希值无法还原原始数据
  2. 抗碰撞性:很难找到两个不同数据有相同的哈希值
  3. 雪崩效应:输入改一个比特,输出天翻地覆

我曾经踩过一个坑:项目里用 MD5 做文件完整性校验,结果被攻击者伪造了文件。为什么?因为 MD5 已经被证明可以人为制造碰撞。从那以后,我再也不敢用 MD5 做安全相关的校验了。

算法 输出长度 安全性
MD5 128 位 已破解,仅用于非安全场景
SHA-1 160 位 已破解,建议弃用
SHA-256 256 位 目前安全,推荐使用
SM3 256 位 国密标准,国内合规首选

1.4 数字签名:谁说「我」说的,谁说「我」没改过

数字签名解决两个问题:

  • 身份认证:证明消息确实是你发的
  • 完整性:证明消息没有被篡改

它的工作流程是这样的:

  1. 发送方对消息做哈希,得到摘要
  2. 用发送方的私钥对摘要加密,这就是签名
  3. 接收方用发送方的公钥解密签名,得到摘要 A
  4. 接收方对收到的消息做哈希,得到摘要 B
  5. 对比 A 和 B,一致则验证通过

关键点:数字签名用的是私钥签名、公钥验证。这和加密正好相反——加密是公钥加密、私钥解密。千万别搞混了,我见过有人把这两个概念颠倒,结果签名验证永远通不过。

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

好,现在问题来了:你怎么确定你拿到的公钥就是对方的?万一中间人把公钥调包了呢?

数字证书就是干这个的。它由权威机构(CA)签发,把公钥和持有者的身份信息绑定在一起。CA 用自己的私钥给证书签名,你只要信任 CA,就信任了证书里的公钥。

证书里包含什么?

  • 持有者的公钥
  • 持有者的身份信息(域名、公司名等)
  • CA 的信息
  • 证书有效期
  • CA 的数字签名

我的习惯:在项目中,我通常会维护一个 CA 证书白名单,只信任特定的 CA。别把系统里所有根证书都信任,那样等于把安全大门敞开了。

1.6 知识体系总览

下面这张图把今天讲的核心关系串起来了。你仔细看,每个组件都有自己的位置,缺一不可。

密码学基础:核心组件与关系 对称加密 AES / SM4 加密大量数据 非对称加密 RSA / ECC / SM2 密钥分发 + 签名 哈希函数 SHA-256 / SM3 数据指纹 混合 私钥签名 数字签名 身份认证 + 完整性 摘要 绑定身份 数字证书 公钥 + 身份 + CA 签名 核心关系: 非对称加密解决密钥分发 → 数字签名解决身份认证和完整性 → 数字证书解决公钥信任问题 哈希函数作为「粘合剂」,为签名提供高效的数据摘要

1.7 它们之间的关系

讲到这里,你应该能看出来了:这四个东西不是孤立的,而是一条完整的信任链。

  • 对称加密负责干活——加密数据,速度快
  • 非对称加密负责安全分发——传递对称密钥,顺便做签名
  • 哈希函数负责浓缩——把任意数据变成固定长度的摘要
  • 数字证书负责信任——确保你拿到的公钥是真的

一句话总结:没有哈希,签名效率太低;没有非对称加密,密钥没法安全分发;没有数字证书,你不敢信任任何人的公钥。这四个东西合在一起,才构成了现代密码体系的基石。

避坑指南:我曾经接手过一个项目,团队自己实现了「签名」逻辑——用对称加密的密钥对数据做 MAC,然后告诉客户这是数字签名。结果客户审计时直接不通过。记住:数字签名必须用非对称密钥对,这是行业标准,也是法律要求。