伪装这个概念在日常使用中被赋予了太多含义。本文把它收缩到工程定义上:处理连接建立阶段的可观察特征,使会话结构在统计上不显眼。然后逐条澄清常见误解。
最常见的误解是认为做了伪装就等于数据被保护。两者处理的对象完全不同:加密处理的是数据内容,让截获者无法读懂;伪装处理的是连接结构,让观察者难以仅凭握手形态对协议分类。
可以这样区分:把密文放进一个特征明显的信封里,信封的形状会暴露这是哪一类信件,但内容依然是密文。伪装做的是让信封形状不再特殊,加密保证的是内容不可读。缺任何一项,保护都是不完整的。
伪装的生效范围是连接建立阶段:握手往返次数、首包长度、参数呈现顺序。数据传输阶段的外观由整形引擎负责,两者覆盖的阶段不同。
明确分工还有一个实际好处:避免同一数据包被两个环节重复调整。首包按伪装的目标形态处理,后续包交由整形按分布式策略处理。若两者都介入同一个包,调整结果可能相互抵消,反而制造出非预期的形态。
这是最需要澄清的一条。伪装降低的是被简单静态特征匹配命中的概率,不等于不可识别。识别与处理处于相互演进的状态:当一类特征被处理掉,观察方会转向其他可用维度,例如连接的时序分布、会话持续时长、流量体量。
因此"无法被识别"这类表述既不可验证,也会让使用者对风险产生错误预期。更负责的说法是:降低了某一类匹配方式的命中概率,并持续跟进调整。
会话持续多久、一共传输了多少数据、在一天中的什么时段建立连接——这些属于行为特征,由业务需求决定,不由协议外观决定。外观处理能力对它们没有作用。
把行为特征算作伪装效果,是一种范围扩大。准确的边界划分是:协议特征(握手结构、包长分布、发送节奏)属于覆盖范围;行为特征(时长、体量、时间规律)不属于。
| 维度 | 是否在覆盖范围 | 说明 |
|---|---|---|
| 握手往返次数 | 是 | 一致化到常规加密会话的常见取值 |
| 首包长度与参数顺序 | 是 | 规范化处理,不影响协商结果正确性 |
| 包长分布 | 是 | 由整形引擎按分布式策略处理 |
| 发送间隔周期性 | 是 | 去周期化,偏移窗口受协议时序约束 |
| 承载端口占用时长 | 是 | 由端口跳跃处理 |
| 会话持续时长 | 否 | 由业务需求决定,属行为特征 |
| 总流量体量 | 否 | 由业务需求决定,属行为特征 |
| 连接建立的时间规律 | 否 | 由使用习惯决定,属行为特征 |
边界清楚带来两个实际好处。对使用者而言,可以正确预期能力范围,不会把"外观处理"误解为"全面隐身"而在其他维度上忽略风险。对工程而言,明确的边界界定了后续优化的方向——哪些维度已经处理、哪些是已知的空白。