1. 密码学基础回顾:对称加密与非对称加密的核心区别,哈希函数的作用,数字签名与证书体系

各位好,我是老周。今天咱们开始第一课。

说实话,密码学这东西,很多人一听就头大。觉得全是数学公式、抽象概念。但我做了十几年安全架构,我的体会是——你不需要成为数学家,但必须理解这几块基石是怎么咬合的。

咱们先搭个框架,把对称加密、非对称加密、哈希、签名、证书这五样东西的关系理清楚。后面讲性能调优时,你才知道该在哪个环节下刀。

核心观点:密码学的本质不是「加密」,而是「在不可信信道上建立可信通信」。对称加密解决速度,非对称加密解决密钥分发,哈希解决完整性,签名解决身份,证书解决信任链。

密码学基础核心知识体系 密码学基础核心知识体系 密码学基础 对称加密 非对称加密 哈希函数 数字签名 证书体系 核心特点 加密/解密用同一密钥 速度快,适合大量数据 核心特点 公钥/私钥成对出现 速度慢,用于密钥交换 核心特点 不可逆,定长输出 防篡改,验证完整性 核心特点 私钥签名,公钥验签 防抵赖,确认身份 核心特点 CA签发,绑定公钥 建立信任链 实际应用:TLS/SSL = 非对称加密(握手) + 对称加密(数据传输) + 哈希(完整性) + 签名(身份) + 证书(信任) 性能平衡点:非对称只用于握手,对称加密批量数据,哈希做消息认证码

1.1 对称加密:快,但密钥怎么给?

对称加密,说白了就是一把钥匙开一把锁。加密和解密用同一个密钥。

我最早接触这玩意儿是在做嵌入式设备时。设备之间要传配置数据,用 AES-128 加密,速度飞快。但问题来了——密钥怎么安全地发给对方?

算法 密钥长度 速度 典型场景
AES 128 / 192 / 256 bit 极快(硬件加速) 文件加密、VPN、磁盘加密
ChaCha20 256 bit 快(无硬件加速时优于 AES) 移动端、IoT 设备
SM4 128 bit 快 国密标准,国内商用
3DES 168 bit 慢(已淘汰) 遗留系统兼容

我的经验:性能敏感场景优先选 AES-128-GCM。GCM 模式自带认证,省掉额外算 HMAC 的开销。我曾经帮一个视频流平台做优化,从 AES-256-CBC 切到 AES-128-GCM,吞吐量提升了 40%,而且安全性没降。

对称加密的致命伤是什么?密钥分发。你想想看,如果两个人相隔千里,怎么安全地共享同一个密钥?靠电话念?靠快递寄U盘?都不靠谱。这就引出了非对称加密。

1.2 非对称加密:慢,但解决了密钥分发

非对称加密,公钥加密,私钥解密。公钥随便发,私钥自己藏好。

我记得第一次在项目中用 RSA 做密钥交换时,被性能吓了一跳。2048 位的 RSA,一次私钥操作要好几毫秒。相比之下,AES 加密 1MB 数据也就几十微秒。差了上百倍。

算法 密钥长度 相对速度 安全性
RSA 2048 / 4096 bit 慢 基于大整数分解
ECC (ECDH / ECDSA) 256 / 384 bit 快(同等安全强度下) 基于椭圆曲线离散对数
SM2 256 bit 快 国密标准,基于 ECC
DSA 2048 bit 中等 仅用于签名,已边缘化

避坑指南:我曾经见过一个团队,用 RSA-4096 做每一次 API 请求的加密。结果服务器 CPU 直接飙到 100%。非对称加密只适合做握手和密钥交换,千万别拿它加密业务数据。

那实际中怎么用?混合加密。用非对称加密交换对称密钥,然后用对称加密加密实际数据。TLS 握手就是这么干的。

1.3 哈希函数:不是加密,是「指纹」

哈希函数,很多人误以为它是加密。其实不是。加密可逆,哈希不可逆。

哈希的作用就三个字:防篡改。你下载一个文件,网站给你一个 SHA-256 值。你算一下,对得上,说明文件没被改过。

哈希的核心特性:

  • 单向性:从哈希值反推原文,理论上不可能
  • 抗碰撞性:找不到两个不同输入有相同输出
  • 定长输出:不管输入多大,输出固定长度(SHA-256 就是 256 bit)
  • 雪崩效应:输入改一个 bit,输出完全变样
算法 输出长度 安全性状态 推荐场景
SHA-256 256 bit 安全 通用场景,TLS 1.3
SHA-3 可变 安全 新系统,抗量子攻击潜力
SM3 256 bit 安全 国密标准
MD5 / SHA-1 128 / 160 bit 已破解 仅用于校验,不用于安全

我的习惯:存储密码时,不要只做一次哈希。一定要加盐(salt),而且用慢哈希算法,比如 bcrypt 或 Argon2。我曾经审计过一个系统,直接用 MD5 存密码,结果拖库后 5 分钟就破解了 80% 的密码。

1.4 数字签名:证明「是你签的」

数字签名,说白了就是用私钥给哈希值加密。

流程很简单:

  1. 发送方对消息做哈希,得到摘要
  2. 用私钥加密这个摘要,得到签名
  3. 接收方用公钥解密签名,得到摘要 A
  4. 接收方自己对消息做哈希,得到摘要 B
  5. 如果 A == B,说明消息没被改,且确实是私钥持有者签的

这里有个关键点:签名不是加密消息本身,而是加密消息的哈希。为什么?因为非对称加密太慢,哈希很短(比如 32 字节),加密它很快。

避坑指南:我曾经遇到一个项目,他们用 RSA 直接加密整个消息体来做「签名」。结果消息体 10KB,RSA 加密一次要几十毫秒,并发一高直接挂掉。正确的做法是先哈希,再签名。

1.5 证书体系:谁来证明公钥是真的?

好,现在问题来了。你拿到了对方的公钥,怎么确定这个公钥真的是对方的?

这就是证书体系(PKI)要解决的问题。

证书就是一个数字身份证,里面包含:

  • 持有者的身份信息(域名、组织名等)
  • 持有者的公钥
  • 证书颁发机构(CA)的签名
  • 有效期、序列号等元数据

信任链是这样的:

  1. 根 CA 自签名(信任的起点)
  2. 根 CA 签发中间 CA
  3. 中间 CA 签发终端证书
  4. 你的浏览器/操作系统内置了根 CA 证书

一句话总结:证书体系就是「你信任 CA,CA 担保这个公钥是张三的,所以你可以信任这个公钥」。没有证书体系,非对称加密就是空中楼阁。

证书类型 验证级别 典型用途
DV(域名验证) 低 个人网站、测试环境
OV(组织验证) 中 企业官网、API 服务
EV(扩展验证) 高 金融、政务等高安全场景

我的建议:内部系统可以用自签名证书,但一定要自己维护 CA 和证书吊销列表(CRL)。我见过一个公司,所有内部服务都用自签名证书,但证书过期了没人管,结果线上服务全部中断。嗯,那个周末我是在机房度过的。

小结

好了,这一章的内容就这些。咱们把五块基石都过了一遍:

  • 对称加密:快,但密钥分发难
  • 非对称加密:慢,但解决了密钥分发
  • 哈希函数:不可逆,防篡改
  • 数字签名:私钥签名,公钥验签,防抵赖
  • 证书体系:CA 担保公钥的真实性