3. 密码学基础回顾:对称加密与非对称加密、哈希函数与消息认证码、数字签名与证书

各位同学,咱们今天不急着直接抓包。做网络安全这么多年,我有个很深的体会:TLS 握手玩来玩去,核心就是密码学那几板斧。你要是没把这几个概念吃透,看握手包就跟看天书一样。

说白了,TLS 要解决三个问题:

  • 保密性 —— 数据不能被别人偷看
  • 完整性 —— 数据不能被篡改
  • 身份认证 —— 确保对方不是冒牌货

这三个目标,分别对应着对称加密、哈希函数/消息认证码、数字签名/证书。咱们一个一个来拆。

3.1 对称加密

对称加密,就是加密和解密用同一把钥匙。你想想看,就像你家里的大门,用一把钥匙锁上,也用同一把钥匙打开。

常见的对称加密算法有:

算法 密钥长度 特点
AES 128 / 192 / 256 位 目前最主流,硬件加速支持好
ChaCha20 256 位 移动端性能优秀,Google 力推
DES / 3DES 56 / 112 位 已淘汰,别用了
个人经验:我在项目中遇到过有人还在用 3DES,说是"兼容老系统"。我直接建议他升级到 AES-128-GCM,性能翻倍还更安全。别为了兼容性牺牲安全性,不值得。

对称加密最大的优势是快。但问题也很明显——密钥怎么安全地传给对方?你总不能明文发吧?这就引出了非对称加密。

3.2 非对称加密

非对称加密,有一对钥匙:公钥和私钥。公钥可以公开,私钥自己藏好。

它的核心逻辑就两句话:

  • 公钥加密,私钥解密 —— 用于加密传输
  • 私钥签名,公钥验签 —— 用于身份认证

常见的非对称加密算法:

算法 典型密钥长度 用途
RSA 2048 / 4096 位 加密、签名
ECDSA 256 位(等效 RSA 3072) 签名(更短更高效)
Ed25519 256 位 签名(现代首选)
避坑指南:我曾经见过一个项目,直接用 RSA 加密大文件,结果性能惨不忍睹。非对称加密很慢,通常只用来加密对称密钥(密钥交换),真正的数据加密还是交给 AES。

3.3 哈希函数与消息认证码

哈希函数,就是把任意长度的数据,压缩成一个固定长度的"指纹"。这个指纹是唯一的,改一个比特,指纹就完全变了。

常见的哈希算法:

  • SHA-256 —— 目前最常用,TLS 1.3 的标配
  • SHA-384 / SHA-512 —— 更高安全等级
  • MD5 / SHA-1 —— 已破解,千万别用

但哈希函数有个问题:它只能保证数据没被改,但不能证明是谁发的。这时候就需要消息认证码(MAC)。

MAC 的原理很简单:把数据和共享密钥一起做哈希。只有知道密钥的人才能生成正确的 MAC。TLS 里用的 HMAC(Hash-based MAC),就是基于哈希的 MAC。

核心记忆点:

  • 哈希:防篡改,但不防伪造
  • MAC:防篡改 + 防伪造(需要共享密钥)

3.4 数字签名与证书

数字签名,就是非对称加密的"私钥签名"应用。你用自己的私钥对一段数据签名,别人用你的公钥验证签名。这样就能证明:数据确实是你发的,而且没被改过。

但问题又来了——你怎么证明这个公钥就是你的?万一中间人伪造了一个公钥呢?

这就轮到数字证书出场了。

证书,说白了就是CA(证书颁发机构)给你做的一个电子身份证。里面包含:

  • 你的公钥
  • 你的身份信息(域名、组织名等)
  • CA 的数字签名
  • 有效期、序列号等

浏览器里预置了根证书,可以验证 CA 的签名是否有效。只要证书是合法的,公钥就是可信的。

我个人的习惯:在排查 TLS 握手问题时,我第一件事就是看证书链是否完整。很多自签名证书或者中间证书缺失的问题,Wireshark 里一眼就能看出来。

3.5 知识体系总览

下面这张图,把上面讲的内容串起来了。你仔细看,TLS 握手的每一步,都能在这张图里找到对应的密码学组件。

TLS 密码学基础体系 TLS 密码学基础体系 保密性 完整性 身份认证 对称加密(AES / ChaCha20) 哈希函数 / HMAC 数字签名 / 证书 非对称加密(RSA / ECDHE) 密钥派生(HKDF / PRF) PKI / CA 信任链 TLS 握手协议 ClientHello → ServerHello → 证书 → 密钥交换 → Finished 💡 核心逻辑: 非对称加密做密钥交换和身份认证 → 对称加密做数据加密 → 哈希/MAC 保证完整性 → 证书保证公钥可信

3.6 小结

这一章的内容,是后面所有抓包分析的基础。你记住一句话:TLS 握手,就是用非对称加密安全地协商出对称密钥,然后用对称密钥加密通信,中间用哈希和 MAC 保证数据没被动手脚,最后用证书证明你是谁。