设备指纹分类
- 主动式设备指纹
- 被动式设备指纹
- 混合式设备指纹技术
设备指纹技术的流派
传统的设备识别手段主要依赖于单一的信息源,与此不同,新一代的设备指纹技术使用更多的信息来完成设备的识别。它通过网络收集终端设备的特征信息,并在分析与鉴别的基础上,对每一组从终端设备采集的特征信息组合赋予唯一的设备指纹ID,用以标识该终端设备。从实现的技术方法上看,可以分为主动式设备指纹与被动式设备指纹两种技术路线。
主动式设备指纹
主动式设备指纹技术一般采用JS代码或SDK,在客户端主动地收集与设备相关的信息和特征,通过对这些特征的识别来辨别不同的设备。一般的设备特征信息有:
Ø 浏览器特征,包括UA、版本、OS、插件的配置、Canvas特征等;
Ø 设备的传感器特征,比如麦克风、加速传感器的特征等;
Ø 设备OS的特征,比如是否越狱等;
Ø 设备的配置,比如网络配置,系统flash的配置等;
主动式设备指纹算法一般将这些信息组合起来,通过特定的hash算法得到一个设备指纹ID值,作为该设备的唯一标识符。同时,考虑到设备指纹的稳定性,一般还会结合其他的持久化的存储技术,将设备指纹ID长期保存起来。
被动式设备指纹
被动式设备指纹技术在终端设备与服务器通信的过程中,从数据报文的OSI七层协议中,提取出该终端设备的OS、协议栈和网络状态相关的特征集,并结合机器学习算法以标识和跟踪具体的终端设备。
与主动式设备指纹技术相比,被动式设备指纹并不必须在设备终端上嵌入用于收集设备特征信息的JS代码或SDK,其所需要的设备特征都是从终端设备发送过来的数据报文中提取,这也是其所谓“被动式”的原因。
主动式设备指纹技术,因为相对来说更为简单直接,所以业界大部分设备指纹技术厂商提供的都是该类设备指纹服务。被动式设备指纹技术,由于其需要使用机器学习技术构建设备指纹分类算法模型,具有较高的技术壁垒,因而还处于推广起步阶段。
混合式设备指纹技术
主动式设备指纹和被动式设备指纹技术,都存在着自身的缺点与局限性,限制了它们的应用范围:
Ø 对于主动式设备指纹来说,其最大的局限在于其收集的设备特征在Web域和App域中存在着区隔,即在不同的浏览器中,收集到的设备特征也各不相同。因而主动式设备指纹在不同的浏览器中,以及Web和App之间,会生成不同的设备指纹ID,无法实现Web与App间,不同的浏览器之间的设备关联。主动式设备指纹的另一个缺陷是,由于依赖于客户端代码,指纹在反欺诈的场景中对抗性较弱。
Ø 被动式设备指纹技术可以很好地解决Web与App之间、不同的浏览器之间的设备关联问题。但是由于其需要使用复杂的机器学习算法来进行设备的识别,所以占用的处理资源较多,响应时延也要比主动式设备指纹更长。
混合式设备指纹技术克服了主动式设备指纹和被动式设备指纹技术各自的固有的缺点,在准确识别设备的同时扩大了设备指纹技术的适用范围。对于Web页面或App内部的应用场景,可以通过主动式设备指纹技术进行快速的设备识别;而对于不同的浏览器之间、Web页面与App之间的设备识别与比对关联,则可以利用被动式设备指纹的技术优势来实现。
设备指纹的核心技术
设备指纹技术是一个综合性的系统工程,掌握这门技术需要跨越一系列的技术门槛,这也是为什么虽然应用场景广阔,至今市场上此项技术提供者并不多的原因。这里介绍了设备指纹两项关键的技术,大规模在线概率式记录关联和机器学习,让大家对设备指纹有个整体的认识。
阿里-设备指纹接入
阿里设备指纹接入 demo
获取设备指纹token等
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>阿里设备指纹</title>
<!-- <script type="text/javascript" src="https://g.alicdn.com/AWSC/AWSC/awsc.js"></script> -->
</head>
<script>
function createScript({ url, isAsync }, cb, attrs) {
var scriptNode = document.createElement('script')
scriptNode.type = 'text/javascript'
isAsync && (scriptNode.defer = true, scriptNode.async = true)
if (attrs) {
for (let attr in attrs) {
scriptNode[attr] = attrs[attr]
}
}
scriptNode.src = url;
document.body.appendChild(scriptNode);
if (cb) {
if (window.ActiveXObject || "ActiveXObject" in window) { //判断是否是ie
if (scriptNode.readyState) { //判断是否支持readyState
scriptNode.onreadystatechange = function () {
if (this.readyState == "loaded" || this.readyState == "complete") {
//ie 10及以下
cb && cb()
}
}
} else {
scriptNode.onload = function () {
//ie11及Edge
cb && cb()
}
}
} else { //不是ie
scriptNode.onload = function () {
// 非ie浏览器
cb && cb()
}
}
}
console.log('scriptNode', scriptNode)
return scriptNode
};
function getTokens() {
var uabModule;
var webUmidToken;
//人机识别模块,只需初始化一次
AWSC.use("uab", function (state, uab) {
if (state === "loaded") {
uabModule = uab;
var uaToken = uabModule.getUA();
console.log("uaToken", uaToken)
}
});
//设备指纹模块,得到设备token,只需初始化一次
AWSC.use("um", function (state, um) {
if (state === "loaded") {
um.init({
appName: 'saf-aliyun-com',
}, function (initState, result) {
if (initState === 'success') {
webUmidToken = result.tn;
console.log("webUmidToken", webUmidToken)
}
});
}
});
};
window.onload = function () {
createScript({ url: 'https://g.alicdn.com/AWSC/AWSC/awsc.js' }, getTokens);
}
</script>
<body>
<div>设备指纹</div>
</body>
<script>
</script>
</html>
以上代码会做调用(ynuf.aliapp.org/service/um.… 将uaToken、webUmidToken与其他参数
在风控领域的一些应用
参考
总结
- 大部分设备指纹技术厂商 提供的都是主动式设备指纹技术
- 被动式设备指纹技术,处于推广起步阶段。
- 混合式设备指纹技术,解决了Web页面与App之间的设备识别与比对关联问题