我不认为他们的方法适用于识别用户,我将专注于流相关技术并解释为什么不可能实现它(当然我可以调整并创建一个用例并使其成为可能,但不适用于互联网)。
一般来说,现在所有的通信都使用 TLS 进行加密,tor 也是如此,HTTP 1.1。在 HTTP 1.1 中,多个请求和响应将在同一流中进行,这意味着您需要关联上游 pdus 的数量(通过检查 TCP 推送标志)和下游。例如,如果我制作了一个可以访问两个 url 并下载两个图像的 python scrypt,系统可以生成一个流特征向量,例如:
[{"upstream_bytes": 500, "downstream_bytes": 5000},
{"upstream_bytes": 400, "downstream_bytes": 4000}]
第一个请求将在上游生成 500 字节的加密数据,并在下游接收 5000 字节的加密数据,并且随着第二个请求,400 向上和 4000 向下。
考虑到这个最小的场景以及浏览器生成不同的请求大小,可能大多数浏览器会为第一个请求 (index.html) 生成一个类似的第一个请求模式,但字节会有一些变化。
所以访问相同服务的多个用户将有一个向量
[{"upstream_bytes": (500, 600), "downstream_bytes": (5000, 5500)},
{"upstream_bytes": (390, 420) "downstream_bytes": (4000, 4300)}]
上游和下游将根据浏览器和 TLS 加密等因素而有所不同。
因此,如果目标站点也支持php,并且其他用户组访问index.php,则向量相同的概率很高。这意味着即使您使用机器学习或其他技术也无法访问流内部的内容并使相关性更加不可能。唯一可以建立的流量关联是通过将(上游和下游的)向量与其他流量的其他向量进行比较,并通过统计数据进行比较。在您可以控制网络(用户和服务器)的测试场景中,您可能很容易猜到,因为您没有任何其他流量会为检测产生噪音。
如果您还想考虑在仅提供所有大小相同的 pdf 文档的目标服务器中,这将为使用该服务的所有用户提供相同的流量分配,使他们无法知道内容。
另一方面,如今的浏览器会为同一个站点生成多个网络流,这让这变得更加困难。
总的来说,这篇论文很好,并且有一些有趣的提示,但有很多研究论文,特别是那些检测事物、调整结果以使其发表的论文,我不是说是这样,但看起来有点怀疑结果很好,而且他们不发布数据集,因此其他研究人员可以验证或改进他们描述的技术。