什么是 Canvas 指纹识别,它如何工作?
2024/12/3


Andrey Vorster
Content Manager, Octo Browser
一项对50万个最受欢迎的网站的研究显示,其中0.77%的网站使用Canvas进行隐蔽的访客识别。这种指纹识别方法通过用户设备渲染图像的方式来追踪用户。在本文中,我们将解释什么是基于Canvas的数字指纹,它是如何工作的,以及为什么对抗这种识别技术的最明显方法常常无法达到预期效果。
一项对50万个最受欢迎的网站的研究显示,其中0.77%的网站使用Canvas进行隐蔽的访客识别。这种指纹识别方法通过用户设备渲染图像的方式来追踪用户。在本文中,我们将解释什么是基于Canvas的数字指纹,它是如何工作的,以及为什么对抗这种识别技术的最明显方法常常无法达到预期效果。
内容
Canvas 指纹识别是什么?它如何跟踪你?
Canvas 是一个 HTML5 元素,旨在使用 JavaScript 渲染光栅图形。乍一看,它是为了动画和效果而设计的,但实际上,它也被用于不太明显的目的,即创建设备的数字指纹。
Canvas 指纹识别 是一种用户跟踪方法,它利用 HTML5 Canvas API 生成设备的唯一数字指纹。与可以轻松删除或阻止的 cookie 不同,此方法允许网站和广告网络识别和跟踪你。
用户通常没有意识到他们正在被跟踪,并且很难阻止这种跟踪。浏览器会自动提供部分数据以正确显示网站,并可能隐秘地执行脚本以渲染图像。因此,即使你删除或阻止 cookie,网站仍然可以识别你。
为了解决这个问题,你可以安装浏览器扩展程序来更改用于指纹创建的数据。你也可以配置浏览器的隐私设置以限制 JavaScript 执行。然而,所有这些方法都不可靠。让我们来解释原因。
Canvas 指纹识别如何工作?
每台设备以自己的方式渲染相同的对象。代码级别存在差异,但人眼看不见。由于最终渲染的图像是唯一的,因此可以用来创建数字指纹和跟踪用户。
使用图形
当网站要求浏览器使用 HTML5 Canvas API 绘制对象(例如线条、矩形、文本或具有各种元素、颜色和背景的图像)时,结果可能取决于许多因素。这些因素包括操作系统、浏览器版本、已安装的字体和图形驱动程序。所有这些特性都会影响最终图像的外观,使其对每个设备都是独一无二的。
图像哈希化
为了更容易传输、比较、搜索和存储,生成的图像被转换为哈希码,该码对于特定设备及其配置是唯一的。这些哈希码随后用作数字指纹的组成部分。
用户追踪
使用此方法收集的数字指纹难以更改或伪造。即使用户清除缓存或更改浏览器设置,他们的唯一指纹可能仍保持不变。哈希存储在服务器上,并将在后续网站访问中用于用户识别。由于每个设备的哈希都是唯一的,它允许网站和广告网络跟踪用户。

检查网站可以在 browserleaks.com 收集的 Canvas 信息
Canvas 指纹识别的独特之处
随着具有不同分辨率的大量设备的出现,开发人员开始创建图像处理滤镜以增强最终外观。因此,即使有相同的指令,不同设备的渲染结果可能会有所不同。
矩阵滤镜及其在图像处理中的角色
这些滤镜用于提高图像质量和锐度。最明显的滤镜是抗锯齿,但还有其他,例如渲染字体时使用的提示。
同样,所有字体由特定的数学公式定义,并由字形组成,这些字形可以描述为轮廓或封闭曲线的集合。例如,小写字母“i” 由两个字形组成:一个用于点,另一个用于字母主体。这些字形,也称为轮廓,然后用像素填充以创建字符的最终形状。

各种字形参数
字体提示及其作用
除了定义每个特定字形轮廓的基本数学数据外,字体还可以存储额外的 提示。提示是在字形渲染到屏幕上时执行的指令。这些指令会调整定义字母形状的某些点,以确保它们与字形显示的网格正确对齐。这样可以确保无论设备和屏幕的分辨率或像素密度如何,字体在不同设备上显示一致。
屏幕抗锯齿
抗锯齿 涉及添加灰色像素以模糊每个字形的边缘。如果你放大页面,你会注意到弯曲字母的边缘并不完美,而是呈锯齿状。滤镜使对象边界平滑,使它们看起来更柔和,因为我们的眼睛会平均色调差异。

每个基于 Canvas 的指纹的唯一性不在于我们看到的最终图像,而在于每个设备处理阴影和抗锯齿的方式。即使两个设备接收到相同的渲染任务,边缘处的像素也会略有不同的阴影,以及其他一些差异。这些微小的处理差异使图像在我们看来是相同的,但在网站看来却不一样。
为什么使用哈希技术进行指纹识别
哈希是将数据转换为唯一固定长度值(哈希码)的过程,从而实现高效且快速的数据比较。这对指纹识别尤其重要,因为它有助于根据通过 Canvas 生成的图像创建唯一的设备指纹。
使用哈希有几个原因:
唯一性:哈希函数为不同的输入数据生成唯一值,允许对数据进行明确的识别,即使数据非常相似。
确定性:相同的输入数据集将始终生成相同的哈希。
不可逆性:哈希函数是单向的,这意味着你可以将任何数据转换为哈希,但无法将哈希还原为原始数据。
一致性:如果输入数据保持不变,哈希函数始终返回相同的结果。
使用哈希比较指纹
为了创建基于 Canvas 的指纹,网站发送相同的指令以渲染图形对象。然而,检索和处理如此大量的图像效率低下。相反,使用哈希函数可以在保持数据唯一性的同时减少数据大小。
由于即使是在生成图像中的微小差异也会导致截然不同的哈希结果,这是一种通过哈希代码的唯一值来识别和跟踪访问者的优秀方法。此外,哈希函数计算几乎是瞬时的,使得快速生成和比较指纹成为可能。
由于指令和哈希函数的多样性,建立一个哈希数据库来欺骗数字指纹几乎是不可能的。此外,网站可以随时更改它们以用不同的方式识别访问者。
添加硬件噪声
硬件噪声是指系统值的微小软件偏差,这些偏差会影响 Canvas 对象的生成。这种方法使得指纹更难以识别。
这个想法是,每次网站访问 Canvas API 时,特别的应用程序或反检测浏览器会拦截请求并向数据添加随机噪声。因此,生成的哈希不再用于识别你的设备。然而,问题在于硬件噪声同时使数字指纹不标准。这意味着你不能简单地添加随机噪声参数,因为这会使结果指纹在其他指纹中过于突出。因此,绕过 Canvas 请求是一项极其复杂的任务
通过其自身的数学算法,Octo Browser 向 Canvas 引入了随机但一致的噪声,影响图像 CRC 数据检查的结果。这些更改对于肉眼来说是不可见的,但图像的哈希将会不同。在此之后,数字指纹对于你运行的每个配置文件来说既是唯一的又是“常规的”。网站将这些虚拟配置文件视为普通访客,而你的设备免受跟踪的影响。

检查已通过,无警报:这是你对反检测浏览器的期望
没有硬件噪声的指纹
添加随机硬件噪声并不总是合理的。网络跟踪器将生成的哈希与数百万其他标准值进行比较。在如此庞大的数据库中,网站可以识别随机生成的噪声。这就是为何规则性与唯一性同样重要的原因。
如果你禁用硬件噪声的添加和 Canvas API 请求的拦截,网站将接收到设备的真实哈希码。当网站对完全独特或被阻止的 Canvas 反应不佳时,这可能是有用的。
在多个设备上使用配置文件
对于启用了 Canvas 设置的虚拟配置文件,哈希在具有不同硬件的不同设备上的启动之间将不会保持一致。

Octo Browser 中的数字指纹参数
在 Octo Browser 中,添加的硬件噪声是恒定的,但在现有 Canvas 指纹上起到了过滤器的作用。因此,如果设备更改,结果哈希值也会更改。
以下是一个示例:在两台不同设备上启动相同的虚拟配置文件。尽管配置文件中添加了硬件噪声,Canvas 验证结果仍然不同。

随着随机噪声加入数据,使用统计分析的网站可能会观察到指纹是 100% 唯一的
如何在多个设备上实现一致的 Canvas 指纹
的确,设备的硬件、驱动程序和浏览器版本可以影响生成的图形对象。然而,在现实情况下,Canvas 指纹哈希并不总是唯一的,因为许多 PC、Mac 和笔记本电脑共享相同的配置。你的 Canvas 指纹与拥有类似设置的其他用户融为一体。
Canvas 指纹可能因多种原因而有所不同:
图形处理单元 (GPU):不同的 GPU 有不同的架构和性能水平,影响它们呈现图形的方式。有些 GPU 支持某些功能,而其他 GPU 则不支持。
操作系统:不同的操作系统版本在处理图形方面可能有不同的设置。
驱动程序:不同操作系统及其版本之间的图形驱动程序不同,影响渲染效果。
浏览器:不同的浏览器使用不同的渲染引擎(例如,Chrome 使用 Blink,Firefox 使用 Gecko,Safari 使用 WebKit)。这些引擎的优化方式不同,影响渲染结果。
版本更新和补丁:新的操作系统和驱动程序版本可能会更改渲染算法。同样,不同版本的同一浏览器可能会采用不同的渲染优化。
所有这些因素都会影响 Canvas 如何渲染图形,从而导致指纹的差异。然而,我们发现设备的 GPU、操作系统、驱动程序和浏览器版本相同时,可能会产生相同的结果。
如果你需要在多个设备上进行安全的工作时实现一致且不变的 Canvas 指纹,请尝试在硬件、驱动程序和操作系统相匹配的相同设备型号上使用配置文件。由于用于 Canvas 检查的数据将来自相同的硬件,指纹在会话之间将保持一致。
Mac 设备
使虚拟配置文件指纹与常规配置不可区分的一种方法是在 Mac 设备上使用 Octo Browser。由于相同的 Mac 型号共享相同的构建,它们的 Canvas 指纹也几乎是相同的。
处理 Canvas 指纹
Canvas 指纹识别是一种强大而隐蔽的用户识别方法。其关键特征是生成指纹的参数位于服务器端。因此,在用户不知情的情况下,他们的设备可以使用 Canvas API 生成各种图形对象,然后转换为哈希。在不知道哈希算法的情况下,无法有效地欺骗哈希。
禁用 Canvas API 曾被认为是防止硬件指纹识别的简单方法。然而,这种方法现在已过时。许多网站积极使用 Canvas API 来正常运作,阻止这一元素可能会引起怀疑,甚至限制访问网站。
为什么选择 Octo Browser
现代网站跟踪系统不断进化。基于 Canvas 的指纹识别通常与其他追踪方法相结合,能够创建更精确和可靠的浏览器指纹。这可能会对多账户操作带来重大挑战。
使用 Octo Browser,你可以完全控制你的数字指纹,并决定网站如何感知它。如果你需要隐藏某些浏览器指纹参数并将其替换为唯一值,你可以启用硬件噪声。如果你希望与人群融为一体,可以不启用噪声。这样,你就不会在设备设置相似的访客中显得与众不同。
根据我们的经验,建议除非绝对必要,否则避免添加硬件噪声,因为某些服务可能对其特别敏感。始终记住,基于 Canvas 的哈希验证只是影响网站是否阻止你设备的因素之一。虚拟配置文件的所有参数及其数字指纹应与真实设备无异,这是 Octo Browser 的优势所在。
Canvas 指纹识别是什么?它如何跟踪你?
Canvas 是一个 HTML5 元素,旨在使用 JavaScript 渲染光栅图形。乍一看,它是为了动画和效果而设计的,但实际上,它也被用于不太明显的目的,即创建设备的数字指纹。
Canvas 指纹识别 是一种用户跟踪方法,它利用 HTML5 Canvas API 生成设备的唯一数字指纹。与可以轻松删除或阻止的 cookie 不同,此方法允许网站和广告网络识别和跟踪你。
用户通常没有意识到他们正在被跟踪,并且很难阻止这种跟踪。浏览器会自动提供部分数据以正确显示网站,并可能隐秘地执行脚本以渲染图像。因此,即使你删除或阻止 cookie,网站仍然可以识别你。
为了解决这个问题,你可以安装浏览器扩展程序来更改用于指纹创建的数据。你也可以配置浏览器的隐私设置以限制 JavaScript 执行。然而,所有这些方法都不可靠。让我们来解释原因。
Canvas 指纹识别如何工作?
每台设备以自己的方式渲染相同的对象。代码级别存在差异,但人眼看不见。由于最终渲染的图像是唯一的,因此可以用来创建数字指纹和跟踪用户。
使用图形
当网站要求浏览器使用 HTML5 Canvas API 绘制对象(例如线条、矩形、文本或具有各种元素、颜色和背景的图像)时,结果可能取决于许多因素。这些因素包括操作系统、浏览器版本、已安装的字体和图形驱动程序。所有这些特性都会影响最终图像的外观,使其对每个设备都是独一无二的。
图像哈希化
为了更容易传输、比较、搜索和存储,生成的图像被转换为哈希码,该码对于特定设备及其配置是唯一的。这些哈希码随后用作数字指纹的组成部分。
用户追踪
使用此方法收集的数字指纹难以更改或伪造。即使用户清除缓存或更改浏览器设置,他们的唯一指纹可能仍保持不变。哈希存储在服务器上,并将在后续网站访问中用于用户识别。由于每个设备的哈希都是唯一的,它允许网站和广告网络跟踪用户。

检查网站可以在 browserleaks.com 收集的 Canvas 信息
Canvas 指纹识别的独特之处
随着具有不同分辨率的大量设备的出现,开发人员开始创建图像处理滤镜以增强最终外观。因此,即使有相同的指令,不同设备的渲染结果可能会有所不同。
矩阵滤镜及其在图像处理中的角色
这些滤镜用于提高图像质量和锐度。最明显的滤镜是抗锯齿,但还有其他,例如渲染字体时使用的提示。
同样,所有字体由特定的数学公式定义,并由字形组成,这些字形可以描述为轮廓或封闭曲线的集合。例如,小写字母“i” 由两个字形组成:一个用于点,另一个用于字母主体。这些字形,也称为轮廓,然后用像素填充以创建字符的最终形状。

各种字形参数
字体提示及其作用
除了定义每个特定字形轮廓的基本数学数据外,字体还可以存储额外的 提示。提示是在字形渲染到屏幕上时执行的指令。这些指令会调整定义字母形状的某些点,以确保它们与字形显示的网格正确对齐。这样可以确保无论设备和屏幕的分辨率或像素密度如何,字体在不同设备上显示一致。
屏幕抗锯齿
抗锯齿 涉及添加灰色像素以模糊每个字形的边缘。如果你放大页面,你会注意到弯曲字母的边缘并不完美,而是呈锯齿状。滤镜使对象边界平滑,使它们看起来更柔和,因为我们的眼睛会平均色调差异。

每个基于 Canvas 的指纹的唯一性不在于我们看到的最终图像,而在于每个设备处理阴影和抗锯齿的方式。即使两个设备接收到相同的渲染任务,边缘处的像素也会略有不同的阴影,以及其他一些差异。这些微小的处理差异使图像在我们看来是相同的,但在网站看来却不一样。
为什么使用哈希技术进行指纹识别
哈希是将数据转换为唯一固定长度值(哈希码)的过程,从而实现高效且快速的数据比较。这对指纹识别尤其重要,因为它有助于根据通过 Canvas 生成的图像创建唯一的设备指纹。
使用哈希有几个原因:
唯一性:哈希函数为不同的输入数据生成唯一值,允许对数据进行明确的识别,即使数据非常相似。
确定性:相同的输入数据集将始终生成相同的哈希。
不可逆性:哈希函数是单向的,这意味着你可以将任何数据转换为哈希,但无法将哈希还原为原始数据。
一致性:如果输入数据保持不变,哈希函数始终返回相同的结果。
使用哈希比较指纹
为了创建基于 Canvas 的指纹,网站发送相同的指令以渲染图形对象。然而,检索和处理如此大量的图像效率低下。相反,使用哈希函数可以在保持数据唯一性的同时减少数据大小。
由于即使是在生成图像中的微小差异也会导致截然不同的哈希结果,这是一种通过哈希代码的唯一值来识别和跟踪访问者的优秀方法。此外,哈希函数计算几乎是瞬时的,使得快速生成和比较指纹成为可能。
由于指令和哈希函数的多样性,建立一个哈希数据库来欺骗数字指纹几乎是不可能的。此外,网站可以随时更改它们以用不同的方式识别访问者。
添加硬件噪声
硬件噪声是指系统值的微小软件偏差,这些偏差会影响 Canvas 对象的生成。这种方法使得指纹更难以识别。
这个想法是,每次网站访问 Canvas API 时,特别的应用程序或反检测浏览器会拦截请求并向数据添加随机噪声。因此,生成的哈希不再用于识别你的设备。然而,问题在于硬件噪声同时使数字指纹不标准。这意味着你不能简单地添加随机噪声参数,因为这会使结果指纹在其他指纹中过于突出。因此,绕过 Canvas 请求是一项极其复杂的任务
通过其自身的数学算法,Octo Browser 向 Canvas 引入了随机但一致的噪声,影响图像 CRC 数据检查的结果。这些更改对于肉眼来说是不可见的,但图像的哈希将会不同。在此之后,数字指纹对于你运行的每个配置文件来说既是唯一的又是“常规的”。网站将这些虚拟配置文件视为普通访客,而你的设备免受跟踪的影响。

检查已通过,无警报:这是你对反检测浏览器的期望
没有硬件噪声的指纹
添加随机硬件噪声并不总是合理的。网络跟踪器将生成的哈希与数百万其他标准值进行比较。在如此庞大的数据库中,网站可以识别随机生成的噪声。这就是为何规则性与唯一性同样重要的原因。
如果你禁用硬件噪声的添加和 Canvas API 请求的拦截,网站将接收到设备的真实哈希码。当网站对完全独特或被阻止的 Canvas 反应不佳时,这可能是有用的。
在多个设备上使用配置文件
对于启用了 Canvas 设置的虚拟配置文件,哈希在具有不同硬件的不同设备上的启动之间将不会保持一致。

Octo Browser 中的数字指纹参数
在 Octo Browser 中,添加的硬件噪声是恒定的,但在现有 Canvas 指纹上起到了过滤器的作用。因此,如果设备更改,结果哈希值也会更改。
以下是一个示例:在两台不同设备上启动相同的虚拟配置文件。尽管配置文件中添加了硬件噪声,Canvas 验证结果仍然不同。

随着随机噪声加入数据,使用统计分析的网站可能会观察到指纹是 100% 唯一的
如何在多个设备上实现一致的 Canvas 指纹
的确,设备的硬件、驱动程序和浏览器版本可以影响生成的图形对象。然而,在现实情况下,Canvas 指纹哈希并不总是唯一的,因为许多 PC、Mac 和笔记本电脑共享相同的配置。你的 Canvas 指纹与拥有类似设置的其他用户融为一体。
Canvas 指纹可能因多种原因而有所不同:
图形处理单元 (GPU):不同的 GPU 有不同的架构和性能水平,影响它们呈现图形的方式。有些 GPU 支持某些功能,而其他 GPU 则不支持。
操作系统:不同的操作系统版本在处理图形方面可能有不同的设置。
驱动程序:不同操作系统及其版本之间的图形驱动程序不同,影响渲染效果。
浏览器:不同的浏览器使用不同的渲染引擎(例如,Chrome 使用 Blink,Firefox 使用 Gecko,Safari 使用 WebKit)。这些引擎的优化方式不同,影响渲染结果。
版本更新和补丁:新的操作系统和驱动程序版本可能会更改渲染算法。同样,不同版本的同一浏览器可能会采用不同的渲染优化。
所有这些因素都会影响 Canvas 如何渲染图形,从而导致指纹的差异。然而,我们发现设备的 GPU、操作系统、驱动程序和浏览器版本相同时,可能会产生相同的结果。
如果你需要在多个设备上进行安全的工作时实现一致且不变的 Canvas 指纹,请尝试在硬件、驱动程序和操作系统相匹配的相同设备型号上使用配置文件。由于用于 Canvas 检查的数据将来自相同的硬件,指纹在会话之间将保持一致。
Mac 设备
使虚拟配置文件指纹与常规配置不可区分的一种方法是在 Mac 设备上使用 Octo Browser。由于相同的 Mac 型号共享相同的构建,它们的 Canvas 指纹也几乎是相同的。
处理 Canvas 指纹
Canvas 指纹识别是一种强大而隐蔽的用户识别方法。其关键特征是生成指纹的参数位于服务器端。因此,在用户不知情的情况下,他们的设备可以使用 Canvas API 生成各种图形对象,然后转换为哈希。在不知道哈希算法的情况下,无法有效地欺骗哈希。
禁用 Canvas API 曾被认为是防止硬件指纹识别的简单方法。然而,这种方法现在已过时。许多网站积极使用 Canvas API 来正常运作,阻止这一元素可能会引起怀疑,甚至限制访问网站。
为什么选择 Octo Browser
现代网站跟踪系统不断进化。基于 Canvas 的指纹识别通常与其他追踪方法相结合,能够创建更精确和可靠的浏览器指纹。这可能会对多账户操作带来重大挑战。
使用 Octo Browser,你可以完全控制你的数字指纹,并决定网站如何感知它。如果你需要隐藏某些浏览器指纹参数并将其替换为唯一值,你可以启用硬件噪声。如果你希望与人群融为一体,可以不启用噪声。这样,你就不会在设备设置相似的访客中显得与众不同。
根据我们的经验,建议除非绝对必要,否则避免添加硬件噪声,因为某些服务可能对其特别敏感。始终记住,基于 Canvas 的哈希验证只是影响网站是否阻止你设备的因素之一。虚拟配置文件的所有参数及其数字指纹应与真实设备无异,这是 Octo Browser 的优势所在。
随时获取最新的Octo Browser新闻
通过点击按钮,您同意我们的 隐私政策。
随时获取最新的Octo Browser新闻
通过点击按钮,您同意我们的 隐私政策。
随时获取最新的Octo Browser新闻
通过点击按钮,您同意我们的 隐私政策。



