2. 设备指纹采集原理
设备指纹的采集是风控系统的第一道关卡,其核心在于从终端环境中提取具备稳定性、唯一性、难篡改性的特征数据。本章将分别剖析浏览器端与移动端的采集原理,并对比各采集维度的优劣。
2.1 浏览器端采集
浏览器端设备指纹主要依赖 JavaScript 调用底层 API 获取硬件与软件渲染信息。由于浏览器沙箱限制,无法直接读取硬件序列号,因此通过渲染差异与配置组合来生成指纹。
2.1.1 Canvas 指纹
Canvas 指纹利用 HTML5 Canvas API 绘制相同的文本或图形,不同设备、显卡、驱动、操作系统在子像素渲染、抗锯齿算法、颜色转换上存在微小差异,最终生成的 Base64 图像数据或哈希值可作为唯一标识。
2.1.2 WebGL 指纹
WebGL 指纹通过获取 GPU 渲染上下文,提取显卡型号、渲染器字符串、着色器精度、最大纹理尺寸等参数。不同 GPU 厂商(NVIDIA、AMD、Intel)的驱动实现差异极大,能提供高区分度的特征。
2.1.3 AudioContext 指纹
AudioContext 指纹利用 Web Audio API 生成特定音频信号,通过分析音频处理链中数模转换、采样率、时钟抖动等硬件级差异,获取音频缓冲区特征。该特征在无痕模式下依然稳定。
| 采集维度 | 核心原理 | 稳定性 | 唯一性 | 抗篡改能力 |
|---|---|---|---|---|
| Canvas | 图形渲染差异 | 高(驱动不变则不变) | 中(同型号设备可能相似) | 中(可被插件干扰) |
| WebGL | GPU 参数与驱动 | 高 | 高(显卡型号组合多) | 低(可被虚拟 GPU 欺骗) |
| AudioContext | 音频硬件特性 | 中(受外设影响) | 中 | 高(难以模拟) |
2.2 移动端采集
移动端设备指纹采集权限更敏感,需要区分 Android 与 iOS 平台。IMEI、IDFA、OAID 是三大核心标识符,但受隐私政策影响,采集策略需动态调整。
2.2.1 IMEI(国际移动设备识别码)
IMEI 是 GSM 网络设备的唯一硬件标识,共 15 位数字。Android 10 以下可通过 TelephonyManager.getDeviceId() 获取,但 Android 10+ 已限制非系统应用读取。iOS 系统从未开放 IMEI 给第三方应用。
2.2.2 IDFA(广告标识符)
IDFA 是 iOS 系统提供的广告追踪标识,用户可在设置中重置或关闭。iOS 14.5 后要求应用通过 App Tracking Transparency(ATT)框架弹窗获取授权,授权率通常低于 40%。
2.2.3 OAID(匿名设备标识符)
OAID 由中国信通院主导,是 Android 生态的匿名设备标识方案。应用通过移动安全联盟(MSA)SDK 获取,用户可重置,但不可关闭。OAID 已成为国内 Android 设备指纹的首选标识。
| 标识符 | 平台 | 可重置 | 采集难度 | 合规风险 | 推荐度 |
|---|---|---|---|---|---|
| IMEI | Android(受限) | 否 | 高(需权限) | 高 | 低 |
| IDFA | iOS | 是 | 中(需弹窗) | 中 | 中 |
| OAID | Android | 是 | 低(SDK 集成) | 低 | 高 |
2.3 采集策略对比
- 浏览器端: 适合 Web/H5 场景,无需安装 SDK,但指纹稳定性受浏览器版本、插件、隐私模式影响较大。
- 移动端: 适合原生 App 场景,可获取硬件级标识,但需处理权限申请与合规问题。
- 混合策略: 建议同时采集浏览器端渲染特征与移动端 OAID/IDFA,通过服务端关联生成跨端指纹图谱。