【领域专家系列】简单聊聊设备指纹设计
背景
爬虫需要抓取到具有一定规模的数据才能产生价值,抓取设备出于成本考虑,需要控制设备数量。黑产通常会通过伪造设备信息的方式来“创造”出更多的虚假设备。为了能够在较长的一段时间内,追踪并识别出某一台具体的设备,就衍生出了设备指纹。
设备指纹需要解决的问题
高唯一性
目标是为设备生成一个唯一的设备编码。
碰撞和错误
1、什么是碰撞?
一个指纹对应多台真实设备,我们就认为该设备指纹发生了碰撞。
2、什么是错误?
一台设备对应多个设备指纹,我们就认为设备指纹产生了错误。
3、如何衡量一个设备指纹的好坏?
设备指纹的碰撞率与错误率越趋近于0就认为设备指纹越优秀。
设计原则
在设计设备指纹时,可以适当地允许错误率的错在,但要尽量降低碰撞率。碰撞就意味着对某一设备指纹进行反制时有概率误伤正常用户。
指纹生成设计
方案一
直接使用系统收集数据进行指纹值计算。
优点:实现方式简单且易维护。接收到数据数据直接计算即可。
缺点:可拓展性差。删减或新增特征值时就需要重新计算所有设备的指纹值。
![img](https://img2022.cnblogs.com/blog/765838/202205/765838-20220523154921380-772032043.png)
方案二
后端生成唯一随机值,指纹值的生成与具体设备数据无关,具体数据值用于描述设备的关联关系。
优点:可拓展性强。新增或删减特征值时只需要修改设备之间的关联关系即可。
缺点:维护成本高。相较于方案一需要维护特征值与设备之间的关联关系。
![img](https://img2022.cnblogs.com/blog/765838/202205/765838-20220523155039006-1721238704.png)
总结
从系统设计角度,方案二的可拓展性更强,在面对如今安卓、苹果设备因为更加注重用户隐私而不断收缩设备信息获取权限的环境下,显然方案二更适合。
高稳定性
传统设备标识
传统设备标识由IMEI、MAC地址、安卓ID 或者系统存储随机值来作为设备指纹,这种设备指纹的问题是依赖单一数据,稳定性太差。
![img](https://img2022.cnblogs.com/blog/765838/202205/765838-20220523155336243-945614486.png)
新一代设备标识
通过收集多维度信息进行设备指纹计算,例如网络信息、硬件信息、软件信息、存储信息(多点存储)等,不依赖单一数据源,稳定性有明显提升。
![img](https://img2022.cnblogs.com/blog/765838/202205/765838-20220523155401798-9155301.png)
防篡改性
大部分逆向选手主要针对Java层进行分析,我们通过核心代码下沉,迫使逆向选手阅读混淆后的汇编代码,提升逆向难度。
![img](https://img2022.cnblogs.com/blog/765838/202205/765838-20220523155219822-1990065027.png)
总结
设备指纹在整个风控体系中的重要性是不言而喻的,一个优秀的设备指纹决定着风控系统的下限。即使风控系统仅有策略,但只要设备指纹未失效,通过频率策略就能够一定程度的防止大规模作弊事件的发生。