3. 密码学基础回顾:对称加密与非对称加密、哈希函数与消息认证码、数字签名与证书
各位同学,咱们今天不急着直接抓包。做网络安全这么多年,我有个很深的体会:TLS 握手玩来玩去,核心就是密码学那几板斧。你要是没把这几个概念吃透,看握手包就跟看天书一样。
说白了,TLS 要解决三个问题:
- 保密性 —— 数据不能被别人偷看
- 完整性 —— 数据不能被篡改
- 身份认证 —— 确保对方不是冒牌货
这三个目标,分别对应着对称加密、哈希函数/消息认证码、数字签名/证书。咱们一个一个来拆。
3.1 对称加密
对称加密,就是加密和解密用同一把钥匙。你想想看,就像你家里的大门,用一把钥匙锁上,也用同一把钥匙打开。
常见的对称加密算法有:
| 算法 | 密钥长度 | 特点 |
|---|---|---|
| AES | 128 / 192 / 256 位 | 目前最主流,硬件加速支持好 |
| ChaCha20 | 256 位 | 移动端性能优秀,Google 力推 |
| DES / 3DES | 56 / 112 位 | 已淘汰,别用了 |
对称加密最大的优势是快。但问题也很明显——密钥怎么安全地传给对方?你总不能明文发吧?这就引出了非对称加密。
3.2 非对称加密
非对称加密,有一对钥匙:公钥和私钥。公钥可以公开,私钥自己藏好。
它的核心逻辑就两句话:
- 公钥加密,私钥解密 —— 用于加密传输
- 私钥签名,公钥验签 —— 用于身份认证
常见的非对称加密算法:
| 算法 | 典型密钥长度 | 用途 |
|---|---|---|
| RSA | 2048 / 4096 位 | 加密、签名 |
| ECDSA | 256 位(等效 RSA 3072) | 签名(更短更高效) |
| Ed25519 | 256 位 | 签名(现代首选) |
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 的签名是否有效。只要证书是合法的,公钥就是可信的。
3.5 知识体系总览
下面这张图,把上面讲的内容串起来了。你仔细看,TLS 握手的每一步,都能在这张图里找到对应的密码学组件。
3.6 小结
这一章的内容,是后面所有抓包分析的基础。你记住一句话:TLS 握手,就是用非对称加密安全地协商出对称密钥,然后用对称密钥加密通信,中间用哈希和 MAC 保证数据没被动手脚,最后用证书证明你是谁。