码桶

发现社区成员的开源项目

main
NodeNanny/data/wiki/03-network-knowledge/deeper-network-crypto-theory.md
deeper-network-crypto-theory.md4.8 KB
---
title: 网络与加密原理进阶:TLS、AEAD 与流量指纹识别
summary: protocols-overview.md 的进阶篇,讲清楚TLS握手、AEAD加密和DPI流量指纹识别背后的原理,偏理论、相对不容易过时
order: 2
updated: 2026-07-28
tags: [tls, 加密, dpi, 原理]
---


> 本文是 protocols-overview.md 的进阶篇,讲"为什么",即 DPI 具体是怎么识别流量的、各协议的抗识别能力从何而来。内容偏理论,属于相对稳定的基础知识,正确性不太会随时间过时(不像具体协议列表或检测率数字那样需要频繁复核)。

## TLS 握手大致在做什么

无论是访问普通网站还是使用 Reality/AnyTLS 这类"伪装成 TLS"的代理协议,TLS 握手要解决的都是同一个问题:**素不相识的客户端和服务器,怎么在不安全的网络上协商出一套只有双方知道的加密密钥,同时还要验证对方身份**。简化流程:

1. 客户端发一个 ClientHello,带上自己支持的加密套件列表、一个随机数,以及要访问的域名(SNI 字段,这一步是明文的,也是早期 GFW 用来按域名封锁的关键点之一)
2. 服务器回 ServerHello,选定加密套件,出示证书证明自己身份,也带上一个随机数
3. 双方基于这两个随机数 + 密钥交换算法(现在主流是 ECDHE),各自独立算出同一套会话密钥,全程密钥本身不在网络上传输
4. 后续所有应用数据都用这套会话密钥加密传输

Reality 协议的核心思路,就是"借用"一个真实网站的 TLS 证书和握手特征,让 GFW 主动探测时,看到的和真的在访问那个真实网站没有区别。AnyTLS 则是把任意代理流量包装进标准 TLS 记录层,思路上是同一类"伪装",只是实现细节不同。

## AEAD 加密具体在保护什么

现在主流代理协议(VMess、Shadowsocks-2022、Trojan 的数据层等)用的都是 AEAD(Authenticated Encryption with Associated Data)类加密算法,常见的比如 AES-GCM、ChaCha20-Poly1305。AEAD 同时做两件事:

- **保密性**:内容加密后,没有密钥无法读出原文
- **完整性/真实性**:每段密文都带一个认证标签(tag),接收方能验证这段数据"确实是持有正确密钥的一方产生的、没有被中间篡改过"——如果 GFW 主动探测时发一段伪造/篡改的数据过去,AEAD 校验会失败,连接直接断开,这也是"主动探测"这种攻击手段本身面临的天然障碍。

这也是为什么早期一些协议因为没有做认证(或认证做得不够严谨)容易被"主动探测"识别——探测方发畸形数据包,观察服务器的反应模式本身就会暴露协议特征。

## DPI 具体是怎么"看出"这是代理流量的

在流量本身已经加密、无法直接读取内容的前提下,DPI 主要依赖统计特征而不是内容本身,常见的分析维度包括:

- **包长分布**:不同协议的握手包、控制包大小往往有规律,加密并不能完全掩盖这种规律,除非协议本身做了主动的长度填充(padding)
- **时间间隔特征**:心跳包、keep-alive 的发送节奏,代理软件和普通浏览器行为不同
- **熵值分析**:真正随机的加密数据熵值接近理论最大值,而如果某个协议的密文在某些字节位置呈现出非随机的固定模式(早期协议设计缺陷),会被统计出来
- **首包/前几个包的特征匹配**:很多协议在连接建立的最初几个包里有固定的结构(哪怕内容加密了,长度和顺序模式可能不变)
- **主动探测**:怀疑某个 IP 在运行代理服务时,直接发起连接看服务器怎么响应——如果响应方式和一个正常的 HTTPS 网站不一样(比如握手失败的方式不同、对畸形请求的反应不同),就可能被标记

理解这一层,能解释 protocols-overview.md 里"为什么 TLS 伪装类协议更抗识别"这个结论的机制:Reality/AnyTLS 这类协议的目标就是让上述几个维度(包长、握手结构、对主动探测的响应)都尽量贴近一个真实网站,而不是仅仅做加密。**加密解决的是"内容是否可读",抗指纹识别解决的是"行为模式是否可疑",这是两个不同层面的问题,一个协议做好了加密不代表就抗识别。**

## 这部分内容为什么相对不容易过时

TLS 握手流程、AEAD 的设计目标、DPI 依赖统计特征而非内容这几点,是密码学和网络协议层面比较稳定的基础事实,短期内不会因为某次技术升级就整体过时。真正会变化、需要定期复核的是"具体哪个协议现在抗识别能力强/弱""GFW 具体检测率数字"这类应用层结论——这部分内容请参考 protocols-overview.md,而不是本文。