一直都在
不断前进和探索

Canvas,WebGL以及AudioContext指纹原理

提到硬件指纹,首先要谈谈网站是如何利用硬件指纹来验证访客身份信息的,以便于在日常工作中高效地运用它们。

目前常见的三种硬件指纹分别是:“Canvas”、“WebGL图像”和“AudioContext”。

这三种硬件指纹工作原理基本类似,不少人以为这些指纹就是在Browserleaks之类的检测网站中看到的哈希值。

但事实并非如此,哈希值只是原始指纹的体现,由于原始指纹并不是一些值或参数。所以,它是不可替代的,原始指纹其实只是你的显卡或声卡处理一些任务。

为什么不同的电脑会产生不同的指纹?

来看看这些原因,我们能看到字体微调的方式,所谓屏幕的字体微调其实就是一种特殊指令。让渲染算法在屏幕上绘出文字,因为电脑里的文字不是图像格式储存而是是像数学公式一样被储存的。

当电脑在屏幕上将数学公式绘成文字时,需要将数学公式渲染成由像素点组成的实际图像,并根据屏幕分辨率、像素点大小等参数生成,所以结果可能存在差异。

可以说,微调算法让计算机能够正确地显示字体,同时正确地将它从数学公式转化成图像!

字体提示原理方案

如图上图所示, 有2个相同的字母M,这是简单化的图像。因为文字有更多的像素实际运用中它会复杂很多,我们来看看这个简化后的例子~

比如:图左第三列第一个像素可以被定位得更低一些,反之图右第三列第一个像素可以更高一些,根据不同定位方式最终结果也不同。

这些细微的像素大多情况下光凭肉眼是无法区分的,但电脑可以分辨出来创建的两幅图像是否一致!

浏览器在不同电脑上渲染同样任务得到的结果是:在第一台电脑上呈现图左,第二台电脑呈现图右,并且这两个图片的哈希值不一样,因为哈希函数减少了其中的信息量

另外,这些差异产生的原因还有抗锯齿渲染(边缘柔化技术),抗锯齿渲染是为了使两个对比明显的对象间交接平滑,这么做就避免了两个对象间的像素不够美观。

演示最简单方式就是黑白图像:

抗锯齿渲染的工作原理

在黑白图片中边缘加入了不同色调的灰色像素作为缓冲达到平滑效果。不同显卡驱动运行抗锯齿,结果也会不一样。这些差别肉眼同样分辨不出来,如果你仔细比对这些小像素点就能发现色会有轻微的差别。

跟前面一样肉眼无法分辨的差别计算机可以轻松识别。这就是为什么不同的电脑会产生不同的指纹。

重要的是要知道不同的显卡会产生不同的结果!

音频指纹原理

音频指纹原理相同,只不过网站不让你的电脑绘图而是播放音频。不同的声卡同样也会导致最终结果存在差异。这便是不同电脑会导致差异的原因之二。

在不同的电脑上渲染同样的任务会产生不同的结果,我们能做的则是通过微调结果来替换原有指纹,给结果添加噪声。

向结果加一个持续性的噪声,这还是可能会被检测到。 比如将同样的指纹获取任务传达给了上百万的用户,一些用户拥有同样的硬件和设置。网站会获取这些以哈希值为形式的测试结果。

哈希值只是这些信息的删减形式,网站获取这些结果就能比较不同用户提交的数据。

结果是:一些用户提交了同样的哈希值,而一些用户则拥有独一无二的哈希值;拥有唯一哈希值的用户实际上不一定做了篡改,但从网站的角度来看他们的哈希值很可能是人工篡改过的。

指纹跟踪解决方案

网站可以在任何时候修改绘制方式,不同的绘制方式得到的哈希值也会不一样,所以修改哈希值肯定是不行的。

因为需要知道它使用了哪些哈希值,这些哈希计算具体是在何处进行的。

其次,它一直处于被监视状态,这样的修改很容易会被网站监测到。

相反,修改指纹结果,例如加噪声反倒没那么容易被监测到~

但它还是能通过统计分析被监测到。

针对硬件指纹Canvas、WebGL和Audio的应对措施:向Canvas的读出添加一个持续噪声,当任务被提出时向其添加噪声,使得最终的哈希值有所不同。

使用这个方法时有很重要的两点需要考虑到:

  • 第一个是 当使用这种方法时,你的Canvas或WebGL哈希值会是100%特殊(这不见得是件坏事,因为Canvas、WebGL图像和AudioContext只是整个指纹中的很小一部分)
  • 第二个使用硬件指纹伪装(数据脱敏)

硬件伪装需要考虑到的是,它使用了一个持续的滤波器,但只有一个,意思是如果在不同的电脑上打开相同的浏览器文件哈希值会不一样,即便我们加了持续噪声。

举个例子:

例如A的脸用来做Canvas指纹识别,在他的脸上用一个红色滤波器后(红色透明的玻璃),他的脸已经不一样了,如果我把这个过滤器放在我的脸上,我的脸也会变成红的。

由于我们两个的面孔不一样,所以读出的结果也就不一样,利用了一个持续滤波器,但初始的硬件是不一样的,因此最终的硬件输出,也就是网站在硬件指纹伪装下所看到的还是不同的结果。

如果需要创造同样的指纹,需要在同样的机器下使用同样的滤波器!

 

第一个方案是唯一性的问题,第二个是不同计算机上的不同哈希值。

对于唯一性来说,目前最好的方法就是直接禁用硬件指纹,如果100%的特殊性不行,那么可以选择完全禁用它们。

但是如果你关掉了硬件指纹伪装,那么真实的Canvas符号和WebGL符号就会传送给网站。但是也不能把这看成是给你的浏览器和身份下了死刑,不同的电脑会产生不同的结果,这说明即使你允许网站看到你真实的Canvas哈希值,还是会有很多相同的用户跟你的Canvas哈希值一样。

需要视情况而定,即使不开启Canvas,AudioContext和WebGL伪装功能,跟你拥有相同哈希值的用户会非常多。

 

很多电脑只有集成显卡以及集成声卡,这些集成的部件十分常见。

例如,因特尔显卡一年能卖出上亿块,如果你的电脑装的是这样的显卡,并且没有伪装Canvas,WebGL和AudioContext图像指纹。那么跟你指纹哈希值相同的用户会非常多,网站不能单凭这个哈希值确定用户唯一性,但是,还有其他硬件指纹来保持你哈希值的唯一性,例如导航、媒体设备等等。

MacBook测试结果

这在MacBooks上就很占优势,原因是MacBooks都配有同样的硬件、同样的操作系统以及同样的出厂设置。

两台MacBook做为特殊案例的测试,这两台MacBooks并不配置不一样,它们的版本和上市年份不同,但它们仍然拥有很多同样的参数。

共同访问browserleaks,虽然两台MacBook有一些区别,但是它们的Canvas哈希值完全相同。

WebGL图像哈希值一样,因为WebGL图像在MacBook上是以同样的方式渲染的,但WebGL哈希值有些不同,这很是由于,这两台MacBook安装了不同的显卡,第一台是550显卡,第二台是640显卡。

这两张不同的显卡以同样的方式进行渲染,说明它们有时会用到一些专用芯片,或是最初其中只有一两块芯片被用来处理那个任务,它也使用了同样的驱动,导致WebGL图像哈希值一样。

PS:实验结果表明,MacBook网站会更难通过硬件指纹识别来不同用户。

第二个有关整体伪装技术要考虑到问题是,在不同的电脑上打开同一浏览器时读出也会不同,是用滤波器后,虽然哈希值还是一样,但是无法检测到你真实的硬件哈希值。

当然不一定需要MacBook,使用同样的显卡,声卡,操作系统和驱动一样的电脑,它们的canvas指纹也会一样。

 

最后根据这些测试得出的结论是:不单只是Mac或是相似类型的电脑,VPS上设置成一样的配置,安装一样的驱动以及操作系统,得到的指纹也会一样。

赞(0)
未经允许不得转载:吟风博客 » Canvas,WebGL以及AudioContext指纹原理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

一个纯粹用来记录的博客

Url在线批量打开