REALITY 代理隧道的有效检测方法: 被动、主动与确定性三层实证研究
摘要 --- 本文报告对 XTLS/REALITY 伪装隧道的检测研究成果,基于受控实验证据链(主观测批次 2026-08-31,版本 Xray-core v26.3.27;复核批次 2026-09-01,版本 v26.7.28 及 v26.4~v26.7.11 共九个官方发布版本;其余版本未测)。经 120+ 组受控实验与真实公网复核,结论收敛为三层结构:七类被动/行为信号、三类主动探测、一层确定性审计 。§1 为十分钟决策路径;逐方法机理、判据与失效边界见 §3-§6;全部实测明细表与复现手册见附录;本文不含任何修复建议与攻击性用途。
合规与受众声明(全文免责声明集中于此,正文不再重复)
受众与分发:仅向部分网络安全研究人员开放(身份确认+授权+合规);不向不特定公众分发。
主动探测执行域:§4 各方法仅可在自建、自有权或经明确授权的网络内执行,须限带宽限速。
外推限制:全部结论的受用范围以 §1.2 版本效力表为准;表列之外的任何版本与网络环境未测,结论不外推;本文不构成对协议方的修复建议。
对照合法性:跨协议形态对照(如以 TLS 1.2 会话验证 TLS 1.3 判据)与跨批次混用未统一口径的数据,在本文方法学下非法;历史数据中出现过该类混杂(§3.2 注),均已标注并降权为参考。
密钥声明:附录 B 配置仅含测试床密钥,不代表任何生产部署。
术语速览:认证路径=服务端解析客户端 Hello 内认证数据成功后以自有 TLS fork 栈终结会话;回落路径=认证数据无效时向预配置真实站点(decoy)端到端透明转发;载荷长度=TLS 记录头长度域值;含头总长=载荷+5 字节记录头;飞行(flight)=一次握手方向上的记录批;RTT=观测点到目标的往返时延。记录长度逐表注明口径(载荷/含头),跨批次对比前必须统一口径。
1 十分钟决策路径(管理层与值守读者读本节即可)
1.1 三层结论总表
| 层 | 方法 | 一句话判定 | 实测强度 |
|---|---|---|---|
| 被动·网络身份层 | SNI-IP 一致性门控(含在线权威复查) | 声称域名与实际服务端 IP 的绑定事实不可伪造 | 50000 主机评估零误报上界 0.006% |
| 被动·传输时序层 | 隧道高压起始偏移(Δ≥2×RTT 规则) | 中继调度的时延差不可写进形态;但仅在出站路径不对称部署下可分 | 不对称路径实测 7×;对称出口实测零分离 |
| 被动·服务器行为层 | 启动期出站握手存在性、入出成对联动 | 服务器向 decoy 发起的握手不依赖用户流量 | 12 个版本存在性全复现;每认证会话伴随 1 条出站(4 会话直证) |
| 被动·形态基线层 | 与声称站点同步基线的差分核查、握手后 19B/EE37B 栈线索 | 不是独立指纹,是"声称身份核验"------镜像机制下与真站同形即无差分 | 三真站 12 会话逐位镜像(反证);基线差分为唯一合法用法 |
| 主动·协议状态机层 | 握手未完成计数差分(33 vs 17)、未知 SNI 探测 | fork 栈与标准栈的内部计数器语义差异,形态复制无法抹平 | 33/17 跨 v26.3.27~v26.7.28 全 12 版无塌缩 |
| 主动·统计学习层 | 单会话时序判别器、总行为得分 | 路径差异的统计聚合;有明确退化边界(对称路径、短会话) | 13 样本 LOOCV=1.0(样本内);短会话存在实测误报 |
| 确定性审计层 | MITM 证书必拒(T1) | 受控出口假设下,REALITY 客户端必拒第三方签发证书,零误报零漏报 | 5/5 断连 + 新版客户端复验 + 对照成功 |
一句话总纲:可行的检测基座 = 网络身份一致性(被动主防线) + 协议状态机差分(主动授权位) + 确定性审计(受控出口),辅以不对称拓扑下的时序信号与服务器出口行为。
1.2 版本效力总览:针对最新版(v26.7.28)与历史版本
基线事实: 本研究的"当前最新"锚定=官方发布通道 v26.7.28 (2026-07-28 发布;经 SHA256 对齐官方摘要后实测);主观测批次运行于 v26.3.27(2026-08-31 观测日;其发布早于 v26.7.28,该关系在复核中查明并纠正了本文档系的版本表述)。2026-09-01 之后发布的任何版本:全部方法未测,效力声明不外推。
逐方法版本效力表(✓=有该版本实测直证;○=性质/机理上不依赖版本但无逐版直证,标注最近实证;✗=实测不成立):
| 方法 | v24.12.18 | v25.1.1 | v25.12.8 | v26.2.6 | v26.3.27 | v26.4~26.7.11(9 版) | v26.7.28(现最新) | 效力层级说明 |
|---|---|---|---|---|---|---|---|---|
| S0.1 门控 | ○网络层事实,协议无关 | ○ | ○ | ○ | ✓真实 5/5+5k | ○(未逐版,但机制不涉及服务端代码) | ✓(评估在合成/真实混合流上,版本透明) | 任意版本成立的基座------检测对象是 DNS 事实,不是协议实现 |
| B1′ 计数差分 | ✓32/16 检出 | ✓32/16 检出 | ✗16/16 未检出 | ✗16/16 未检出 | ✓33/17 | ✓9/9 版 33/17 | ✓33/17(有效) | 栈级指纹;跨 12 版连续直证(26.3.27~26.7.28);中间两版为已知失效窗口(默认值对齐期),对该两版无效------如实 |
| T1 必拒 | ○(机制为客户端协议性质) | ○ | ○ | ○ | ✓5/5 | ○ | ✓新客户端复验 000+对照 200 | 确定性层;双端点版本实证,历史版未逐版测 |
| V10/V12 存在性 | ○ | ○ | ○ | ○ | ✓6 条(测试台)/1 条(IP-dest) | ✓9/9 存在性=1 | ✓存在性=1;每会话伴随 n=1 | 存在性全实证版本稳定;条数依赖 dest 拓扑(不可作判据) |
| 镜像机制(形态非常量) | ○(机制推断) | ○ | ○ | ○ | ✓n=6+6 | ○ | ✓n=3+3 同构复现 | 镜像机制双版本成立;更早版本未做对照 |
| NST19/EE37 栈线索 | ○ | ○ | ○ | ○ | ✓auth 6/6+真站 6/6;EE17/17 | ○ | ✓复现;真站侧 4/4 站 NST=19B | 在常见部署中已退化;仅"decoy NST≠19B"时有效,版本维度非主因 |
| Δ 时序 | ○ | ○ | ○ | ○ | ✓不对称拓扑样本(含 1.2 混杂注记) | ○ | ✓e112/e118 timing(对称出口零分离) | 拓扑依赖性>版本依赖性 |
| B4 未知 SNI | ○ | ○ | ○ | ○ | ✓(含严格 decoy 修正) | ○ | 未复测 | 条件性/排除向;新版未测,按旧实证引用需带日期 |
| 时序统计族 | ○ | ○ | ○ | ○ | ✓13 样本内 1.0 | ○ | ✓重打分 5/6(短会话 1 误报) | 版本透明但样本内+拓扑依赖+短会话边界三重限制 |
综合结论:
- 针对当前最新版 v26.7.28,实测有效: B1′ 计数差分(33/17,栈级、跨 12 版最稳)、T1 必拒(确定性、受控出口内)、S0.1 门控(版本无关基座)、V10/V12 存在性、镜像机制确认、统计族(限制同旧)。
- 针对现最新版效力下降/受限: NST19/EE37(真实站点族普遍同形→退化)、B4(新版未复测)、Δ(仅不对称出口部署)。
- 历史版本警告: v25.12.8 与 v26.2.6 是 B1′ 的实测失效窗口(该两版上主动计数差分与"未检出"退化同源);对这两个版本的检测需依赖 S0.1+T1+行为层组合。更早版本(24.x/25.1.1)B1′ 有效但序号为 32/16。
- 任何 2026-09-01 后发布版本: 全部条目状态="未测";B1′ 存在"默认值再对齐→再入失效窗口"的历史先例,部署方须按附录 C.2 手册对该版本重跑一次 33/17 判定(单次、限速、授权)再启用该判据。
1.3 部署能力速查
| 部署位 | 可用方法 | 不可用及原因 |
|---|---|---|
| ISP/企业边界(仅 P1) | S0.1、形态基线差分(需自建基线库)、Δ(限不对称出站)、页面型时序统计 | B1′/B4 需授权主动;V10/V12 服务器方向不可见 |
| 目标服务器出口(P2) | 以上全部 + V10/V12/伴随计量 | 需服务器侧管理权 |
| 受控出口审计(P3) | T1 确定性 | 需根 CA 支配前提 |
| 主动授权位 | B1′、B4 | 限速+授权;B4 受严格 decoy 限制 |
贡献概述: ①可检信号全集分类与逐项实证(给定-当-则规格、阈值形式、失效边界);②负样本方法学(同协议形态、同网络出口、基线同步采集)------形态核验类方法成立的前提;③机制发现:认证形态系每会话实时镜像当前 decoy 真站形态,无跨连接缓存,已建立隧道对目标变更免疫(§6);④结论的版本受用范围以发布日期锚定并声明复核状态。
2 威胁模型与观测点
2.1 观测模型
#mermaid-svg-HtOoD1gj480HwIXR{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HtOoD1gj480HwIXR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HtOoD1gj480HwIXR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HtOoD1gj480HwIXR .error-icon{fill:#552222;}#mermaid-svg-HtOoD1gj480HwIXR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HtOoD1gj480HwIXR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HtOoD1gj480HwIXR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HtOoD1gj480HwIXR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HtOoD1gj480HwIXR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HtOoD1gj480HwIXR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HtOoD1gj480HwIXR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HtOoD1gj480HwIXR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HtOoD1gj480HwIXR .marker.cross{stroke:#333333;}#mermaid-svg-HtOoD1gj480HwIXR svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HtOoD1gj480HwIXR p{margin:0;}#mermaid-svg-HtOoD1gj480HwIXR .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HtOoD1gj480HwIXR .cluster-label text{fill:#333;}#mermaid-svg-HtOoD1gj480HwIXR .cluster-label span{color:#333;}#mermaid-svg-HtOoD1gj480HwIXR .cluster-label span p{background-color:transparent;}#mermaid-svg-HtOoD1gj480HwIXR .label text,#mermaid-svg-HtOoD1gj480HwIXR span{fill:#333;color:#333;}#mermaid-svg-HtOoD1gj480HwIXR .node rect,#mermaid-svg-HtOoD1gj480HwIXR .node circle,#mermaid-svg-HtOoD1gj480HwIXR .node ellipse,#mermaid-svg-HtOoD1gj480HwIXR .node polygon,#mermaid-svg-HtOoD1gj480HwIXR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HtOoD1gj480HwIXR .rough-node .label text,#mermaid-svg-HtOoD1gj480HwIXR .node .label text,#mermaid-svg-HtOoD1gj480HwIXR .image-shape .label,#mermaid-svg-HtOoD1gj480HwIXR .icon-shape .label{text-anchor:middle;}#mermaid-svg-HtOoD1gj480HwIXR .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HtOoD1gj480HwIXR .rough-node .label,#mermaid-svg-HtOoD1gj480HwIXR .node .label,#mermaid-svg-HtOoD1gj480HwIXR .image-shape .label,#mermaid-svg-HtOoD1gj480HwIXR .icon-shape .label{text-align:center;}#mermaid-svg-HtOoD1gj480HwIXR .node.clickable{cursor:pointer;}#mermaid-svg-HtOoD1gj480HwIXR .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HtOoD1gj480HwIXR .arrowheadPath{fill:#333333;}#mermaid-svg-HtOoD1gj480HwIXR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HtOoD1gj480HwIXR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HtOoD1gj480HwIXR .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HtOoD1gj480HwIXR .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HtOoD1gj480HwIXR .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HtOoD1gj480HwIXR .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HtOoD1gj480HwIXR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HtOoD1gj480HwIXR .cluster text{fill:#333;}#mermaid-svg-HtOoD1gj480HwIXR .cluster span{color:#333;}#mermaid-svg-HtOoD1gj480HwIXR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HtOoD1gj480HwIXR .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HtOoD1gj480HwIXR rect.text{fill:none;stroke-width:0;}#mermaid-svg-HtOoD1gj480HwIXR .icon-shape,#mermaid-svg-HtOoD1gj480HwIXR .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HtOoD1gj480HwIXR .icon-shape p,#mermaid-svg-HtOoD1gj480HwIXR .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HtOoD1gj480HwIXR .icon-shape .label rect,#mermaid-svg-HtOoD1gj480HwIXR .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HtOoD1gj480HwIXR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HtOoD1gj480HwIXR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HtOoD1gj480HwIXR :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} TCP/TLS 外层
8445→srv
认证成功: 自有栈应答
认证失败: 端到端透传
可见 P1 不可见
的出站连接
客户端 REALITY client
观测位 P1
中间路径
REALITY 服务端
fork 栈终结
decoy 真站
观测位 P2
服务器出口方向
- P1 中间路径 (网关/镜像/隧道中继位):可读外层 TLS 记录头(类型 1B+版本 2B+长度 2B)、明文字段(ClientHello 的 SNI、证书链明文部分)、每记录到达时间戳;不要求解密。
- P2 服务器出口方向(仅当可观测目标服务器出站):可见启动探测、入出成对联动、目标连接。
- P3 受控出口审计位(企业 CA 支配场景):MITM 审计。
2.2 三态输出纪律
任何方法的输出空间为 candidate(候选)/excluded(排除)/inconclusive(不确定)三态;单边证据不定案、多信号组合升档、人工确认后才执行处置------本文所有"检出率/误报率"均在此纪律下统计。银行、政务等白名单域强制 excluded(观测不处置)。
2.3 各方法机理总览(一页索引,证据见对应章节)
| 方法 | 不可抹除性来源 | 失效边界 | 详见 |
|---|---|---|---|
| S0.1 门控 | 域名-IP 绑定由互联网身份体系决定,运营者不可在流量内伪造 | 权威库质量;CDN/漂移域豁免 | §3.1 |
| Δ 时序 | 两段路径的调度时延写在包间到达时间上,形态复制只控制字节 | 观测位与服务器同出口→两路重合归零(实测) | §3.2 |
| V10/V12 服务器行为 | 镜像机制强制服务端向 dest 发起握手,不依赖用户流量 | 仅 P2 部署位可见;dest 不可达时失效 | §3.1 升档/附录 A.2 |
| 形态基线差分 | 检测"声称与实际镜像源不一致"(配置破绽),非协议缺陷 | 镜像忠实时零信号(设计使然) | §3.3 |
| NST19/EE37 栈线索 | fork 栈自生成会话票记录(本地 139B decoy 对照证明) | 真实四站 NST 均 19B→常见部署退化为零 | §3.3 |
| B1′ 计数差分 | 终止序号=服务端栈的计数器配置(内核态逻辑,不写入字节) | 运营者改齐默认值→入"未检出窗口"(历史发生) | §4.1 |
| B4 未知 SNI | 回落接受策略的行为分支 | 严格 decoy 下两路同形→不可单独排除 | §4.2 |
| 时序统计/判别器 | 代理路径改变记录级时间分布的聚合 | 对称路径零分离;短会话实测误报 | §3.2/附录 A.5 |
| T1 审计 | 证书链验证+REALITY 公钥绑定的双重校验(协议设计性质) | 仅限"受控出口+根 CA 被受检方信任"假设内 | §5 |
| 组合评分 | 各层攻击面正交(身份/时序/状态机/行为/审计) | 组合是纪律而非新信号;标定状态见 §7.2 | §7 |
3 被动检测方法(P1 中间路径可执行;明细数据表见附录 A)
3.1 SNI-IP 一致性门控 S0.1(主防线)
原理。 REALITY 服务器必须对外声称某个真实域名(否则握手形态失去意义),但其部署 IP 由代理运营者控制。声称域名 D 的权威 DNS 解析集与实际目的 IP 的一致性,是运营者无法在流量内伪造的外部事实------规避仅两条路:实际持有该域 IP(变成真站部署)或投毒权威 DNS,两者均超出协议本身且使门控判据恒真。此为主防线地位的成因。
给定-当-则。 给定会话 ClientHello 明文 SNI=D 与 D 的权威 IP 集合 R(D)(含 CDN 归属判定);当目的 IP ∉ R(D) ⇒ candidate;当 IP ∈ R(D) ⇒ 该维度不产生信号("零误报"主张由本门控承担,不由任何形态规则承担);当解析失败/权威漂移 ⇒ inconclusive(在线复查不判,边界与 CDN 一致)。判定伪码:R=权威(D); dst_ip ∉ R ∧ D ∉ 豁免名单 ⇒ candidate; 解析失败 ⇒ inconclusive。
关键实测结论。 三态真实流(5 主机):REALITY 主机 candidate、其余 inconclusive、零误报;规模化评估 5000 主机:TPR=2/2(95% 单侧下界≈22.4%,Clopper-Pearson)、FP=0/4998(95% 上界≈0.06%);50000 主机:candidate=2/2、FP=0/49998(95% 上界≈0.006%);非白名单 decoy 缺口 1 例(名单耦合修复后命中);在线复查 2 例(漂移域豁免、冒用域命中);真实公网 1 例(门控+组合置信 0.99 candidate)。全表见附录 A.1。
治理边界(误报防控,全部有事故记录)。 ① CDN/动态 IP 池域必须豁免(观测批次早期 CDN 域曾产生误报,豁免名单治理后消除;该场景检测转由行为/主动层承担);② 银行、政务白名单强制 excluded(高频长连对称流实测判 observe 零误伤);③ 权威漂移域纳入豁免(解析失败不判);④ 域名-IP 绑定库缺失/污染域退化为 inconclusive,不猜测。
3.2 隧道传输时序偏移 Δ(拓扑依赖)
定义与判据。 Δ = 观测点首条 s2c 应用数据记录到达时刻 → 首个载荷 ≥1024B 下行记录到达时刻(同一 TCP 会话、观测点本地时钟)。判定采用绝对偏移式:取观测位→目标同形态 直连基线分布 D(现场≥5 会话,周期重采),Δ_obs − median(D) ≥ 2×RTT ⇒ hpd 时序线索;倍数仅作直觉。
核心事实。 时延差产生于"客户端→代理服务器→目标"两段路径与调度,不写在 TLS 形态里,形态复制不能消除;但分离度由拓扑决定:
- 不对称路径可分:测试台直连 49/54/60ms vs 隧道 394ms(≈7×);真实公网隧道 235ms vs 直连 65-72ms(复核注:该组直连对照为 TLS 1.2 客户端,存在跨形态混杂,数值仅作历史参考);
- 对称出口零分离(2026-09-01 同形态复核,6+6 会话):隧道认证 vs 同站回落直连、TLS 1.3 同形态同出口,RTT 中位 356ms vs 346ms(差 10ms);hs→首应用、首应用→首大记录两组全部为 0ms ⇒ 观测位与服务器同出口部署下本判据不可分;
- 10MB 下载画像(隧道,单会话):2448 记录/1403ms,大记录占比 0.986,间隔 σ≈24ms,突发段 8,隧道建立 +0.6s。
适用域。 仅服务器→目标出站路径与观测位→目标直连路径显著不对称的部署可分。跨 ISP、跨洲路径的阈分布未测(验证方法已知:异地双观测位部署;本文不产出该数字)。
工程卡片(Δ 时序线索,可直接落地)。
- 判据定义 :同一 TCP 会话内,
Δ = t(首个载荷≥1024B 下行记录) − t(该会话首个 s2c 应用数据记录),两锚点均取观测位本地时钟(记录级时间戳,毫秒分辨率即可,须避免批量落盘伪影:逐记录即时戳)。 - 触发阈值 :
Δ_obs − median(Δ_baseline) ≥ 2 × RTT(观测位→目标)⇒ 置 hpd 线索;否则不置。RTT 用同会话 CH→ServerHello 时间差即时测量,不引外部值。 - 阈值推导链:直连基线 Δ 实测分布 49/54/60ms(n=3);隧道 394ms(n=1 批)⇒ 差值 ≥ 一个 RTT 量级;取 2×RTT 为最小安全偏移界(低于该值与直连抖动带重叠)。真实公网复核:隧道 235ms vs 直连 65-72ms(n=1+3;直连对照含跨形态混杂,仅作方向参考)。σ 类次级特征(下载型 σ≈24ms、大记录占比 0.986、突发段 8,n=1)仅可用于页面/下载分层,不进阈值。
- 前置检查(强制,部署时执行一次) :对称拓扑自检------同形态直连基线与隧道样本各 ≥5 会话跑同一 Δ 计算;若两组中位差 < 2×RTT(如实测 356 vs 346ms、Δ 双 0 的对称出口),该判据在此部署位禁用,不降级使用(防误报)。
- 基线维护:按"站点×观测位"存 Δ 基线库,现场周期重采(建议 ≥7 天窗口或权威/路由变更时);跨站不可混用。
- 输出与组合:hpd 仅线索;与 S0.1 共现 ⇒ 高置信档(0.97,测试台冒烟标定,部署后须按本地分布重标);无 S0.1 命中时 hpd 不独立成候选。
- 已知失效面:对称出口路径;无瀑布式子资源的单发大下载(首应用记录即大记录,Δ≡0);短会话(<10 记录)禁用;批刷时间戳的采集器(伪影归零)。
3.3 形态基线差分(声称身份核验,非独立指纹)
机制结论(详见 §6)。 认证路径的握手飞行形态系按当前 decoy 真站形态每会话实时镜像生成 ,因此:当会话声称站点 A、实测形态与 A 的同步采集直连基线不符而形态度 B 站 ⇒ 伪装暴露线索;当形态 = A 基线 ⇒ 完全无法区分"真访问 A"与"以 A 为 decoy 的 REALITY"(同形是设计目标),判定权全部回落到 §3.1 门控与 §4 主动层。
采集协议(强制)。 基线必须与被检会话同网络出口、同协议形态(1.3-vs-1.3)、时间邻近(n≥5);跨形态对照非法(作者早期工作曾犯此错并于 2026-08-31 复核中纠正,纠正记录存附录 A.3)。
基线库关键实测(三站点族,同出口真实数据,2026-09-01)。 cloudflare 系:认证侧与直连侧前 8 记录 1210/2033±1/445/57 全同构,差异仅在 NST 位置(直连第 5 条 vs 认证第 157-332 条);google 系:1210/4116±1 合并单条,逐字节一致会话;apple/github 系(非 Go 栈前端):122/36/3372(2759)/.../尾 19,A=D;microsoft(Akamai 前端):经代理回放通道 s2c 零响应×8 会话,直连对照 200 正常(操作限制,细节存数据档案)。全表见附录 A.3。
NST 19B/EE 37B 栈线索已退化。 fork 栈自生成握手后 19B(含头 24)会话票记录(本地 139B decoy 对照,双峰 8/8;EE 37B 本地 17/17),但真实复核 cloudflare/apple/github/google 四站真站 NST 均为 19B(直连侧 6/6+3/3 完整会话)⇒ 常见站点上双峰差分为零;真实公网批次 EE 并入合并飞行,无独立 37B 记录。两者均不作 REALITY 指示,只作 decoy 栈型/形态核验数据;仅当 decoy NST≠19B 时可用。
3.4 服务器出口行为(V10 启动出站 / V12 入出成对)工程卡片
- 判据定义(存在性式,条数不作判据) :
- V10 :
服务器进程启动事件后 T0 窗口内,出口方向出现 ≥1 条对"声称域名"的 TLS 握手(ClientHello 明文 SNI=serverNames 域)⇒ 命中。工程参数:T0=10s(覆盖实测"启动后约 2 秒"与慢启动;上界宽松因存在性不受条数影响);解析仅需明文 CH,无需解密。 - V12 :每条入站隧道会话建立时刻
t_in起W=500ms窗口内,出口方向出现对该 dest 的新建 TLS 连接 ⇒ 配对命中。W 推导:镜像获取延迟实测下界 40-56ms(复核批),取 ≥10× 余量圆整;该窗口值未经独立扩样定标(标注)。
- V10 :
- 触发阈值与推导链 :实测伴随数 n=1/认证会话 (4 独立会话直证,预热后);启动期存在性 12/12 版本 (含一次预拨号爆发,预热 3 会话后归零 ⇒ 判"稳态伴随"前须先扣除启动窗口内连接,防把预拨计为会话配对)。条数历史值:测试台 decoy.test 拓扑 6 条(3 ALPN×2 形态),dest=IP 字面量拓扑 1 条------任何"必须 6 条"式规则均不成立(机理未验证,如实)。
- 前置检查 :① 观测位必须能看到目标服务器出站(旁路镜像/出口网关/TAP);中间路径位部署时本节两判据直接禁用(不可见≠不存在)。② dest 可达性预检:decoy 不可达时 V12 必失效(实测),此时改用"S0.1 + CH 后零响应"组合,不保留 V12 断言。
- 部署步骤(最小):出口流日志 → SNI 明文解析 → (启动事件时间戳 ⊕ 会话时间戳)双通道相关 → 启动窗口标记(不计配对)→ 稳态配对率输出。
- 输出与组合:V10/V12 为行为信号(中/高),不单独定案;与 S0.1 共现进候选,与 B1′/T1 共现进高置信档;白名单/CDN 豁免同样适用。
- 已知失效面:中间路径部署(不可见);decoy 不可达(V12);服务器改由第三方代理池出站(伴随关系仍在,但 SNI 归属需与该池对齐);配置变体(短 ID/时钟窗/版本门)实测不影响本信号(配置变体批次实测)。
4 主动探测方法(授权前提,限速执行)
4.1 握手未完成阶段非推进记录计数差分 B1′(33 vs 17)
原理。 fork 栈保留其 Go 上游的 maxUselessRecords 语义(默认 32),标准 Go TLS 栈为 16。构造"握手永不完成"的连接(发送 ClientHello 后不发 Finished,逐条追加 ChangeCipherSpec 类非推进记录),对端在计数器超限时终止------终止序号直接读出服务端栈的计数器配置:认证路径(fork 应答)终止于注入第 33 条,回落/标准栈路径终止于第 17 条。计数器在栈内核态逻辑,不写入字节,形态复制无法抹平 ⇒ 栈级指纹。
内部栈 REALITY服务端 探针 内部栈 REALITY服务端 探针 #mermaid-svg-QsyFwmuSdEhJhQhA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QsyFwmuSdEhJhQhA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QsyFwmuSdEhJhQhA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QsyFwmuSdEhJhQhA .error-icon{fill:#552222;}#mermaid-svg-QsyFwmuSdEhJhQhA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QsyFwmuSdEhJhQhA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QsyFwmuSdEhJhQhA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QsyFwmuSdEhJhQhA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QsyFwmuSdEhJhQhA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QsyFwmuSdEhJhQhA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QsyFwmuSdEhJhQhA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QsyFwmuSdEhJhQhA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QsyFwmuSdEhJhQhA .marker.cross{stroke:#333333;}#mermaid-svg-QsyFwmuSdEhJhQhA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QsyFwmuSdEhJhQhA p{margin:0;}#mermaid-svg-QsyFwmuSdEhJhQhA .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QsyFwmuSdEhJhQhA text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-QsyFwmuSdEhJhQhA .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-QsyFwmuSdEhJhQhA .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-QsyFwmuSdEhJhQhA .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-QsyFwmuSdEhJhQhA .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-QsyFwmuSdEhJhQhA #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-QsyFwmuSdEhJhQhA .sequenceNumber{fill:white;}#mermaid-svg-QsyFwmuSdEhJhQhA #sequencenumber{fill:#333;}#mermaid-svg-QsyFwmuSdEhJhQhA #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-QsyFwmuSdEhJhQhA .messageText{fill:#333;stroke:none;}#mermaid-svg-QsyFwmuSdEhJhQhA .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QsyFwmuSdEhJhQhA .labelText,#mermaid-svg-QsyFwmuSdEhJhQhA .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-QsyFwmuSdEhJhQhA .loopText,#mermaid-svg-QsyFwmuSdEhJhQhA .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-QsyFwmuSdEhJhQhA .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-QsyFwmuSdEhJhQhA .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-QsyFwmuSdEhJhQhA .noteText,#mermaid-svg-QsyFwmuSdEhJhQhA .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-QsyFwmuSdEhJhQhA .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QsyFwmuSdEhJhQhA .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QsyFwmuSdEhJhQhA .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QsyFwmuSdEhJhQhA .actorPopupMenu{position:absolute;}#mermaid-svg-QsyFwmuSdEhJhQhA .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-QsyFwmuSdEhJhQhA .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QsyFwmuSdEhJhQhA .actor-man circle,#mermaid-svg-QsyFwmuSdEhJhQhA line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-QsyFwmuSdEhJhQhA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} loop每 40 毫秒注入一条 CCS 记录 fork 栈上限 32,故第 33 条终止,标准栈与回落路径上限 16,故第 17 条终止 读出终止序号 33 或 17,即可判定服务端栈归属 重放合法 ClientHello,不发 FinishedServerHello 与握手应答CCS 记录无意义记录计数加 1连接终止
给定-当-则。 给定目标端口与合法格式 ClientHello(使用目标自身名单 SNI 的真实 CH 重放;改写工具的适用限制存数据档案);当注入非推进 CCS 记录并监听:终止序号 33 ⇒ 认证路径 fork 栈指示(强候选);17 ⇒ 非 fork(标准栈/回落透传);立即拒绝/超时 ⇒ 该维度无信息。
关键实测结论。 测试台机制直证 33/17/17(EOF,无 alert);第三方公开工具独立报告 replay:32/fetch:16,与自研计数互证;版本矩阵 v26.7.28 复核 auth #33 / fallback #17 / decoy 直连 #17(各 4 路);九个官方发布二进制(v26.4.15/17/25、v26.5.3/9、v26.6.1/22/27、v26.7.11,SHA256 对齐官方 .dgst)9/9 版全部 33/17 无塌缩。受用范围:计数差分判据经直证覆盖 v26.3.27~v26.7.28 全 12 个官方版本(含两端点);v25.12.x~v26.2.x 为已知未检出窗口;更早与 2026-09-01 后版本未测。 全表与 U 型分布细节见附录 A.4。
条件性边界。 真实严格 decoy 复核:判据成立需"名单 SNI+decoy 栈计数器阈值≠32"前置;不满足时仅作弱信号(得分按条件性折减)。操作约束:回放连接不产生认证副作用(失败即回落),仍须目标授权、限速(40ms/条)、单目标低频次。
4.2 未知 SNI 行为探测 B4(排除向,条件性)
给定随机 SNI 的握手探测:宽松 decoy 部署(回落被真站接受)返回真站标准行为;部分真站(实测一例)对畸形 SNI 返回 TLS alert ⇒ 可排除向判定。严格 decoy 部署(如 cloudflare)对回落透传的畸形 SNI 亦回 alert,与直连行为同形 ⇒ 不可单独排除(边界复核后得分折半,仅作条件性排除向线索)。等长 SNI 改写工具链已验证可用;变长改写失败(结构校验拒收)------限制如实记录。
5 确定性审计层
5.1 T1:REALITY 客户端对 MITM 证书的必拒(定理+实证)
命题。 REALITY 客户端以公钥绑定+握手参数认证服务端;受控审计器以自有根 CA 动态签发目标域名证书实施 MITM 时,客户端密码学校验必失败------该性质不依赖形态、不依赖版本默认值,是客户端实现的协议性约束(证书链验证叠加 REALITY 参数对配置公钥的绑定,任何 MITM 无法同时满足)。
实证要点。 观测批次:审计器置于受控出口,REALITY 客户端 5/5 握手失败立即断开(事件 handshake_ok=false, closed_early=true),信任审计根 CA 的普通客户端对照成功;产品化判定器三态输出,真实事件 5/5"确定性识别";全链对照:信任 CA 的浏览器经同一审计器放行成功(证明审计器无罪放行能力);复核批(2026-09-01):v26.7.28 客户端 curl 000(5 事件),修正对照(直连同拓扑)curl 200 完整到达 ⇒ 必拒性质跨版本保持。全表见附录 A.5。
边界。 ① 成立前提=受控出口且根 CA 被受检方信任;无支配 CA 场景不适用。② 判定对象是"该客户端会话经过审计器且为 REALITY 客户端",不是"任意流量为 REALITY 隧道"。③ 零误报零漏报主张仅限受控假设内(形式化+实证复合声明)。
5.2 对抗闭合性(修复模拟,观察性陈述)
以防御方修复视角的模拟评估(数据库合成、观测记录):消除启动探测/成对联动并走在线复查路线时,行为类信号降至复核档(review),但确定性层(T1)与身份门控(S0.1′)不随之消失;协议方若统一计数器默认值则 §4.1 落入已知"未检出窗口"形态(历史上发生过,见 U 型)。该观察仅陈述信号间正交性。
6 机制实证:认证 flight = 每会话实时镜像当前真站形态
本节是全文形态类判据(§3.3)的根基,给出三层证据与粒度实验的完整数据。
6.1 对照实验设计
同一服务端配置(dest:443=www.cloudflare.com、serverNames=www.cloudflare.com、同一密钥对),观测位固定于客户端与服务端之间的 TCP 中继(记录级时间戳落盘):
- 实验 A(认证组):客户端携带有效认证数据(vnext.users 含注册 uuid,encryption=none 置于 vnext.users------上一批采集失败根因即此字段层级错放,如实记录)→ fork 栈终结;
- 实验 D(对照组):客户端携带无效 uuid → 认证失败 → 端到端透传 → 观测记录即 cloudflare 真实 TLS 1.3 flight;
- 通道:socks5h 客户端进程 = xray(官方二进制),内层请求 curl 经代理;两版(xray v26.3.27 与 v26.7.28)各跑一轮以上。
6.2 三层证据(全部为原始捕获解析值,载荷口径)
I. 长度逐项同构。
| 记录 | 实验 D(真站直连) | 实验 A(认证) | 一致性 |
|---|---|---|---|
| ServerHello(22) | 1210 | 1210 | 双版本 6/6+6/6、3/3+3/3 全同 |
| CCS(20) | 1 | 1 | 全同 |
| 首加密飞行(23) | 2032/2033 | 2032/2034 | 区间重叠,差 ±1(密文随机填充) |
| 后续(23) | 445/57 | 445/57 | 全同 |
| 握手后 NST(23) | 19,紧随握手第 5 条 | 19,延迟至第 157-332 条 | 同值异位(位置差由会话时长混淆,不作归因) |
II. 结构同、内容异。 ServerHello 消息前 11 字节(记录头+消息头+版本)逐字节相同;1210 字节内 1179 字节不同(相同位点 31 个,其中 11 个为结构字段,其余位点未逐位分析);差异集中于随机数与会话素材 ⇒ 每会话新生成,非罐头重放。
III. 生成机制粒度实验(2026-09-01)。
| 实验 | 设计 | 数据 | 判定 |
|---|---|---|---|
| 热换镜像 | 服务端进程不重启,dest 由自签 P256 decoy 换为 RSA2048 decoy | 换后首个新会话证书记录 376/375→773,与"直连新 decoy"回落基线 773 全等;两轮独立复现 | 新形态即时生效,无缓存滞后 |
| 连接免疫 | 10MB 隧道下载中途热换 dest 形态 | 长会话记录解析:重协商记录数=0,证书记录锁定旧形态(375),换后 707 条应用记录无新形态注入,下载续传完成;换后新建会话立即呈 773 | 形态绑定于每连接/每握手时刻 |
| 伴随计量 | decoy 侧逐连接计数,预热后测量 | 每认证会话 dest 方向新增出站 n=1(4 独立会话一致;启动期一次性预拨爆发在预热 3 会话后归零) | 镜像获取按连接发生 |
结论。 认证应答形态 = 当前真站形态的每连接实时镜像 ⇒ (a) 任何"与真站不同"的形态断言不成立;(b) 任何"真站变更后代理滞后暴露"的新鲜度差分不成立;© 形态比对仅在"与被声称站点的同步基线"下有核验意义(§3.3)。
7 组合判定与部署
7.1 决策流(操作化)
#mermaid-svg-lOmnTnuWly2k5Yqz{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lOmnTnuWly2k5Yqz .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lOmnTnuWly2k5Yqz .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lOmnTnuWly2k5Yqz .error-icon{fill:#552222;}#mermaid-svg-lOmnTnuWly2k5Yqz .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lOmnTnuWly2k5Yqz .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lOmnTnuWly2k5Yqz .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lOmnTnuWly2k5Yqz .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lOmnTnuWly2k5Yqz .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lOmnTnuWly2k5Yqz .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lOmnTnuWly2k5Yqz .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lOmnTnuWly2k5Yqz .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lOmnTnuWly2k5Yqz .marker.cross{stroke:#333333;}#mermaid-svg-lOmnTnuWly2k5Yqz svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lOmnTnuWly2k5Yqz p{margin:0;}#mermaid-svg-lOmnTnuWly2k5Yqz .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-lOmnTnuWly2k5Yqz .cluster-label text{fill:#333;}#mermaid-svg-lOmnTnuWly2k5Yqz .cluster-label span{color:#333;}#mermaid-svg-lOmnTnuWly2k5Yqz .cluster-label span p{background-color:transparent;}#mermaid-svg-lOmnTnuWly2k5Yqz .label text,#mermaid-svg-lOmnTnuWly2k5Yqz span{fill:#333;color:#333;}#mermaid-svg-lOmnTnuWly2k5Yqz .node rect,#mermaid-svg-lOmnTnuWly2k5Yqz .node circle,#mermaid-svg-lOmnTnuWly2k5Yqz .node ellipse,#mermaid-svg-lOmnTnuWly2k5Yqz .node polygon,#mermaid-svg-lOmnTnuWly2k5Yqz .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lOmnTnuWly2k5Yqz .rough-node .label text,#mermaid-svg-lOmnTnuWly2k5Yqz .node .label text,#mermaid-svg-lOmnTnuWly2k5Yqz .image-shape .label,#mermaid-svg-lOmnTnuWly2k5Yqz .icon-shape .label{text-anchor:middle;}#mermaid-svg-lOmnTnuWly2k5Yqz .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lOmnTnuWly2k5Yqz .rough-node .label,#mermaid-svg-lOmnTnuWly2k5Yqz .node .label,#mermaid-svg-lOmnTnuWly2k5Yqz .image-shape .label,#mermaid-svg-lOmnTnuWly2k5Yqz .icon-shape .label{text-align:center;}#mermaid-svg-lOmnTnuWly2k5Yqz .node.clickable{cursor:pointer;}#mermaid-svg-lOmnTnuWly2k5Yqz .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lOmnTnuWly2k5Yqz .arrowheadPath{fill:#333333;}#mermaid-svg-lOmnTnuWly2k5Yqz .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lOmnTnuWly2k5Yqz .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lOmnTnuWly2k5Yqz .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lOmnTnuWly2k5Yqz .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lOmnTnuWly2k5Yqz .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lOmnTnuWly2k5Yqz .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lOmnTnuWly2k5Yqz .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lOmnTnuWly2k5Yqz .cluster text{fill:#333;}#mermaid-svg-lOmnTnuWly2k5Yqz .cluster span{color:#333;}#mermaid-svg-lOmnTnuWly2k5Yqz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lOmnTnuWly2k5Yqz .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lOmnTnuWly2k5Yqz rect.text{fill:none;stroke-width:0;}#mermaid-svg-lOmnTnuWly2k5Yqz .icon-shape,#mermaid-svg-lOmnTnuWly2k5Yqz .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lOmnTnuWly2k5Yqz .icon-shape p,#mermaid-svg-lOmnTnuWly2k5Yqz .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lOmnTnuWly2k5Yqz .icon-shape .label rect,#mermaid-svg-lOmnTnuWly2k5Yqz .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lOmnTnuWly2k5Yqz .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lOmnTnuWly2k5Yqz .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lOmnTnuWly2k5Yqz :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否,且 D 非CDN/白名单
是/漂移
P2 服务器出口
授权主动位
不对称出口
不符且形态度B站
相符
必拒断连
正常
新会话进入 P1
SNI 声称域 D 的权威 IP 集
含目的 IP?
candidate:S0.1 命中
inconclusive 或 excluded 豁免
可用观测位?
V10 启动期出站/V12 成对
存在性命中→升档
B1' 计数差分
33→强候选 / 17→非fork
Δ≥2×RTT→hpd 升档
形态 vs D站同步基线
基线差分线索→升档
无形态信号 属预期
组合评分分档:
strike 需确定性证据或≥2独立强信号+人工确认
review/observe/排除
P3 受控出口审计 T1
确定性 candidate
excluded
7.2 组合分档数值与标定状态
| 组合 | 数值 | 性质声明 |
|---|---|---|
| S0.1 单独 | 候选进入条件;FP 上界 50k 集 0.006% | 合成+真实复核支撑 |
| S0.1 + hpd | 0.97 | 测试台冒烟标定;hpd 受 §3.2 拓扑适用域约束 |
| S0.1 + B1′(33) | 0.95 | 12 版直证支撑;主动授权位 |
| T1 必拒 | 1.0(受控假设内) | 确定性层 |
| 形态基线差分 | 不计独立置信 | 仅身份核验升档 |
| 总行为得分 | 0.6×强信号均值+0.4×ML 分 | ML 分项全部为样本内标定;0.99 阈在 50k 集通过 2/2、FP=0(样本内) |
权重来源与标定状态(如实声明)。 系数 0.6/0.4 为本实现的启发式初始定值:未经网格搜索、留出集调参或敏感性分析 ,其依据仅为"强信号(直证层)应主导、模型分(样本内标定)应受抑"的序数判断。该组合分的语义是候选排序与分档纪律,不是校准概率;0.97/0.95/0.99 等档位值同受此限。若需赋予统计含义,最低要求为:以数据档案逐会话分数做留出集验证、权重敏感性扫描与阈值-ROC 联合标定(方法已知,数据在档,本文未产出该结果)。
ROC/AUC 呈报状态(如实声明)。 本文仅对 S0.1 门控给出二项比例置信界(Clopper-Pearson 单侧:TPR 2/2 下界≈22.4%,FP 0/49998 上界≈0.006%),对判别器给出样本内 AUC=1.0000(13 样本,LOOCV,非泛化声称)。组合分在 5000/50000 主机集上的完整 ROC/AUC 无法由本文呈报:文档未收录逐会话组合分分布;计算路径已知------对数据档案决策 JSON 按分数阈值重切即可(附录 C.1),本文不产出该曲线。
7.3 S0.1 工程接入指引(工程建议,非本文实测项)
绝大多数仅具 P1 观测位的防御部署实际能且只能运行 S0.1,故给出接入操作要点。以下为依据通用 DNS/流处理工程实践与本文实测约束的建议值,均未在受控实验中标定,投产前须按本节第 5 条自测:
- 权威解析获取:优先本地缓存权威快照+按需在线复查的混合模式。会话到达时先查本地域名-IP 绑定库;miss 或过期时对该域发起在线解析(经全路径解析器,注意其视图可能与权威集有 CDN 地理差异------该差异计入漂移豁免,不直接判 candidate)。
- 缓存与 TTL:每条目存活期=min(域名自身记录 TTL, 上限帽 3600s 建议值);CDN 域与大池域按第 4 条豁免,不参与逐会话比对;库须记录采集时间戳,超过 2×TTL 的条目降级为 inconclusive 素材而非 candidate 依据。
- 更新策略:后台周期刷新 Top-N 活跃域(建议 N≥观测流 SNI 频次的 95 分位覆盖);新出现域即时拉取;解析失败与权威漂移(同一时刻多解析器结果矛盾)一律进豁免/不判分支。
- 豁免名单:CDN/动态池域、银行与政务白名单、解析不稳定域;名单支持通配与到期复审(建议复审周期 ≤30 天);豁免仅关闭 S0.1 的 candidate 输出,不阻断其他信号升档。
- 上线自测(强制):以自有真实混合流量回放 ≥7 天,统计 candidate 命中中人工复核确认率与 FP 事件;任何 FP 事故→对应域进豁免(本文治理纪律的工程化);吞吐预算参照:本文实现 370k events/s(1M 事件/107MB 含 DNS/全域分支逻辑)。
- 与其他层衔接:S0.1 输出仅作候选进入条件;处置必须走 §7.1 决策流的组合升档与人工确认纪律。
7.4 操作约束汇总
主动探测(§4)限于自建/授权网络,限速 40ms/条、单目标低频次;三态纪律(§2.2)贯穿全部输出;基线采集协议(§3.3)为形态类方法的使用前提;T1(§5)受控假设前置。其余合规事项集中于文件头声明。
8 结论
对 REALITY 这类"按真站模板每连接实时镜像"的伪装协议,检测有效性呈三层收敛:被动层唯一强判据是网络身份一致性(SNI-IP 门控)且其误报上界有 50k 主机级支撑;传输时序与服务器行为信号有效但受观测位与拓扑约束;协议状态机主动差分(B1′)是当前唯一跨 12 个官方版本稳定的栈级指纹;确定性审计在受控出口假设内不可绕过。 记录形态类信号仅在与被声称站点的同步基线比对时具有核验价值。所有判据均给出给定-当-则规格、环境/版本/n/口径、适用边界与复现手册;全部结论仅基于上述实证数据。
附录 A 实测明细表(按方法)
A.1 S0.1 门控全量数据
| 批次 | 环境 | n | 结果 |
|---|---|---|---|
| 真实流三态(2026-08-31 观测批次) | 混合流量单主机维度 | 5 主机 | REALITY 主机 candidate;其余(直连 TLS+银行合成)inconclusive,零误报 |
| 规模化评估 I | 合成 5000 主机(REALITY 型 2、普通 4541、CDN 250、银行 207) | 5000 | TPR=2/2(95% 单侧下界≈22.4%,Clopper-Pearson);FP=0/4998(95% 上界≈0.06%) |
| 规模化评估 II | 合成 50000 主机(候选注入 2) | 50000 | candidate=2/2;FP=0/49998(95% 上界≈0.006%)。复核方法:逐行 decision 计数(inconclusive 49998/candidate 2;两 candidate 信号列含 startup/pairing/s01 三项) |
| 非白名单 decoy 缺口 | 测试台,r2.example 域(不在名单) | 1 会话 | 名单耦合修复前漏检(inconclusive);全域配置修复后 candidate |
| 在线复查 | 权威漂移域演示;冒用 azure 域演示 | 2 例 | 漂移域→豁免不判;冒用域→复查命中 |
| 真实在线检出 | 真实公网路径复核(2026-08-31) | 1 | 门控+组合置信 0.99 candidate |
| CDN 豁免治理对照 | 测试台,豁免开启/关闭 | --- | 关闭时 CDN 域产生误报(事故记录),开启后消除;治理前后对照留档 |
A.2 服务器行为信号(V10/V12/伴随计量)
V10 启动期出站握手:服务端按 §6 镜像机制必须(启动期预热+每连接)向 dest 发起 TLS 握手,其 ClientHello 明文携带所声称域名,不依赖任何用户流量;12 个版本存在性全复现。V12 入出成对联动:每认证会话伴随 1 条 dest 方向出站(n=1×4 会话,启动期预拨爆发在预热 3 会话后归零),入站:出站时间窗强相关。观测位限定:P2 服务器出口方向;dest 不可达时失效(降级组合另行保留)。测试台计数 6 条(IP-dest 1 条,观测批次);矩阵批 9/9 版存在性=1;条数依赖 dest 拓扑,不可作判据。
A.3 形态基线库与差分数据
基线库(三站点族,同出口真实数据,2026-09-01;载荷口径):
| 声称站族 | 握手飞行(载荷,前 8 记录) | 握手后 NST | 样本 |
|---|---|---|---|
| cloudflare 系 | 1210/2033±1/445/57(+NST19) | 19B,直连紧随握手第 5 条;认证侧延迟至第 157-332 条 | 认证 9+直连 9(双版本) |
| google 系 | 1210/4116±1(合并单条) | 19B | 直连 2/认证 2,逐字节一致会话(D 两会话逐字节一致 5366B) |
| apple/github 系(非 Go 栈前端) | 122/36/3372(2759)/.../尾 19 | 19B | 各 2+2 |
| microsoft(Akamai 前端) | 采集失败:s2c 零响应×8 会话(CH 已发出,c2s 完整 517-1892B×7 指纹) | --- | 直连对照 200 正常;该站经代理回放通道不可采集(操作限制,细节存数据档案) |
形态零贡献矩阵(n=15 认证 POS/36 真站+门户 NEG):SH1210 命中 11/15 vs 14/36;首大记录 2033 系 9/15 vs 8/36;NST19 15/15 vs 23/36;≥1300B 首记录 15/15 vs 26/36 ⇒ 每一特征双侧共现、区间重叠------形态维度对判定贡献为 0 的量化标定。
跨形态对照纠正记录:作者早期工作曾以 TLS 1.2 门户会话验证 1.3 判据,2026-08-31 复核中确认非法并纠正,相关数值(§3.2 之 235ms 组)已降权为历史参考。
A.4 B1′ 计数差分全量数据
| 批次 | 目标 | n | 结果 |
|---|---|---|---|
| 机制直证(测试台,2026-08-31 前) | 认证 vs 回落 vs decoy 直连 | 各多轮 | 33 / 17 / 17;终止事件 EOF(无 alert) |
| 第三方公开工具交叉验证 | 本地 REALITY(观测时点版) | 独立输出 | 该工具报告 replay:32/fetch:16→behavior mismatch,与自研计数互证 |
| 版本矩阵 | v24.12.18/v25.1.1/v25.12.8/v26.2.6/v26.3.27 | 各版 | 32/16、32/16、16/16(未检出) 、16/16(未检出)、33/17 ⇒ U 型分布(中间两版把默认值对齐为 16;序号=默认值+1) |
| 复核批 I(2026-09-01) | v26.7.28 服务端+新客户端 CH | 各 4 路 | auth #33 / fallback #17 / decoy 直连 #17 |
| 复核批 II | v26.4.15/17/25、v26.5.3/9、v26.6.1/22/27、v26.7.11 九个官方发布二进制(SHA256 对齐官方 .dgst 摘要) | 9/9 版 | 全部 33/17,无塌缩;各版认证旁证 conn==conn |
| 真实严格 decoy 边界 | decoy=真实站点 | 复核 | 需"名单 SNI+decoy 栈计数器阈值≠32"前置才成立;不满足时仅能作弱信号(判据得分按条件性折减) |
A.5 T1 审计与统计学习类支撑数据
T1:
| 批次 | 配置 | n | 结果 |
|---|---|---|---|
| 观测批次 | 审计器置于受控出口,REALITY 客户端连接 | 5 | 5/5 握手失败立即断开(审计事件 handshake_ok=false, closed_early=true);信任审计根 CA 的普通客户端对照成功 |
| 产品化 | 审计判定器输出三态(确定性识别/排除/不确定) | --- | 真实审计事件 5/5"确定性识别";信任客户端"排除";聚合保留 SNI |
| 全链对照 | 信任 CA 的浏览器/栈经同一审计器 | 1 | 放行成功(证明审计器无罪放行能力,零误伤对照);无 SNI 场景判 inconclusive(保守) |
| 复核批(2026-09-01) | v26.7.28 客户端重连审计器 | 5+对照 | curl 000(5 事件 handshake_ok=false);修正对照(直连同拓扑)curl 200,完整到达(body=1315958B)⇒ 必拒性质跨版本保持 |
统计学习类:
- 单会话判别器:13 样本(3 正/10 负含 5 噪声 50ms±10ms)LOOCV 准确率/AUC=1.0000(样本内);正预言 0.990-0.994、负 0.003-0.022;复核批(2026-09-01,对新版捕获重打分)正 3/3、负 2/3,1 条 6 记录直连会话误判正例------根因:短会话中位间隔特征在 1ms 抖动下取法翻转(数组中位取法 len/2,奇偶敏感);处置:≤10 记录会话禁止单独定案;
- 突发包络 10 维模型重训准确率 0.9999/AUC 1.0000(本地样本内);真实多会话行为总分分布:正样本 0.92 级、负样本 0.11 级(真实公网 n 小);
- 吞吐:1M 事件(107MB)2,212ms→370k events/s(含 DNS/全域分支逻辑复测均值;历史 267k→452k→370k 演进均有 profile 记录)。
附录 B 复现环境总纲(第三方按本附录可独立重建全部实验)
B.1 硬件/系统/网络
| 项 | 值 |
|---|---|
| 观测主机 | Windows 桌面环境,单网络出口(本文全部实测的产生环境;跨 ISP/跨洲结论不可由本环境外推) |
| 脚本运行时 | PowerShell 7(pwsh -NoProfile -File);所有实验脚本=一次性+硬时限(≤260s 段落)+finally 进程清理+清理后端口/进程复检 |
| 内层 HTTP 客户端 | 系统 curl(Schannel,实测支持至 TLS 1.2;TLS1.3 客户端不可用------该限制曾使一批 1.3 对照改道,如实记录) |
| 隧道客户端 | xray 官方二进制(与被测服务端同版本管理) |
B.2 被测二进制与完整性
| 版本 | 构建标识 | 完整性 |
|---|---|---|
| v26.3.27(主观测批) | Xray 26.3.27 d2758a0 (go1.26.1 windows/amd64) |
官方 release |
| v26.7.28(复核批) | Xray 26.7.28 5ca6f4b (go1.26.5 windows/amd64) |
SHA2-256=c7172078fca4711bcd92a4774dcd1822544579c58816197575c47533317fd8d1(=官方 .dgst) |
| v26.4.15/17/25、v26.5.3/9、v26.6.1/22/27、v26.7.11(矩阵批 9 版) | 各自 version 命令输出 | 每版 .zip 与官方 .dgst 摘要比对一致后使用;逐版摘要值存于数据档案下载日志 |
B.3 工具角色(本实现以 Go 编写,功能可等价自建)
| 角色 | 功能规格(复现所需最小行为) |
|---|---|
| 中继捕获器 | 监听 127.0.0.1:8445,双向透传至 -out 指定目标;每连接落盘 <ts>_c2s.bin/<ts>_s2c.bin(原始字节)+ .timing(每行 unix毫秒 类型 含头总长) |
| 记录解析器 | 输入双向 bin,按 TLS 记录头(类型 1B/版本 2B/长度 2B)切分,输出 (序号,类型,载荷长度,握手消息子类型) 序列与判定 JSON(载荷口径) |
| 回放探针 | -replay <CH.bin> 裸回放;-replayccs <CH.bin> -addr A -maxccs 40:发 CH 后每 40ms 追加一条 16 03 03 00 01 01(CCS)记录,监听终止事件,输出终止注入序号;-ccs -addr 为完成握手(tls.Dial,InsecureSkipVerify)后注入的同型探测;-randsni/-setsni(等长)改写 SNI |
| 代理诱骗测试台 | 本地 Go TLS 服务器(自签 CN=decoy.test),监听 8443;可配证书类型/EE 填充/会话票数量与长度/ALPN(形态旋钮) |
| 网络仿真 | 可注入上/下行延迟与抖动的 TCP 中继;可配置形态的 decoy(用于镜像/热换实验,RSA2048 变体用于证书大小信号) |
| 审计器 | 受控根 CA,按 ClientHello SNI 动态签发证书并 MITM,输出事件 JSONL(handshake_ok,closed_early) |
| 判定引擎 | 输入 .timing/事件流,实现 S0.1/线索/三态判定与置信组合公式 |
| 定时注入中继 | 透明双向前中继+连接建立 N 秒后按 40ms 节奏注入 CCS,注入事件逐条落日志(序号+毫秒时间戳+失败点),会话结束记录关闭时注入计数 |
B.4 测试床配置全文(仅测试床密钥,不代表任何生产部署)
json
// 服务端(以 cloudflare 为 decoy;改 dest/serverNames 即换站)
{ "log": {"loglevel":"warning"},
"inbounds":[{"listen":"127.0.0.1","port":8454,"protocol":"vless",
"settings":{"clients":[{"id":"e0b946e5-0f93-4826-a6ee-e1e3d2ad36d4","flow":"xtls-rprx-vision"}],"decryption":"none"},
"streamSettings":{"network":"tcp","security":"reality","realitySettings":{
"show":false,"dest":"www.cloudflare.com:443","serverNames":["www.cloudflare.com"],
"privateKey":"0AEguuZiaorsf6nOXPnHnRVqMZgUGqZZ9hMqY2R8YXM","shortIds":[""],
"minClientVer":"","maxClientVer":"","maxTimeDiff":0}}}],
"outbounds":[{"protocol":"freedom"}] }
// 客户端 A(有效):socks 10818;vnext {address:"127.0.0.1",port:8445(捕获器),users:[{id:同上,flow:"xtls-rprx-vision",encryption:"none"}]}
// streamSettings.realitySettings {serverName:"www.cloudflare.com",fingerprint:"chrome",
// publicKey:"y44Yk_fP7b8WerQ7zqr8hBOxO_goj1tbXH3_H4wBJjk",shortId:"",spiderX:"/"}
// 客户端 D(无效对照组):同构,users.id 换为 11111111-2222-3333-4444-555555555555,socks 10819
B.5 端口与文件布局约定
各批次独立端口段避免互踩:形态对照 8445/8454(早期批 8444/10808/10809);矩阵批 8470+n;多站正样本 8457/10830-31;指纹矩阵 8459/10845;完成态注入 8461/8463/8468/8469/18445/10851-54;镜像粒度 8460/18444;对称性 8466/19448/18445。产物目录:数据档案按批次分目录存原始 bin/timing/解析文本/判定 JSON,分析脚本随包。
附录 C 逐方法复现手册
C.1 S0.1 门控(§3.1)复现
- 构造评估集:合成 5000 与 50000 主机事件流(REALITY 型 2 台注入 SNI 与 IP 不一致样本),判定引擎
-in/-events模式跑分,输出 decision 逐行 JSON;复核方法:对 50k 报告逐行计数(candidate=2、inconclusive=49998);组合分 ROC 重算路径:对同一逐行 JSON 按组合分阈值扫描重切 candidate 集,即可产出 ROC/AUC(数据在档,本文正文未呈报); - 真实三态:混合流 5 主机(隧道真实流量+直连+银行合成),断言 candidate=1 主机、其余 inconclusive;
- 在线复查:权威漂移域演示→不判;冒用域→复查命中;CDN 域豁免开启/关闭对照。
C.2 B1′ 计数差分(§4.1)复现
前置:decoy 诱骗台 8443;双版本服务端 8464(26.3.27)/8465→8461/8463(26.7.28),配置见附录 B.4(dest 改 127.0.0.1:8443,serverNames=www.cloudflare.com);CH 提取:取任一有效认证会话 c2s 首记录(实测 1728B=5+1723)存 orig_ch.bin,末字节 XOR 0xFF 造 mut_ch.bin。
命令(每目标):回放探针 -replayccs <ch.bin> -addr 127.0.0.1:<port> -maxccs 40。
全量数据(五路+矩阵批):
| 目标 | 输入 | 终止序号 | 事件 |
|---|---|---|---|
| 26.3.27 认证 | orig CH | #33 | EOF |
| 26.3.27 回落 | mut CH | #17 | EOF |
| 26.7.28 认证 | orig CH | #33 | EOF |
| 26.7.28 回落 | mut CH | #17 | EOF |
| decoy 直连 8443 | orig CH | #17 | EOF |
| v26.4.15/17/25、v26.5.3/9、v26.6.1/22/27、v26.7.11 | orig/mut CH | 9/9 版 33 与 17 | EOF;各版服务端日志 conn==conn 旁证 |
U 型历史:v24.12.18/v25.1.1=32/16 检出;v25.12.8/v26.2.6=16/16 未检出;此后 33/17(触发序号随默认值 32→16→32 迁移;序号=默认值+1)。
C.3 T1 审计(§5.1)复现
命令序列:审计器(-port 127.0.0.1:9443 -cadir <CA目录> -out events.jsonl)→ v26.7.28 客户端(配置指向 9443,serverName=decoy.test,其余同附录 B.4)→ curl -x socks5h://127.0.0.1:10828 https://www.cloudflare.com/ → 期望 000 ;events 5 行全 handshake_ok=false, closed_early=true;修正对照(经中继捕获器直连有效服务端,需启动中继进程------首轮对照失败根因即漏启中继,教训入档)→ 期望 200(实测 body=1315958B)。观测批次 5/5 同型数据(旧版本客户端)。
C.4 形态对照与镜像(§3.3/§6)复现
命令序列(每轮):启动捕获器(-out 127.0.0.1:8454)→ 启动服务端 → 启动客户端(A 或 D)→ curl --max-time 8 -x socks5h...'https://www.cloudflare.com/' -o body→ 停进程 → 解析器输出前 8 记录。
全量数据(两批合并):
| 组 | 会话 | 载荷序列(前 6-8 记录) | NST19 位置 | body |
|---|---|---|---|---|
| A(26.3.27) | 初批+重复 5 | 1210/1/2032-2034/445/57+应用流 | 第 159-332 条 | body 1270489B 级(初批),重复批 1.32-1.40MB |
| D(26.3.27) | 初批+重复 5 | 1210/1/2032-2033/445/57/19 | 第 5 条 | 3795B 会话(握手+票) |
| A(26.7.28) | 3 | 1210/1/2033-2034/445/57+流 | 第 157-158 条 | 1.3MB 到达 |
| D(26.7.28) | 3 | 1210/1/2033-2034/445/57/19 | 第 5-6 条 | 同上形态 |
| apple A/D×2 | 2026-09-01 批 | 122/1/36/3372/281/53/274/274/57/19,A=D 逐位 | 尾 19 | --- |
| github A/D×2 | 同上 | 122/1/36/2759/96(±1)/53/74/74/19,A=D | 尾 19 | --- |
| google A/D×2 | 同上 | 1210/1/4116(±1)/19,A=D(D 两会话逐字节一致 5366B) | 尾 19 | --- |
| microsoft | 4 会话 | s2c=0B(CH c2s 完整 517-1892B×7 指纹) | --- | 直连对照 200 |
热换/免疫/伴随三表见 §6.2-III(源数据:e115 两轮 F1/B/F2=376|375/773/773;e120 长隧道 reHandshake=0、707 应用记录、n=1×4)。
C.5 一键复核与预期哈希(信任链闭环)
发布包内 prove.ps1(五节七断言:核心测试→深度自检→仿真矩阵 7/7→对抗可检三断言→判别器自洽),硬时限与进程清理内建。
本文档定稿前的实测运行记录:两次独立全通过,用时 138s 与 121s(Windows 桌面环境,2026-09-01);断言集完全一致,原始 stdout 仅"用时"行随机器漂移。
预期哈希(两层,均为实算值):
-
规范化断言哈希(跨机器可比,第三方对照此项)------取七断言结果行按下述模板连接(LF 行尾、UTF-8 无 BOM、末尾换行):
1;go-test;PASS
2;deep-check;PASS
3;sim-matrix;PASS:7/7
4a;adversarial-S0.1p;review
4b;no-strong-signal;observe
4c;L3-audit;candidate
5;e73;train=PASS,score=PASS
verdict;ALL-PASS
Expected: SHA256 = 1217fe4bec58f90cbec80d7971c8f7467b03729e2491feff72de5a6adc6390b2
- 本次运行原始报告哈希(同包档案对照) ------发布数据包内附
prove_run_20260901.txt(345B,本次实测 stdout 原文):Expected: SHA256 =31379dca620459a698f8512569c7284ab675959d1184870bca85f81daa2c2508。第三方在自己机器上得到的 raw 哈希允许因"用时"行不同而异,以第 1 项规范化哈希为准;若规范化哈希不一致,说明断言集发生变化(版本/环境差异),按 §7.4 版本效力表定位差异项,不得带差异继续部署。
C.6 统计学习类落地规范(强制阅读)
随包模型与阈值(LOOCV=1.0、0.99 准入、总行为得分 0.6/0.4 等)全部为样本内标定,禁止直接用于生产判定:
- 过拟合风险声明:13 样本(3 正/10 负)的 LOOCV 不估计生产高维分布下的性能;短会话误报(附录 A.4:6 记录会话中位间隔 1ms 抖动翻转)已经证明样本内指标与部署表现的落差真实存在;
- 重训协议(部署区必做) :采集本部署区正/负样本各 ≥100 会话(正样本经 T1/B1′ 双确认,负样本含同站直连与页面/下载混合)→
判别器训练 <pos目录> <neg目录> model.json(重跑即重建,命令随包)→ 评估必须含独立 holdout 集(非 LOOCV)的 AUC/混淆矩阵; - 强制回归项:重训后必须复测"短会话负样本组"(≥50 条 ≤10 记录直连会话)误报率,不达标(阈值由部署方按误报容忍定)不得启用;
- 阈值策略:0.5/0.99 等数值不随模型迁移,部署方按 holdout ROC 自定并记录标定过程;
- 置信组合中 ML 分项权重(0.4)同样视为未标定占位,在 holdout 完成前建议置 0,仅用确定性/门控/主动差分通道。
参考文献与数据档案
- RFC 8446 --- TLS 1.3(记录层 §5;NewSessionTicket §4.6)。
- xtls/reality 公开源码快照锚点(观测时点提交
9234c77;历史对照f07c896/ebbbf46)。 - Xray-core 官方发布通道 v26.3.27~v26.7.28(逐版摘要见附录 C.2/数据档案下载日志)。
- Go 标准库 crypto/tls(对照栈;maxUselessRecords 语义)。
- 第三方公开检测工具 replay_behavior_detector(独立输出交叉验证,§4.1)。
- 受控实验数据档案(124 组批次:原始捕获、timing、判定 JSON、全部脚本,随交付包向获身份确认与授权的研究人员提供)。
收束声明:本文受用范围以 §1.2 版本效力表为准;表列之外的任何版本与网络环境未测,结论不外推;本文不含修复建议与攻击性用途;主动方法仅限授权网络执行;受众限于部分网络安全研究人员(身份确认+授权+合规)。§7.3 为工程建议,未经实测标定,引用时须连带该限定。