终止开关与 Tor Browser 隔离:两种不同的测试
“没有共同密码”这一错误属于 TLS 控制通道,而不是 data-ciphers。先比较版本,再看密码套件列表,最后证明协商结果。
终止开关和浏览器身份模型之所以会被混为一谈,是因为两者都被描述为隐私功能。一个在网络层阻断流量,另一个限制一次浏览会话能够关联什么。通过前者的测试并不能说明后者,而一个在 Tor Browser 内加载的页面也不能说明前者。关键在于哪项控制回答哪个问题,因为这一选择决定了哪些证据算数。
两层边界上的两种控制
终止开关是一条关于路由的规则:当隧道没有建立时,本会走另一条路径的流量会被丢弃。它的范围取决于实现覆盖到什么程度,可能是整个系统、单个应用,也可能只是客户端管理的那几类地址族。浏览器隔离关心的是网站在整个会话中能观察到访客的哪些信息:cookie、缓存状态、指纹、登录状态。两种机制都不能替代对方,因为它们作用于完全不同的对象。
正因如此,一台机器可以通过完美的终止开关测试,却仍然通过一次登录泄露身份。反过来同样常见:在一台遥测数据走了策略从未覆盖的路径的主机上,使用隔离良好的浏览器。
把两者归入同一个标签,正是糟糕证据的来源,因为一侧的通过于是代表了这一对。从一开始就把它们放在不同的列里。列标题也会告诉你测试应当交付哪种产物:被阻断的数据包,还是一份会话记录。
中断运行回答的是一个更窄的问题
受控中断检验客户端是否阻断你所测试的流量、在你所测试的平台上、在测试持续的这段时间里。要纳入需求中提到的地址族、应用和网络切换,因为每一项都是独立的断言。对 IPv4 生效而对 IPv6 不生效的阻断是真实的发现,在有线网络上生效但在移动切换中不生效的阻断同样如此。把范围写在结果旁边,因为无条件的通过,正是一个狭窄测试变成宽泛假设的方式。
阴性对照与阳性对照同样重要。确认同一请求在隧道建立时能够成功,这样才能说明阻断来自策略,而不是来自一个从未真正可用的目标。两种状态下都失败的测试什么也证明不了,与其悄悄丢弃,不如在记录中写明。
隔离是浏览器的属性,而不是一条路由
Tor Browser 声明的设计通过把链路状态与浏览器状态放在一起、并按请求清除状态来限制可关联性,项目也记录了这在实践中对身份管理意味着什么。该设计假设的是受支持的配置,而不是一个指向代理端口的通用浏览器。为方便而添加的扩展可能抵消一部分隔离,被截获的登录则会把之后的一切关联起来,无论链路如何。文档所描述的行为足够短,可以直接阅读。
浏览器观察和网络观察回答不同的问题,因此要把它们放在各自的记录里。在 VPN 建立时通过 Tor 加载的页面说明代理可用,却说明不了 VPN 的丢弃行为。中断期间被阻断的数据包,也说明不了一小时前两次登录是否可关联。
两份记录,两个问题
对于终止开关,要问某个指定的应用在故障期间能否经由不想要的路径离开,并带来一次带有你自有日志目标的受控中断。对于浏览器隔离,要问哪些账户、状态和信号可能关联两项活动,并带来一套工作流程,而不是数据包捕获。如果第二个应用重要,就单独测试它,因为范围往往比厂商暗示的更偏向单个应用。两个不同的问题会产生两种不同的产物和一份诚实的报告。
测试之前先画出两条路径:正常路径和隧道故障之后的路径,覆盖范围内的每一个应用。图会暴露单一绿色指示器所掩盖的缺口,因为它迫使你指明什么被覆盖、什么没有。要在系统健康时做这件事,那时没有人迫于压力宣布检查已经完成。
两种控制都不能为对方作证,而组合配置需要两份记录才能同时声称这两种属性。仅凭一个绿色指示器就声称两者,正是这种搭配所要防止的失败。