<a href="https://www.livechat.com/chat-with/14893845/" rel="nofollow">Chat with us</a>, powered by<!-- --> <a href="https://www.livechat.com/?welcome" rel="noopener nofollow" target="_blank">LiveChat</a>您需要了解的canvas知识
canvas fingerprinting

关于canvas,您需要了解的知识

2023年 4月 11日

网站可以通过包括canvas指纹在内的多种方式对您进行身份识别和追踪。这项技术通过对电脑的绘画行为进行分析,从而进行身份识别。有些人建议创建一个canvas指纹哈希列表来逃避网站的追踪,但考虑到canvas指纹的本质,这一想法并不可行。

 需要综合考虑多个因素才能理解canvas指纹的本质。我们将在本文问您介绍canvas指纹追踪的工作原理以及为什么不太可能“击败”这一技术的原因。

什么是哈希函数?

在深入了解canvas指纹追踪之前,您必须理解哈希函数这一概念。哈希函数可以在不损失数据独特性的前提下,将大量的数据压缩成为标准的数据量,即哈希。这些数据包括文字片段、图片和音频等。

哈希函数数之不尽,但是它们有一个共同点——能够快捷地对大量的数据进行压缩。

 而哈希函数被用做canvas指纹追踪的一个主要原因是:只要输入的数据保持一致,那么产生的哈希值总能保持一直。假如通过SHA-256算法写下“bizzare(奇怪的)”一词,那么产生如下哈希值:

b6e4acc0d58497837b1273b11bc14bb7334e0b56ecbda2f9b98363d343b30610

 那么有意思的环节来了,如果我们再次写入“bizzare ”,并在其后添加一个空格,结果将完全不同:

e3d52382d090793314599af020841d0772e9fb7f8d94c5dd7415fc896d4e1e8b

也就是说,如果您通过哈希函数运行两个在人类肉眼看来完全一样的元素,它们可能会产生不同的结果。这是因为细微的变化和不同几乎无法被肉眼捕捉——请记住,正是这一要点在canvas指纹追踪上发挥了巨大作用。

 您需要理解的另一个特征是哈希功能是不可逆转的。换句话说,您可以将任何数据转化为哈希值,但是您无法将哈希值再次转化为输入的原始数据。例如,您可以通过MDS哈希函数,将单词“dog(狗)”转化为哈希值:06d80eb0c50b49a509b49f2424e8c805。但是,您无法将此哈希值再次转化回您输入的单词。

此外,如果您已经将不同数量的数据进行哈希运算,那么您将无法再次分辨出原始数据的相似性和相异性。遗憾的是,此特征并不影响canvas指纹追踪的效率。

网站如何读取canvas指纹?

Canvas指纹追踪在网站要求您的浏览器绘制canvas对象的时候就已经开始了。canvas对象不是浏览器指纹,而是使用JavaScript来创造图像的一种工具。

 如果包含了多种元素、颜色和背景,那么图片将变得复杂,在不同的电脑上呈现的图片可能会稍微有所不同。即便是很细微的不同产生的哈希值也有可能天差地别。这就是为即便在给予相同的指令时,不同的电脑会产生不同的图像的原因。

 通过数学公式进行绘画

当编程器在canvas对象内进行绘画时,这一过程跟在MS Paint里面进行绘画并不相同。Canvas对象图画是按照数学公式来运行脚本而产生的。回想一下在高中时期您是怎么使用公式去画出一个圆圈的。

 首先,你需要一个坐标(X,Y)来确立圆心。接着,您需要一个以像素表示的半径 (R)。之后,您的电脑会在屏幕上会根据您给的数据画出一个圆,并且在圆内填充好各个独立像素点。听起来很简单,不是吗?

 但在绘制负责图像时,问题可能会变得复杂化。使用JavaScript,您可以在canvas对象内创建不同形状、阴影、颜色、背景及其他复杂的元素。

什么导致了“独特”的canvas指纹?

在计算机还处于“石器”时代时,所有的电脑将按照相同的指示绘出完全一样的图片。但是,随着高分辨率屏幕、硬件和软件的发展,滤镜对图像的最终表现进行了明显的提升。

滤镜的使用使得计算机利用数学公式在将输入数据转化为像素点的时候,能够创造出更加清晰,效果更好的图片。“边缘柔化”是最值得一提的滤镜,其他的滤镜还包括可以用来描绘字体的“泊坞窗”等。

同样的,所有的字体都包括字形。而字形则是一组用数字公式表达的路径或者闭环曲线。例如,小写字母“i”有两个图像符号,一个是“点”,另一个则是“竖”。这些独特的图像符号又称作“图像轮廓”,被用作像素填充,从而创建最终的字母形态。

字形有时候也会受其他因素的影响,从而有不同的表现。一个字形可能包含其他路径的参数,组成一个混合字形,例如“é”。它包含了“e”和音标符号,其中每个元素都具有各自不同的含义。

“线索”

除了基本的数学数据可以定义不同字形的轮廓之外,字体也可以储存额外的“线索”。线索就是一些在绘制字形时被执行的指令。这些指令用作移动那些被用来规定字体形状的点,从而确保这些点被摆放在字形中正确的栅格内。这样的话,字体将在所有屏幕上显示一致。

边缘柔化

边缘柔化也许是现在最流行的滤镜。边缘柔化可以使用灰色的像素点对字形的边缘进行模糊化处理。如果您对一个图片进行放大,那么您将发现字母的边缘线条并非完美,而是呈现出锯齿状。边缘柔化滤镜对锯齿状边缘进行了柔化处理,因为总体上来说,我们的眼睛会对所有的不同取一个平均值。

当两台计算机执行相同的绘图任务时,除了其他区别之外,边界像素的色调也会略有不同。这些微小的流程差异会导致图像在我们看来相同,但网站看来却截然不同。请注意,科学调查表明,电脑硬件、驱动和浏览器版本都可以影响到字形绘制结果。此外,我们的研究表明具有相同图形处理单元(GPU)的电脑大概率会产生同样的绘图结果。

 通过哈希值对canvas指纹进行对比

 网站会对浏览器下达绘图指令,进行canvas指纹追踪,但是要想返回渲染过的图像却并不现实。因此,哈希函数被用做压缩数据大小并且保持数据独特性的工具。

图片上细小的不同也会产生不一样的哈希值。这一流程允许网站通过独特的哈希值串对访客的设备进行识别和追踪。

然后,由于指令和哈希函数的多变性,想要创建一个canvas哈希库根本不可能。网站可以在任何时候通过多种方式对下达的指令和哈希函数进行修改。

结语

Canvas指纹一直是在线隐私面临的一大挑战。禁用canvas哈希功能曾被看做是一种解决方案,但却并没有被广泛接受。如今,只有2万名用户在世界范围内使用能够禁用canvas指纹的浏览器扩展程序,而这些浏览器扩展程序自身也可被用作指纹追踪!同时,对使用虚假参数对canvas指纹数据进行掩盖需要进行额外的工作。不仅如此,网站还可以轻易侦测到修改过后的参数。

 然而, 经过我们的研究,暴露您的真实canvas数据是最有效的解决方案。这样的话,您就能混入成千上万的和您有着相同硬件设备的真实用户。与此同时,Multilogin的研究团队也在持续不断的研究此课题!我们会及时向您更新我们的最新发现。