# Traffic Obfuscation vs. Encrypted-Traffic Inspection

**FIBEMATE 流量混淆策略对抗 PrivDPI/Pine 类密文检查的评估**
日期：2026-08-31 · 关联文献：Ning et al., *PrivDPI* (CCS'19), *Pine* (ESORICS'20, Best Paper)

---

## 1. 背景

FIBEMATE 的 WS 通道实现了三层流量混淆策略，目标是把"加密流量元数据可区分性"压到接近随机：

| 策略 | 机制 | 设计目标 |
|------|------|---------|
| **StaticPad** | 每个消息附加固定长度填充 | 消除明文长度侧信道 |
| **PerPhase** | 按会话阶段（握手/稳定/结束）切换填充档位 | 让长度分布随阶段演化，破坏跨阶段指纹 |
| **BudgetPool** | 按预算池（J=1000/3000）随机分配填充预算 | 制造"预算耗散"的随机行为，对抗统计分类器 |

实测（FIBEMATE 自测）：`BudgetPool(J=3000)` 把流量分析器准确率压至 **53.3%（≈随机）**，代价 16ms 延迟。

## 2. PrivDPI/Pine 的攻击模型（对照）

PrivDPI / Pine 解决的**不是**流量分析，而是"中间盒如何在**密文上**做 DPI 而不泄露规则"。但它们的威胁模型与本项目混淆策略直接相关：

| 维度 | PrivDPI/Pine 假设 | 对 FIBEMATE 混淆的启示 |
|------|------------------|----------------------|
| 中间盒能力 | 可观察密文 + 可执行受限匹配 | 攻击者能统计**密文长度/时序/方向**分布 → 混淆必须对抗这些统计量 |
| 规则集 | 规则对中间盒隐藏 | 类比：流量模式指纹（padding 档位、发包节奏）应对观测者隐藏 |
| 动态更新 | Pine 支持动态加规则 | 类比：混淆档位必须**动态演化**（PerPhase 正是此意） |

**结论**：PrivDPI 证明了"密文上的模式可被匹配"（对 DPI 是能力，对混淆是威胁）——即攻击者理论上可对 FIBEMATE 密文做模式学习。混淆策略的对抗目标是让**可学习模式不存在或频繁变化**。

## 3. 三策略对抗强度评估

### 3.1 StaticPad — 对抗：长度指纹
- **有效对抗**：固定填充消除单条消息长度分布特征 ✅
- **弱点**：若填充长度在会话内不变，攻击者可聚类"固定长度组"；且**批次消息数**仍是侧信道（发 N 条 vs M 条）
- **评级**：🟡 基础防御，单独使用不足

### 3.2 PerPhase — 对抗：跨阶段指纹
- **有效对抗**：阶段切换破坏"整段会话一种模式"的平稳性 ✅
- **弱点**：阶段切换点本身可被检测（时序突跳）；阶段数有限时枚举成本低
- **评级**：🟡 有效补充，需要配合随机切换时机

### 3.3 BudgetPool — 对抗：统计分类器
- **有效对抗**：预算随机耗散使聚合统计量趋近均匀（实测 53.3%≈随机）✅
- **弱点**：**预算耗尽后的行为**是强指纹（耗尽时回退到无填充 = 可检测状态）；J 值固定可被反向估计
- **评级**：🟢 最强策略，仍需处理"耗尽态"泄漏

### 3.4 整体
- 三策略组合 ≈ 多粒度对抗（长度 + 阶段 + 统计），优于任何单一策略
- **与 PrivDPI 类攻击的关系**：PrivDPI 不针对时序/长度统计（它针对内容规则匹配），因此 FIBEMATE 混淆与其不直接冲突；但 PrivDPI 的"可复用混淆规则"（Obfuscated Rules）思路提示：**填充规则本身应定期混淆/轮换**——当前实现未覆盖

## 4. 差距与改进建议

| # | 差距 | 建议 | 优先级 |
|---|------|------|--------|
| 1 | BudgetPool 耗尽态回退泄漏 | 耗尽前提前切换 PerPhase 档位；预算池引入"借支"避免硬回退 | P1 |
| 2 | 填充规则静态（无轮换） | 参考 PrivDPI 的 Reusable Obfuscated Rules：周期性更换填充多项式/随机种子 | P1 |
| 3 | 发包时序未混淆 | 增加 jitter + 消息批处理窗口（参考 Tor 的 batching） | P2 |
| 4 | 无对抗性评估基线 | 引入 PrivDPI 式密文模式学习器做持续评估（当前仅静态准确率 53.3% 单点） | P2 |

## 5. 结论

- FIBEMATE 的 StaticPad + PerPhase + BudgetPool 组合在**统计分类对抗**上有效（53.3%≈随机），但在**规则轮换**与**耗尽态**存在两个可预防缺口
- PrivDPI/Pine 的核心教训是"密文模式可被匹配 + 规则需隐藏"——映射到混淆侧即"填充模式可被学习 + 填充规则需动态化"
- 建议优先落地差距 #1、#2（均可在 ws-padding.js 内完成，无协议变更）
