VPN 的掩护流量:你在躲避哪一位观察者
填充改变的是流量形态,而且只对它所针对的那位观察者有效。走一遍填充在哪里止步、要付出什么代价,以及它掩盖不了什么。
设想你和一位使用 VPN 的人共用一个咖啡店网络,而你能看到的只有数据包大小和时间。掩护流量本该模糊这幅画面。把填充从笔记本一路跟到网关,就会发现这种模糊是局部的:网关结束的地方,模糊也就结束了。此后的每一段,都是同一份真实流量上的新观察问题。
所以第一个问题从来不是发多少填充。而是你在躲避哪一位观察者,以及这位观察者坐在哪里。
从笔记本开始
在本地链路上,观察者看到加密数据包进出。没有填充时,一次大上传是一串满尺寸的包,一通语音是稳定的中等尺寸包流,空闲客户端则发出 keepalive。即使内容不可读,这些形状也与用户正在做的事相关。填充可以抹平形状,代价是发送谁也没要求的字节。
写下那位观察者本来会注意到什么:传输开始时的突发、通话结束时的空档、空闲期的节奏。如果你说不出这个特征,就无从声称填充把它藏了起来。
跟着填充走到网关
笔记本把填充发给一个配合的网关,网关丢弃填充,把真实流量继续转发。这种配合才是机制所在:没有一个负责去掉填充的端点,你就只是把负载加到了别人的路径上,而没有制造掩护。Tor 的填充规范把同样的切分讲得很明确:相邻中继之间的链路填充,以及与协议状态绑定的电路填充。
再想想网关看到了什么。它看到真实流量加上填充,也就是说,除非它正是你信任的那一方,否则它知道得更多而不是更少。掩护流量转移的是信任,它并不消除对信任的需要。
然后看第二段
在网关之后,通往真实目的地的连接是形状寻常的普通流量。那里的观察者,无论是托管服务商还是目的地网络,看到的正是填充本该掩盖的那些突发。如果那位观察者才是你在意的,填充对你毫无帮助。这条边界正是走完整条路径的意义。
掩护流量是有区段范围的,扩大范围就意味着扩大配合。
方向与形状
只向外发送的填充,隐藏的是你发送内容的时机。它对返回内容的时机一无所知,因为回复按自己的时间表抵达。不对称的隐藏很正常,值得大声说出来:下载为主的会话在入方向上照样暴露出形状。
包长、突发结构、开始与停止的时刻、到达间隔,这些都携带信息。字节计数保持平坦,可以和非常鲜明的包尺寸分布并存。总量平坦不等于行为平坦。
预算买到了什么
填充消耗的是有人付费的容量:计费流量、上行链路的争用、同一连接上其他用户的排队延迟。跟着可用最大速率走也是自毁,因为那个最大速率随链路移动,填充也就随之移动。把预算讲清楚,并讲清楚预算耗尽时的行为,这才是机制与事故的区别。
用你一开始点明的那次观察来评估结果。在明确界定的观察者下显示识别率下降,才算结果;流量更多所以信息更少的承诺不算。
决定到底要不要做
对大多数人来说答案是不做,诚实的理由是:全速背景流无法替代会记录自己保护了什么的软件。填充是正当的工程手段,它属于那些写明观察者、配合端点、成本和限度的设计。它不是把 VPN 变成匿名系统的一个勾选框。
如果你确实要实现它,先把观察者模型写下来。此后每一个决定,从包尺寸到关机行为,都来自那一段话。