定义
Canvas 指纹(Canvas Fingerprinting)是一种基于 HTML5 Canvas API 的浏览器指纹采集技术。其原理是通过 JavaScript 在隐藏的 Canvas 画布上绘制特定图形或文字,然后读取像素数据生成哈希值。由于不同设备的操作系统、显卡驱动、字体渲染引擎存在微小差异,同一段绘图代码在不同设备上产生的像素输出略有不同,从而形成具有唯一性的”指纹”。
工作原理
Canvas 指纹的采集流程通常分为以下步骤:
- 创建隐藏画布:在页面中生成一个不可见的 <canvas> 元素;
- 执行绘图操作:绘制包含中英文字符、渐变色块、几何图形的混合内容;
- 提取像素数据:调用
canvas.toDataURL()或getImageData()获取原始像素; - 生成哈希值:对像素数据进行哈希运算(如 MurmurHash3),得到 32 位或 64 位的指纹字符串。
渲染差异来源主要包括:GPU 型号与驱动版本、操作系统字体子像素渲染策略、抗锯齿算法差异等。
概念辨析
Canvas 指纹是浏览器指纹体系的组成部分之一,但两者并非同一概念:
- 浏览器指纹:聚合多维度信号(User-Agent、语言、时区、插件列表、Canvas、WebGL、AudioContext 等)形成综合设备标识;
- Canvas 指纹:专指基于 Canvas 渲染差异的单一维度指纹,是浏览器指纹的重要子集;
- WebGL 指纹:原理类似,但通过 WebGL API 渲染 3D 图形提取 GPU 渲染特征,与 Canvas 指纹常配合使用以提高识别精度。
应用场景
在跨境电商防关联领域,Canvas 指纹具有以下典型应用:
- 平台关联检测:亚马逊、TikTok Shop 等平台通过比对 Canvas 指纹判断多个店铺是否来自同一设备;
- 指纹浏览器防护:AdsPower、飞跨浏览器等工具通过覆写 Canvas API 的返回值(注入噪声像素),为每个浏览器配置文件生成独立的 Canvas 指纹,规避平台关联检测;
- 风控评估:安全研究人员使用 Canvas 指纹一致性分析识别自动化爬虫与真实用户行为差异。
参考资料
- Mowery, K., & Shacham, H. (2012). Pixel Perfect: Fingerprinting Canvas in HTML5. Web 2.0 Security & Privacy Workshop.
- Englehardt, S., & Narayanan, A. (2016). Online Tracking: A 1-million-site Measurement and Analysis. ACM CCS 2016.
- Electronic Frontier Foundation (EFF). Cover Your Tracks – Browser Fingerprinting. coveryourtracks.eff.org.