WebGL指纹有多独特

how unique is WebGL fingerprint

最近我正在研究一些浏览器的唯一 ID,我遇到了 https://panopticlick.eff.org/ 意识到有一个 "Hash of WebGL fingerprint" 但我不知道什么是关键会影响价值 我已经使用 2 个不同的分辨率屏幕(同一台 PC)对 运行 进行了测试,并更新了我的浏览器次要版本,它 return 我的键值相同。

谁能帮我理解一下WebGL指纹的Hash是如何生成的?

WebGL 的哈希值通常特定于 GPU,因此 NVidia 2080 GTX 的指纹与 Nvidia GeForce GT 750M 或 Intel Iris Pro 等不同...更改屏幕分辨率不会影响 WebGL 指纹但它会影响你在 panopticlick

其他部分的指纹

它生成得很好,你可以 look at the code but in general you query all the features of WebGL (like these)。它们会因 GPU 而有所不同。

然后渲染一些东西,比如小纹理、彩色四边形,也许还有几个像素上的一条线。不同的 GPU 在插值颜色方面的算法或数学略有不同,因此根据结果,您可以获得更多数据以添加到指纹中。

panpoticlick 夸大了。例如,我有一个 iPhone 11。Panopticlick 的指纹声称我的 phone 是 200k 独有的。 iphone 11 的唯一独特之处在于时区和语言设置,否则所有 iPhone 11 都具有完全相同的指纹。

我在太平洋标准时区。太平洋标准时区至少有 5500 万人。 200k 中只有 1 个是唯一的,这意味着加利福尼亚州、俄勒冈州和华盛顿州共有 275 iPhone 个 11 组合设置为英语。我们知道那是错误的。在这 3 个州中有成千上万个 iPhone 11,可能有数千个。

重点是,panopticlick 并没有真正获得足够的流量来了解指纹是否有意义,而且由于没有人访问,每个指纹看起来都是独一无二的。

Does anyone can help me to understand how the Hash of WebGL fingerprint generated?

WebGl 指纹哈希是通过渲染一个模式(或 高熵图像(压缩效果不佳的图像))然后从生成的渲染像素创建哈希来生成的.

该图像被渲染到具有固定大小的帧缓冲区,因此更改屏幕分辨率不会影响生成的哈希值。

顶点和(尤其是)片段着色器将被编写为夸大已知的 GPU 处理差异。这些是什么取决于指纹打印机的代码。

由于 WebGL 不允许预编译着色器,因此只需稍加努力,您就可以访问着色器源代码,方法是逐步执行代码,直到找到 webGL 上下文 shaderSource 调用。哈希由 JavaScript 生成,同样取决于指纹打印机的首选方法。