什么是设备指纹
A device fingerprint, machine fingerprint, or browser fingerprint is information collected about a remote computing device for the purpose of identification.(取自维基百科)
设备指纹的作用
定位互联网连接中的特定用户,可以用来:
- 反欺诈
- 广告投放
- 运营效果评估
- 数据交换
- 等等
设备指纹技术
设备指纹技术发展很多年,特别在移动互联网兴起后,得到了蓬勃的发展。
针对于设备指纹,我们需要提取设备/Web的特征,而这些特征需要满足:
- 一致性,一个设备的多个浏览器/APP,能指向同一设备
- 可恢复性,客户端/浏览器可能删除,在再次安装时,需要恢复
- 稳定性,随着时间的变化,要保持稳定
主要有Web的设备指纹识别和Device的设备指纹识别,针对Web的设备指纹识别,暂时不详细展开(因为用不上)。
传统的设备指纹
Android
- Device ID (IMEI/MEID/ESN)
- MAC地址
- Serial number(2.3版本以上)
- Android ID
iOS:
- UDID(已经被禁止)
- 自定义UUID(存于keychain,每一个app里能保持唯一,在re-install的话,会被重置
- adID,广告ID,已经被禁
- MAC地址
就目前而言,Android可以通过获取Device ID,而iOS几乎没有办法获取全网唯一的ID
主动式设备指纹
一般通过SDK去主动收集设备信息(传统设备指纹均是主动式),通过对这些信息的识别来判别不同设备。
通常的做法是,通过设备指纹算法,将这些信息组合起来,通过特定的hash算法得到一个设备ID,作为该设备的唯一识别ID。
通常抓取的设备信息有:
| 设备信息 | Android | iOS |
|---|---|---|
| Closed Captioning enabled(隐藏字幕) | N | Y |
| Guided Access enabled(引导式访问) | N | Y |
| In-app purchases allowed | N | Y |
| Inverted Colors enabled(反转颜色) | N | Y |
| Mono Audio enabled(单声道音频) | N | Y |
| VoiceOver enabled | N | Y |
| VoIP allowed | N | Y |
| Top 50 Songs | N | Y |
| Device Country | Y | Y |
| Device Language | Y | Y |
| Device Model | Y | Y |
| Device Name | Y | Y |
| Version | Y | Y |
| WiFi SSID | Y | Y |
| Installed Keyboards | Y | |
| Current ISP | Y | Y |
| Current Public IP | Y | Y |
| Jailbreak | N | Y |
| Installed Apps | Y | Y |
| 字体大小 | Y | Y |
| 系统字体列表 | Y | Y |
| 屏幕信息 | Y | Y |
| IMEI | Y | N |
被动式设备指纹
被动式指纹技术通常是在客户端和服务端通信过程中,在OSI七层协议中,提取设备的OS,协议栈以及网络状态等信息作为特征值,并且结合特定模型去标示唯一一台设备。
同主动式指纹技术相比,免去了SDK的步骤,直接通过数据包分析,对客户端透明,但同时,由于难度较大,需要更多的技术手段做支持。
混合式设备指纹
主动式和被动式均有比较大的缺点,比如主动式的对抗性较弱,当有些设备信息被改掉的时候,有可能会照成设备指纹变化,而被动式技术门槛较高,并且由于需要跟多的计算资源,响应不及时。
而对混合式设备指纹,我理解的式,两种指纹技术均有,在实时性要求较高的情况下,会使用主动式去识别,而对实时性要求不高的场景,使用被动式指纹去处理。
获取方法
1 | + (NSString *)appkey { |