什么是色深指纹识别?
浏览器与设备

什么是色深指纹识别?

screen.colorDepth读取显示器每像素位数,这一硬件属性稳定持久,是浏览器指纹组合中的贡献因子之一。

7 分钟阅读·

色深指纹识别读取 screen.colorDepth screen.pixelDepth——两个揭示你的显示器每像素使用多少位数据的浏览器属性—— 并将该值折叠进你独一无二的浏览器档案。一行 JavaScript,无需任何权限, 2015 年以来的所有浏览器均支持。你现在就可以在 whatsmy.fyi 查看你的浏览器暴露了什么。

简要总结

screen.colorDepth 返回一个整数——几乎总是 24 或 32—— 描述你的显示器用多少位来表示每个像素的颜色。 单独来看,它的熵值不高(约 0.87 位),但与屏幕分辨率、设备像素比、 硬件并发数、时区和 GPU 数据相结合,它所贡献的指纹可在数百万档案中以超过 99% 的准确率 识别个人设备。与 Cookie 不同,它无法被删除、被 Cookie 横幅阻止, 也无法随浏览历史一起清除。

什么是色深指纹识别?

色深指纹识别是 浏览器指纹识别 这一更广泛实践中的一项技术——通过收集浏览器和硬件属性来识别设备, 而无需在设备上存储任何内容。每款浏览器都在 Screen 接口上暴露两个密切相关的属性:

  • screen.colorDepth — 表示输出设备颜色缓冲区中单个颜色值所使用的位数(即显示面板本身)。
  • screen.pixelDepth — 屏幕的位深度。在所有现代浏览器中, 该值与 colorDepth 相同,两者实际上完全一致。

两个属性均属于 CSSOM View 模块 规范,自 2015 年 7 月起可用。它们是只读的,不需要用户手势或权限提示, 在每次页面加载时均可访问。与 Canvas 指纹或 WebGL 指纹需要复杂的渲染操作不同, 读取色深是即时的,且始终成功。

色深指纹识别的工作原理

指纹脚本用一行代码读取该值,然后将其与数十个其他属性组合,构建设备档案。

// 读取色深——一行代码,无需权限,始终成功
const colorDepth = screen.colorDepth;   // 例如 24 或 32
const pixelDepth = screen.pixelDepth;   // 在现代浏览器中与上面相同

// 真实设备返回的常见值
// 24 — 标准真彩色(1670 万色)
// 30 — 深色 / HDR 面板(10.7 亿色)
// 32 — 真彩色 + 8 位 alpha 通道(Windows 上常见)

// 指纹识别器如何将其与其他屏幕信号组合
const screenProfile = {
  colorDepth: screen.colorDepth,
  pixelDepth: screen.pixelDepth,
  width: screen.width,
  height: screen.height,
  availWidth: screen.availWidth,
  availHeight: screen.availHeight,
  devicePixelRatio: window.devicePixelRatio,
};
// 这个七值对象在真实世界的设备群体中会产生数百万种独特组合

该值完全由你的物理显示硬件和操作系统配置决定。 标准 1080p 显示器报告 24;使用 32 位显示驱动程序的 Windows 机器报告 32; 支持 HDR 的面板可能报告 30。由于这些值源自硬件,它们在同一设备的所有浏览器会话、 所有网络以及所有隐私窗口中保持一致。

为什么 colorDepth 和 pixelDepth 几乎总是相同的

历史上,colorDepth 仅指颜色分量(红、绿、蓝通道), 而 pixelDepth 还包括 alpha 通道等额外位。 实际上,所有主流浏览器实现都已收敛至对两者返回相同的整数。 CSSOM 规范在形式上允许任何无符号长整数值,但真实实现中, 绝大多数桌面显示器返回 24 或 32,移动设备返回 24。

浏览器标准化的微妙差异

Firefox 和 Safari 无论实际硬件位深如何,均返回 24, 即便显示器支持 30 位深色也不例外。Chrome 则报告真实的硬件值。 这意味着,在 32 位 Windows 显示器上的 Chrome 用户与相同硬件上的 Firefox 用户, 报告的值不同——这一微妙差异会被指纹系统记录,并与浏览器 User Agent 字符串一同存档。

色深信号:统计数据与熵值

单独来看,色深是一个"弱"指纹信号——可能值的范围很窄,大多数用户共享相同的值。 它的威力在于组合。

信号 / 发现数值来源
screen.colorDepth 单独熵值约 0.87 位Fingerprint.com 研究
现代设备的主导值24 位(真彩色)CSSOM / 浏览器兼容性数据,2025 年
33+ 信号组合指纹唯一性(含色深)> 99%Fingerprint.com 研究
拥有唯一指纹的浏览器(EFF 数据集,100 万+ 样本)83.6%EFF Cover Your Tracks
Firefox / Safari 报告值(无论硬件如何)始终为 24MDN 浏览器兼容性数据,2025 年
Chrome 在 Windows 32 位显示驱动下报告的值32BrowserLeaks

单独熵值较低,这就是为什么指纹脚本从不单独依赖色深的原因。 Fingerprint.com 等平台将其与屏幕分辨率、设备像素比、硬件并发数(CPU 核数)、 设备内存、时区偏移量、语言列表、已安装字体、Canvas 哈希和 WebGL GPU 数据叠加使用—— 产生一个在数千万设备群体中实际上唯一的复合标识符。

现实中谁在使用色深数据?

商业指纹识别平台

Fingerprint.com(前身为 FingerprintJS)是部署最广泛的商业指纹识别平台。 其 公开文档 明确将 screen.colorDepth 列为每次指纹采集的 33+ 信号之一。 它被数千家电子商务和银行网站用于欺诈检测、账号接管防护、机器人检测和支付安全。

隐私研究工具

EFF 的 Cover Your Tracks 将屏幕分辨率和色深作为其测量的指纹维度之一。 在测试超过一百万个浏览器后,EFF 得出结论:83.6% 的浏览器具有完全独特的指纹—— 这一数据部分取决于数据集中的色深变异。BrowserLeaks 同样在其 40+ 信号的综合指纹测试中纳入了色深。

广告技术与跨网站追踪

广告网络使用包含色深在内的多信号指纹,在 Cookie 删除后、跨隐私浏览会话以及 同一设备上的不同浏览器之间重新识别用户。随着主流浏览器弃用第三方 Cookie, 这项技术变得更加有价值:包含色深、屏幕分辨率和 GPU 数据的指纹可以在 Cookie 重置后持续存在。

付费墙与计量访问控制

执行文章阅读限制的出版商使用指纹识别来检测清除 Cookie 以重置文章计数器的用户。 色深与屏幕尺寸和硬件并发数相结合,构成在 Cookie 删除后依然稳定的设备特征的一部分。 由于色深来自硬件,它在会话之间不会改变。

色深与相关屏幕信号的比较

色深并非孤立存在——指纹识别者会将其与一组相关的屏幕信号一起收集。 了解它们的差异有助于厘清每个信号为何能贡献熵值:

  • screen.colorDepth / screen.pixelDepth物理显示器每像素的位数。硬件决定,稳定,几乎总是 24 或 32。
  • screen.width / screen.height显示器的物理像素尺寸。与色深结合,可以缩小设备类别范围。 参见 屏幕指纹识别指南
  • window.devicePixelRatioCSS 像素与物理像素的比率。高 DPI(Retina)显示器返回 2 或 3,增加了另一个区分维度。
  • Canvas 渲染:显示器的色深会影响 Canvas 元素渲染渐变和阴影的方式, 因此色深变化可能导致 Canvas 指纹的变化。参见 Canvas 指纹识别

如何防范色深指纹识别

由于色深是通过浏览器 API 直接读取的硬件属性,防护需要欺骗 API 响应或对所有用户进行标准化。 以下方案按有效性从高到低排列:

  • 启用 privacy.resistFingerprinting 的 Firefox(最强):about:config 中将此标志设置为 true 后, Firefox 无论实际硬件如何,均对 colorDepthpixelDepth报告 24。这使你的浏览器与所有其他使用相同设置的 Firefox 用户无法区分—— 即"隐入人群"的目标。依赖特定显示渲染的部分网站可能出现异常。
  • Tor Browser(最高匿名性):Tor Browser 基于 Firefox 的指纹抵抗能力, 将所有屏幕值(包括色深)标准化,使每个 Tor 用户看起来完全相同。 这是最强的防护,但需要承受 Tor 网络带来的速度代价。
  • Brave 浏览器(日常使用推荐):Brave 的 Farbling 系统不会随机化色深 (一个低熵整数),但会主动随机化 Canvas 和 WebGL 等高熵信号, 即便色深保持准确,整体指纹精度也会显著降低。
  • 注重隐私的浏览器扩展:CanvasBlocker 等扩展可以配置为拦截 Screen API 调用 并返回伪造值,但这可能产生可检测的不一致性——例如,报告 24 位色深, 但 Canvas 输出却包含 32 位颜色信息。
  • 了解局部措施的局限性:单独遮掩色深对隐私的影响微乎其微, 因为该值熵值低,且被众多用户共享。有效防护需要同时覆盖完整的指纹信号集, 而非单个属性。在 whatsmy.fyi 上检查你当前的浏览器可识别程度。

常见问题

screen.colorDepth 会返回哪些值?

实际上,你在真实设备上看到的值是:24(真彩色——自 1990 年代末以来的通用标准, 支持 1670 万色)、32(真彩色加 8 位 alpha 通道,Windows 上特定显示驱动常见) 以及偶尔出现的 30(深色 / HDR 面板,支持 10.7 亿色)。 8 位或 16 位等低位值在现代硬件上实际上已经淘汰。

screen.colorDepth 和 screen.pixelDepth 有什么不同?

从技术上讲,colorDepth 描述颜色输出通道深度, 而 pixelDepth 还包括任何额外位(如 alpha)。 然而,在今天的每个真实浏览器实现中,两者返回相同的整数。 这一区别仅存在于 W3C 规范中;在实践中它们完全相同, 指纹脚本通常会同时读取两者以确认一致性。

色深指纹识别在隐私 / 无痕模式下有效吗?

有效。隐私浏览模式阻止将 Cookie、历史记录和表单数据保存到磁盘—— 但不会改变你的显示硬件,也不会改变 Screen API 属性返回的值。 你的 screen.colorDepth 在无痕模式和普通浏览器窗口中完全相同。 只有具备主动指纹标准化功能的浏览器(启用 privacy.resistFingerprinting 的 Firefox、 Tor Browser)才会报告不同的值。

色深对指纹唯一性的贡献有多大?

单独来看,色深贡献约 0.87 位熵——贡献有限,因为大多数现代设备共享相同的 24 位或 32 位值。 然而,单独弱信号的目标并非唯一性:指纹系统会组合 33 个或更多信号, 每个额外的弱信号都会缩小识别空间。色深最有用之处, 是在分辨那些共享相同分辨率、时区和 GPU 但显示配置不同的设备时起到消歧作用。

VPN 会改变我的色深指纹吗?

不会。VPN 会改变你可见的 IP 地址并通过加密隧道路由你的流量, 但对你的浏览器报告的 screen.colorDepth 没有任何影响。 该值直接从操作系统的显卡配置读取,与网络路由无关。 在 whatsmy.fyi 上验证你的 VPN 究竟隐藏了什么,又有什么没有隐藏。

网站能检测到我在伪造 screen.colorDepth 吗?

复杂的指纹系统可以检测到不一致性。如果你的浏览器报告 24 位色深, 但 Canvas 指纹却包含与 32 位硬件一致的颜色模式, 这种不匹配本身就会成为一个信号——讽刺的是,这可能让你比报告真实值更容易被识别。 有效的伪造需要同时对所有相关信号保持一致的假值, 这就是为什么浏览器级别的标准化(Tor、Firefox 的 resistFingerprinting)比基于扩展的修补更可靠。

哪些浏览器会为了隐私而标准化 screen.colorDepth?

启用了 privacy.resistFingerprinting = true 的 Firefox 无论硬件如何均报告 24。 基于 Firefox 构建的 Tor Browser 也是如此。 Safari 作为其实现的副作用,也始终报告 24,但并非出于明确的隐私考量。 Chrome 报告真实的硬件值。Brave 不会专门标准化色深, 但会将 Farbling 应用于其指纹保护套件中的高熵信号。

相关文章

即时查询您的 IP 地址、位置与隐私评分。

零日志。零追踪。零外部 API。

立即检测 →

相关文章

什么是色深指纹识别? | whatsmy.fyi