01 / 两层模型
指纹因素分两层,别混着看
Fingerprint 的文档里,“信号”这个词指两种完全不同的东西。分不清这两层,选型时几乎一定会估错工作量。
第一层:原始属性,用来算出一个身份
原始属性(Raw Device Attributes)是从设备上直接读到的值:屏幕分辨率、CPU 核心数、字体列表、GPU 渲染结果。它们本身不代表任何风险判断,只是熵——用来把这台设备和其他设备区分开。
这些值汇总后算出 visitorId,也就是访客标识。单个属性几乎没有意义,CPU 核心数是 8 的设备满世界都是;价值来自组合后的唯一性。
第二层:Smart Signals,用来给出一个判断
Smart Signals 是在原始属性之上推导出来的结论:这台设备是否越狱、是否运行在模拟器里、是否刚恢复出厂设置、请求是否被篡改。
它们回答的是“要不要拦”,而不是“这是谁”。做风控真正消费的是这一层。
采集
原始属性
硬件、系统、设置、渲染结果
平台标识符
Android ID、IDFV 等
服务端
匹配与推导
叠加 IP、TLS、请求频次等客户端改不掉的观测
抗伪造关键输出
visitorId
这是谁
Smart Signals
要不要拦
两层的分界不在客户端,而在服务端那一步推导。
三个容易混淆的标识
| 名称 | 含义 | 能否用于风控 |
|---|---|---|
deviceId | 平台自带的随机标识,如 Android ID | 不能。官方明确写明可被伪造 |
fingerprint | 多个信号哈希出的指纹 | 可以,伪造成本高得多 |
visitorId | 商业版结合服务端匹配给出的稳定标识 | 可以,是产品主输出 |
选型提醒
开源库拿到的是 deviceId 和 fingerprint。Smart Signals 属于商业版能力,开源库里没有,自己复现的成本远高于接原始属性。